From cc7775edaaa7313365b3c467040c6b456d9b3309 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Thu, 28 Sep 2023 15:55:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=96=87=E4=BB=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=90=8E=E5=88=A0=E9=99=A4=20=E6=A0=B8=E7=B4=A0?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=98=A0=E5=B0=84=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/common/util/NameStandUtil.java | 2 +- .../jeecg/modules/entity/vo/NuclideLine.java | 6 +- .../jeecg/modules/entity/vo/NuclideLines.java | 3 + .../java/org/jeecg/common/GammaFileUtil.java | 10 +- .../org/jeecg/common/util/GammaFileUtil.java | 218 ++++++++----- .../mapper/xml/SpectrumAnalysisMapper.xml | 12 +- .../service/impl/GammaServiceImpl.java | 224 ++++--------- .../impl/SpectrumAnalysisServiceImpl.java | 302 +++++++++++------- 8 files changed, 401 insertions(+), 376 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NameStandUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NameStandUtil.java index 12d7c03a..22729bb4 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NameStandUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NameStandUtil.java @@ -84,7 +84,7 @@ public class NameStandUtil { return fileNames; } - public String GetSuffix(String dataType,String sysType,String Fulltype,String LT) { + public String GetSuffix(String dataType, String sysType, String Fulltype, String LT) { String rData = ""; BigDecimal bd = new BigDecimal(LT); //将acquisition_live_time保留一位小数 如果保留一位小数后小数点后的值是0则四舍五入保留整数,否则按正常条件四舍五入保留小数位 diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java index 6bf6fa68..bce8d2d1 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java @@ -11,13 +11,13 @@ public class NuclideLine implements Serializable { private Double energy; - private Double energy_uncert; + private Double energyUncert; private Double yield; - private Double yield_uncert; + private Double yieldUncert; - private Double key_flag; + private Integer keyFlag; private String name; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java index 994bbed0..ce7a3716 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java @@ -9,11 +9,14 @@ import java.util.List; @Data public class NuclideLines implements Serializable { public List fullNames; // 核素全名 + public List venergy; // 核素的所有γ射线能量 public List vuncertE; public List vyield; // 核素γ射线分支比 public List vuncertY; + public double halflife;// 单位:秒 + public int key_flag; // 记录主射线下标 public int maxYeildIdx; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/common/GammaFileUtil.java b/jeecg-module-auto-process/src/main/java/org/jeecg/common/GammaFileUtil.java index d257c5c3..55e6cbf5 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/common/GammaFileUtil.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/common/GammaFileUtil.java @@ -1766,6 +1766,10 @@ public class GammaFileUtil { NuclidesIdent(phd, mapLines); } catch (JsonProcessingException e) { throw new RuntimeException(e); + } finally { + if (Objects.nonNull(tmpFile)) { + tmpFile.delete(); + } } return true; } @@ -2093,10 +2097,10 @@ public class GammaFileUtil { for(int j=0;j 0) { + nlines.getVuncertY().add(nuclideLineList.get(j).getYieldUncert()); + if(Objects.nonNull(nuclideLineList.get(j).getKeyFlag()) && nuclideLineList.get(j).getKeyFlag().intValue() > 0) { nlines.key_flag = j; nlines.maxYeildIdx = j; } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java index a8a8d7b6..ca881e55 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java @@ -37,7 +37,6 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.*; import java.math.BigDecimal; -import java.math.MathContext; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.NumberFormat; @@ -68,6 +67,7 @@ public class GammaFileUtil { return false; } InputStream inputStream = null; + File file = null; //加载dll工具库 System.loadLibrary("ReadPHDFile"); try { @@ -81,7 +81,7 @@ public class GammaFileUtil { inputStream = ftpClient.retrieveFileStream(fileName); if (Objects.nonNull(inputStream)) { //声明一个临时文件 - File file = File.createTempFile("tmp", null); + file = File.createTempFile("tmp", null); //将ftp文件的输入流复制给临时文件 FileUtils.copyInputStreamToFile(inputStream, file); //读取文件信息 @@ -187,7 +187,7 @@ public class GammaFileUtil { phd.getSpec().setBegin_channel(struct.g_begin_channel); phd.getSpec().setCounts(struct.g_counts); int i = 0; - for (; i < phd.getSpec().getNum_g_channel(); ++i) { + for (; i < phd.getSpec().getNum_g_channel(); i++) { if (phd.getSpec().getCounts().get(i) > 0) { break; } @@ -260,6 +260,9 @@ public class GammaFileUtil { if (Objects.nonNull(inputStream)){ inputStream.close(); } + if (Objects.nonNull(file)) { + file.delete(); + } } catch (IOException e) { throw new RuntimeException(e); } @@ -279,6 +282,7 @@ public class GammaFileUtil { String warning = "ftp连接失败"; } InputStream inputStream = null; + File file = null; try { //切换被动模式 ftpClient.enterLocalPassiveMode(); @@ -291,7 +295,7 @@ public class GammaFileUtil { inputStream = ftpClient.retrieveFileStream(lcFileName); if (Objects.nonNull(inputStream)){ //声明一个临时文件 - File file = File.createTempFile("tmp", null); + file = File.createTempFile("tmp", null); //将ftp文件的输入流复制给临时文件 FileUtils.copyInputStreamToFile(inputStream, file); //调用FileUtils的readLines方法获取文件的所有行数据 @@ -311,6 +315,9 @@ public class GammaFileUtil { if (Objects.nonNull(inputStream)) { inputStream.close(); } + if (Objects.nonNull(file)) { + file.delete(); + } } catch (IOException e) { throw new RuntimeException(e); } @@ -323,6 +330,7 @@ public class GammaFileUtil { String warning = "ftp连接失败"; } InputStream inputStream = null; + File file = null; try { //切换被动模式 ftpClient.enterLocalPassiveMode(); @@ -335,7 +343,7 @@ public class GammaFileUtil { inputStream = ftpClient.retrieveFileStream(scacFileName); if (Objects.nonNull(inputStream)){ //声明一个临时文件 - File file = File.createTempFile("tmp", null); + file = File.createTempFile("tmp", null); //将ftp文件的输入流复制给临时文件 FileUtils.copyInputStreamToFile(inputStream, file); //调用FileUtils的readLines方法获取文件的所有行数据 @@ -355,6 +363,9 @@ public class GammaFileUtil { if (Objects.nonNull(inputStream)) { inputStream.close(); } + if (Objects.nonNull(file)) { + file.delete(); + } } catch (IOException e) { throw new RuntimeException(e); } @@ -780,7 +791,7 @@ public class GammaFileUtil { phd.getMapNucActMda().get(str_key).setHalflife(Double.valueOf(nuclIdedSpectrum.getHalflife())); List vEner = phd.getMapNucActMda().get(str_key).getVEnergy(); Double key_ener = Double.valueOf(nuclIdedSpectrum.getKeyEnergy()); - for(int i=0; i counts = calFcnEval.counts; double effi = counts.get(0); int index = 0; - for(int i=1; i= vMdcInfo.get(0)) { index = i; if(phd.getVEnergy().get(i) - vMdcInfo.get(0) > vMdcInfo.get(0) - phd.getVEnergy().get(i-1)){ @@ -1331,7 +1342,7 @@ public class GammaFileUtil { if(m_nSChan == 0){ i = 1; } - for(; i m_nCount){ end = m_nCount; } - for(int i=start-1; i m_nCount){ end = m_nCount; } - for(int i=start-1; iSpectrum.counts[i] == 0) continue; + for(int i=start-1; i vPeak.get(index).right){ - ++index; + index++; } if(index < peakNum) { startPeak = index; while(index < peakNum && vPeak.get(index).left < end){ - ++index; + index++; } endPeak = index-1; } @@ -1528,7 +1562,7 @@ public class GammaFileUtil { return datalist; } - for(int i=startPeak; i<=endPeak; ++i) { + for(int i=startPeak; i<=endPeak; i++) { PeakInfo peak = vPeak.get(i); ChartData cData = new ChartData(); @@ -1548,7 +1582,7 @@ public class GammaFileUtil { cData.setGroup("energy"); CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(regChan, p); List regEnergy = calValuesOut.counts; - for(int ii=0; ii end){ continue; } @@ -1559,7 +1593,7 @@ public class GammaFileUtil { } } else { cData.setGroup("channel"); - for(int ii=0; ii end){ continue; } @@ -1580,7 +1614,7 @@ public class GammaFileUtil { CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(phd.getBaseCtrls().getXCtrl(), phd.getUsedEnerPara().getP()); List vEner = calValuesOut.counts; if(phd.getBaseCtrls().getXCtrl().size() == phd.getBaseCtrls().getYCtrl().size()) { - for(int i=0; i shapes = new LinkedList<>(); int num = phd.getBaseCtrls().getXCtrl().size(); if(num == phd.getBaseCtrls().getYCtrl().size()) { - for(int i=0; i nuclideLinesMap = GetNuclideLines(nuclides); AnalyseSpectrum(phd, nuclideLinesMap); } @@ -1652,6 +1687,7 @@ public class GammaFileUtil { String strValue = CalValuesHandler.analyseSpectrum(phdStr, nuclideLinesMap, tmpFile.getAbsolutePath()); Map parseMap = JSON.parseObject(strValue, Map.class); for (Map.Entry entry:parseMap.entrySet()) { + System.out.println(entry.getKey()); if (entry.getKey().equalsIgnoreCase("bAnalyed")) { boolean value = JSON.parseObject(JSON.toJSONString(entry.getValue()), Boolean.class); phd.setBAnalyed(value); @@ -1879,6 +1915,10 @@ public class GammaFileUtil { NuclidesIdent(phd, mapLines); } catch (JsonProcessingException e) { throw new RuntimeException(e); + } finally { + if (Objects.nonNull(tmpFile)) { + tmpFile.delete(); + } } return true; } @@ -1907,7 +1947,7 @@ public class GammaFileUtil { if(old_ener.size() != new_ener.size()) { return 1; } - for(int i=0; i 1E-6){ return 1; } @@ -1918,7 +1958,7 @@ public class GammaFileUtil { if(old_reso.size() != new_reso.size()) { return 1; } - for(int i=0; i 1E-6){ return 1; } @@ -1929,7 +1969,7 @@ public class GammaFileUtil { if(old_effi.size() != new_effi.size()) { return -1; } - for(int i=0; i 1E-6){ return -1; } @@ -1940,13 +1980,13 @@ public class GammaFileUtil { public void UpdateEfficiency(PHDFile phd) { int peakNum = phd.getVPeak().size(); List vEner = new LinkedList<>(); - for (int i=0; i vEffi = calValuesOut.counts; - for (int i=0; i map) { // 当重新分析时先清除上一次的分析结果 phd.getMapNucActMda().clear(); - for(int i=0; i= 510 && phd.getVPeak().get(j).energy <= 512) { continue; // 峰中心道能量为511的峰不进行核素识别 @@ -2003,7 +2043,7 @@ public class GammaFileUtil { // 核素匹配到峰 if(sum_total > 0) { // 如果该核素属特殊核素,则用“特殊核素配置文件”中指明的其他核素的半衰期 - double halflife = (Objects.nonNull(mapHalflife.get(iter.getKey()))? iter.getValue().halflife : mapHalflife.get(iter.getKey())); + double halflife = (Objects.isNull(mapHalflife.get(iter.getKey()))?iter.getValue().halflife:mapHalflife.get(iter.getKey())); double lambda = Math.log(2.0) / halflife; double rate = sum_found / sum_total; if(rate > 0.5) { @@ -2012,7 +2052,7 @@ public class GammaFileUtil { if(mainPeakIdx < 0) { maxFoundYield = 0; - for(int ii=0; ii= 0 && vYield.get(ii) > maxFoundYield) { mainPeakIdx = vFit.get(ii); maxFoundYield = vYield.get(ii); @@ -2020,7 +2060,10 @@ public class GammaFileUtil { } if(mainPeakIdx < 0) continue; } - + if (Objects.isNull(phd.getMapNucActMda().get(iter.getKey()))) { + Map mapNucActMda = phd.getMapNucActMda(); + mapNucActMda.put(iter.getKey(), new NuclideActMda()); + } NuclideActMda ActMda = phd.getMapNucActMda().get(iter.getKey()); boolean bActBigger = CalculateMDCs(phd, ActMda, mainPeakIdx, lambda, maxFoundYield, 1.0); @@ -2041,7 +2084,7 @@ public class GammaFileUtil { } int fitLineNum = 0, peakIdx = -1; - for(int ii=0; ii= 0) { // 向峰信息表中添加识别到的核素 if(vFit.get(ii) != peakIdx) { @@ -2061,7 +2104,7 @@ public class GammaFileUtil { ActMda.getVUncertE().add(iter.getValue().vuncertE.get(ii)); ActMda.getVYield().add(vYield.get(ii)); ActMda.getVUncertY().add(iter.getValue().vuncertY.get(ii)); - ++fitLineNum; + fitLineNum++; } } phd.getMapNucActMda().put(iter.getKey(), ActMda); @@ -2082,7 +2125,7 @@ public class GammaFileUtil { for (int j=i+1; j strList = Arrays.asList(line.split("\\s")); + List strList = Arrays.asList(line.split("\\s+")); if(strList.size() == 3) { mapHalflife.put(strList.get(0), Double.valueOf(strList.get(2)) * 86400); } @@ -2097,7 +2140,7 @@ public class GammaFileUtil { for (int j=i+1; j strList = Arrays.asList(line.split("\\s")); + List strList = Arrays.asList(line.split("\\s+")); vNuclides.addAll(strList); } } @@ -2109,28 +2152,32 @@ public class GammaFileUtil { } private void FilterNuclideLine(NuclideLines lines, double lowE) { + //获取energy的数组数据 List vE = lines.venergy; - for(int i=0, j=0; i 0) { List vY = lines.vyield; lines.maxYeildIdx = 0; double maxYield = vY.get(0); - for(int ii=1; ii maxYield) { maxYield = vY.get(ii); lines.maxYeildIdx = ii; @@ -2212,21 +2259,20 @@ public class GammaFileUtil { for(int j=0;j 0) { + nlines.getVuncertY().add(nuclideLineList.get(j).getYieldUncert()); + if(Objects.nonNull(nuclideLineList.get(j).getKeyFlag()) && nuclideLineList.get(j).getKeyFlag().intValue() > 0) { nlines.key_flag = j; nlines.maxYeildIdx = j; } } mapLines.put(name, nlines); } - long start = System.currentTimeMillis(); List halfs = spectrumAnalysisMapper.getHalf(nuclideList); for(int m=0;m vecPeak.get(index).right){ - ++index; + index++; } if(index < peakNum) { startPeak = index; while(index < peakNum && vecPeak.get(index).left < end){ - ++index; + index++; } endPeak = index-1; } @@ -2295,7 +2341,7 @@ public class GammaFileUtil { List regPeak = new LinkedList<>(); int channel = 1; - for(int i=start-1; i= peak.left && channel <= peak.right) { @@ -2332,7 +2378,7 @@ public class GammaFileUtil { break; } } - for(int i=channel; i 0 && phd.getVBase().get(i) > 0) { SeriseData seriseData = new SeriseData(); seriseData.setX(i+1); @@ -2387,7 +2433,7 @@ public class GammaFileUtil { if(p_size >= 2 && m_curParam.getP().get(2) > 0) { // Polynomial: y=a0+a1*x+a2*x^2+a3*x^3 equation +="Energy = "+m_curParam.getP().get(1)+" + C * "+m_curParam.getP().get(2); - for(int i=3; i<=p_size; ++i) { + for(int i=3; i<=p_size; i++) { equation += " + C" + (i-1) +" * "+m_curParam.getP().get(i)+""; } } else if(p_size == 1) { @@ -2420,7 +2466,7 @@ public class GammaFileUtil { vChan.add(MaxChan); List vFit = CalValuesHandler.calFcnEval(vChan, m_curParam.getP()).counts; - for(int i=0; i 0){ SeriseData seriseData = new SeriseData(); seriseData.setX(vChan.get(i)); @@ -2437,7 +2483,7 @@ public class GammaFileUtil { ChartData pData = new ChartData(); pData.setColor("red"); pData.setType("Scatter"); - for(int i=0; i= 2 && m_curParam.getP().get(1) > 0 && m_curParam.getP().get(2) > 0) { // Square root of polynomial: y = sqrt(a0+a1*x+a2*x^2+a3*x^3 ) equation += "FWHM = ("+m_curParam.getP().get(1)+" + E * "+m_curParam.getP().get(2); - for(int i=3; i<=p_size; ++i) { + for(int i=3; i<=p_size; i++) { equation += " + E"+(i-1)+" * "+m_curParam.getP().get(i); } equation += ")"+1+"/"+2+""; @@ -2489,7 +2535,7 @@ public class GammaFileUtil { vEner.add(maxE); List vFit = CalValuesHandler.calFcnEval(vEner, m_curParam.getP()).counts; - for(int i=0; i 0){ SeriseData seriseData = new SeriseData(); seriseData.setX(vEner.get(i)); @@ -2506,7 +2552,7 @@ public class GammaFileUtil { ChartData pData = new ChartData(); pData.setColor("red"); pData.setType("Scatter"); - for(int i=0; i"+m_curParam.getP().get(3)+") * "+ @@ -2557,7 +2603,7 @@ public class GammaFileUtil { case 6: // Polynomial in log(y) against log(x): log(y) = a0 + a1*log(x) +a2*log(x)^2+ a3*log(x)^3 if(p_size >= 2) { equation += "log(Efficiency) = "+m_curParam.getP().get(1)+" + "+m_curParam.getP().get(2)+" * log(E)"; - for(int i=3; i<=p_size; ++i) { + for(int i=3; i<=p_size; i++) { equation += " + "+m_curParam.getP().get(i)+" * log(E)"+(i-1)+""; } } @@ -2565,7 +2611,7 @@ public class GammaFileUtil { case 8: // Polynomial in log(y) against log(1/x): log(y) = a0 + a1*log(c/x) + a2*log(c/x)^2 + a3*log(c/x)^3 + a4*log(c/x)^4 if(p_size >= 3) { equation += "log(Efficiency) = "+m_curParam.getP().get(1)+" + "+m_curParam.getP().get(2)+" * log(C/E)"; - for(int i=3; i<=p_size; ++i) { + for(int i=3; i<=p_size; i++) { equation += " + "+m_curParam.getP().get(i)+" * log(C/E)"+(i-1)+""; } } @@ -2623,7 +2669,7 @@ public class GammaFileUtil { vEner.add(maxE); List vFit = CalValuesHandler.calFcnEval(vEner, m_curParam.getP()).counts; - for(int i=0; i 0){ SeriseData seriseData = new SeriseData(); seriseData.setX(vEner.get(i)); @@ -2640,7 +2686,7 @@ public class GammaFileUtil { ChartData pData = new ChartData(); pData.setColor("red"); pData.setType("Scatter"); - for(int i=0; i 0) { spectrum.append("#TotalEff\r\n"); TotaleffBlock g_totE = phd.getUsedTotEKD(); - for(int i=0; i phd.getSpec().getNum_g_channel()){ end = (int) phd.getSpec().getNum_g_channel(); } - for(int i=start-1; i= energy) { if(phd.getVEnergy().get(i) - energy > energy - phd.getVEnergy().get(i-1)){ @@ -4210,7 +4256,7 @@ public class GammaFileUtil { public int FindNearPeak(List vPeak, int channel, boolean bFind) { boolean t_bFind = false; int i=0, peakNum = vPeak.size(); - for(; i= peak.left && channel <= peak.right) { // 如果 channel 在峰的左右边界内 @@ -4243,7 +4289,7 @@ public class GammaFileUtil { public List FitPeakBaseLine(PHDFile phd, List vIdx) { List tablePeaksList = new LinkedList<>(); int peakNum = vIdx.size(); - for (int i=0; i