diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/ParamConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/ParamConfig.java new file mode 100644 index 00000000..280889fe --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/ParamConfig.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.entity.vo.QCFlagParmData; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; + +@Data +@XmlAccessorType(XmlAccessType.FIELD) +public class ParamConfig { + @XmlElement(name = "collectionTime") + private RuleGroup collectionTime; + + @XmlElement(name = "acquisitionTime") + private RuleGroup acquisitionTime; + + @XmlElement(name = "xeVolume") + private RuleGroup xeVolume; + + @XmlElement(name = "airVolume") + private RuleGroup airVolume; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/QCFlagParam.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/QCFlagParam.java new file mode 100644 index 00000000..326fe950 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/QCFlagParam.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.entity.vo.QCFlagParmData; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "config") +@XmlAccessorType(XmlAccessType.FIELD) +public class QCFlagParam { + @XmlElement(name = "sauna") + public ParamConfig sauna; + + @XmlElement(name = "sauna2") + public ParamConfig sauna2; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/Rule.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/Rule.java new file mode 100644 index 00000000..44d5ee9d --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/Rule.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.entity.vo.QCFlagParmData; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; + +@Data +@XmlAccessorType(XmlAccessType.FIELD) +public class Rule { + @XmlAttribute(name = "min") + private double min; + + @XmlAttribute(name = "max") + private Double max; // 使用Double以便可以为null(表示没有上限) + + @XmlAttribute(name = "color") + private String color; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/RuleGroup.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/RuleGroup.java new file mode 100644 index 00000000..6f5af5c0 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/QCFlagParmData/RuleGroup.java @@ -0,0 +1,15 @@ +package org.jeecg.modules.entity.vo.QCFlagParmData; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import java.util.List; + +@Data +@XmlAccessorType(XmlAccessType.FIELD) +public class RuleGroup { + @XmlElement(name = "Rule") + List rules; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/Sections.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/Sections.java index cf5ed71b..3ac27b7b 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/Sections.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/Sections.java @@ -1,11 +1,22 @@ package org.jeecg.modules.entity.vo; import lombok.Data; +import org.jeecg.common.properties.ParameterProperties; +import org.jeecg.modules.base.enums.StationDetailType; +import org.jeecg.modules.entity.vo.QCFlagParmData.QCFlagParam; +import org.jeecg.modules.entity.vo.QCFlagParmData.Rule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import java.io.File; import java.io.Serializable; import java.util.LinkedList; import java.util.List; +import static org.jeecg.modules.base.enums.StationDetailType.*; + @Data public class Sections implements Serializable { @@ -17,7 +28,17 @@ public class Sections implements Serializable { private List airVolumeSections; - public Sections(){ + //region QC-Flag参数 + private List collectionTimeRules; + + private List acquisitionTimeRules; + + private List xeVolumeRules; + + private List airVolumeRules; + + //endregion + public Sections() { collectionTimeSections = new LinkedList<>(); collectionTimeSections.add(0.0); collectionTimeSections.add(6.0); @@ -43,4 +64,34 @@ public class Sections implements Serializable { airVolumeSections.add(10.0); } + + public Sections(StationDetailType sectionsType,String pathname) { + try { + // 创建JAXB上下文 + JAXBContext context = JAXBContext.newInstance(QCFlagParam.class); + // 创建Unmarshaller + Unmarshaller unmarshaller = context.createUnmarshaller(); + + File file = new File(pathname); + QCFlagParam config = (QCFlagParam) unmarshaller.unmarshal(file); + switch (sectionsType) { + case SAUNA: + collectionTimeRules = config.sauna.getCollectionTime().getRules(); + acquisitionTimeRules = config.sauna.getAcquisitionTime().getRules(); + xeVolumeRules = config.sauna.getXeVolume().getRules(); + airVolumeRules = config.sauna.getAirVolume().getRules(); + break; + case SAUNA2: + collectionTimeRules = config.sauna2.getCollectionTime().getRules(); + acquisitionTimeRules = config.sauna2.getAcquisitionTime().getRules(); + xeVolumeRules = config.sauna2.getXeVolume().getRules(); + airVolumeRules = config.sauna2.getAirVolume().getRules(); + break; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + } diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java index 62871895..9c695b34 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java @@ -17,6 +17,7 @@ import org.jeecg.common.properties.ParameterProperties; import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.modules.base.abstracts.AbstractLogOrReport; import org.jeecg.modules.base.entity.configuration.GardsNuclLinesLib; +import org.jeecg.modules.base.entity.configuration.GardsStations; import org.jeecg.modules.base.enums.CalName; import org.jeecg.modules.base.enums.CalType; import org.jeecg.modules.base.enums.MiddleDataType; @@ -228,7 +229,7 @@ public class GammaFileUtil extends AbstractLogOrReport { } // 初始化默认分析设置 - if(phd.getHeader().getSystem_type().equalsIgnoreCase("P")) { + if (phd.getHeader().getSystem_type().equalsIgnoreCase("P")) { phd.getSetting().setECutAnalysis_Low(35.0); phd.getSetting().setBUpdateCal(true); } @@ -245,7 +246,7 @@ public class GammaFileUtil extends AbstractLogOrReport { phd.setBAnalyed(false); phd.setAnaly_start_time(DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss")); - }catch (ParseException e) { + } catch (ParseException e) { throw new RuntimeException(e); } return true; @@ -256,12 +257,12 @@ public class GammaFileUtil extends AbstractLogOrReport { String fileName = phd.getFilename(); //文件名称需要加上自动处理的前缀以及修改不同的文件后缀名 String subFileName = fileName.substring(0, fileName.lastIndexOf(StringPool.DOT)); - if(StringUtils.isNotBlank(subFileName)){ + if (StringUtils.isNotBlank(subFileName)) { File lcFile = null; File scacFile = null; InputStream inputStreamBase = null; try { - String lcFileName = prefixName+"_"+subFileName + ".lc"; + String lcFileName = prefixName + "_" + subFileName + ".lc"; String fromPathLc = pathName + StringPool.SLASH + lcFileName; lcFile = ftpUtil.downloadFile(fromPathLc); if (Objects.nonNull(lcFile)) { @@ -271,7 +272,7 @@ public class GammaFileUtil extends AbstractLogOrReport { //将数据结果赋值给 phdFile的vLc phd.setVLc(vDataLc); } - String scacFileName = prefixName+"_"+subFileName + ".scac"; + String scacFileName = prefixName + "_" + subFileName + ".scac"; String fromPathScac = pathName + StringPool.SLASH + scacFileName; scacFile = ftpUtil.downloadFile(fromPathScac); if (Objects.nonNull(scacFile)) { @@ -281,7 +282,7 @@ public class GammaFileUtil extends AbstractLogOrReport { //将数据结果赋值给 phdFile的vLc phd.setVScac(vDataScac); } - String baselineFileName = prefixName+"_"+subFileName + ".baseline"; + String baselineFileName = prefixName + "_" + subFileName + ".baseline"; String fromPathBase = pathName + StringPool.SLASH + baselineFileName; inputStreamBase = ftpUtil.downloadFileStream(fromPathBase); if (Objects.nonNull(inputStreamBase)) { @@ -290,7 +291,7 @@ public class GammaFileUtil extends AbstractLogOrReport { // 将phdFile的BaseCtrls的BaseLine部分数据 赋值给 phdFile的vBase phd.setVBase(phd.getBaseCtrls().getBaseline()); } - }catch (IOException e){ + } catch (IOException e) { e.printStackTrace(); } finally { try { @@ -307,28 +308,28 @@ public class GammaFileUtil extends AbstractLogOrReport { //声明一个结果集合 List vData = new LinkedList<>(); //遍历行数据 - for (int i=0; i< readLines.size(); i++){ + for (int i = 0; i < readLines.size(); i++) { //读取当前行数据 String line = readLines.get(i); //判断当前行是否包含# 如果包含则进入 - if (line.contains("#")){ + if (line.contains("#")) { //声明下一行的下标 - int j=i+1; + int j = i + 1; //读取当前行的下一行的数据 line = readLines.get(j); //将下一行的数据赋给一个 新的行数据 String line1 = line; //遍历判断 下标不是行数据的最后一行 且 行数据不为空 - while (j != readLines.size()-1 && StringUtils.isNotBlank(line) ){ + while (j != readLines.size() - 1 && StringUtils.isNotBlank(line)) { //行下标+1 j++; //读取下一行数据 line = readLines.get(j); //判断下一行数据是否包含# - if (!line.contains("#")){ + if (!line.contains("#")) { //不包含#则将当前行数据 拼接到 行数据 line1 += StringPool.SPACE + line; - }else {//否则结束循环 + } else {//否则结束循环 break; } } @@ -337,13 +338,13 @@ public class GammaFileUtil extends AbstractLogOrReport { //行数据根据任意形式空格切割成数组 List strList = Arrays.asList(line1.split("\\s+")); //如果数据量小于2 跳过本次循环 继续下一行读取 - if(strList.size() < 2){ + if (strList.size() < 2) { continue; } //遍历行数据数组 - for(int k=1; k vTemp = map.get("#AnalyseRange"); //如果集合大小等于2 - if(vTemp.size() == 2) { + if (vTemp.size() == 2) { //集合中第一个赋值给 phdFile的baseCtrls的rg_low phd.getBaseCtrls().setRg_low(vTemp.get(0).intValue()); //集合中第二个赋值给 phdFile的baseCtrls的rg_high @@ -408,28 +409,28 @@ public class GammaFileUtil extends AbstractLogOrReport { } } //判断map是否含有#XCtrl - if(map.containsKey("#XCtrl")) { + if (map.containsKey("#XCtrl")) { //根据#XCtrl获取对应的集合信息 List vTemp = map.get("#XCtrl"); //将集合数据 赋值给 phdFile的BaseCtrls的xCtrl phd.getBaseCtrls().setXCtrl(vTemp); } //判断map是否含有#YCtrl - if(map.containsKey("#YCtrl")) { + if (map.containsKey("#YCtrl")) { //根据#YCtrl获取集合信息 List vTemp = map.get("#YCtrl"); //将集合信息赋值给 phdFile的BaseCtrls的yCtrl phd.getBaseCtrls().setYCtrl(vTemp); } //判断map是否含有#YSlope - if(map.containsKey("#YSlope")) { + if (map.containsKey("#YSlope")) { //根据#YSlope获取集合信息 List vTemp = map.get("#YSlope"); //将集合信息赋值给 phdFile的BaseCtrls的ySlope phd.getBaseCtrls().setYSlope(vTemp); } //判断map是否含有#Baseline - if(map.containsKey("#Baseline")) { + if (map.containsKey("#Baseline")) { //根据#Baseline获取集合数据 List vTemp = map.get("#Baseline"); //截取集合 下标1到末尾的数据 @@ -438,7 +439,7 @@ public class GammaFileUtil extends AbstractLogOrReport { phd.getBaseCtrls().setBaseline(list); } //判断map是否含有#StepCounts - if(map.containsKey("#StepCounts")) { + if (map.containsKey("#StepCounts")) { //根据#StepCounts获取集合数据 List vTemp = map.get("#StepCounts"); //截取集合 下标1到末尾的数据 @@ -455,40 +456,40 @@ public class GammaFileUtil extends AbstractLogOrReport { // Collection Time、 Acq Time、 Decay Time、 SampVol、 Be7-FWHM、 Ba140-MDC、 Xe133-MDC List qcState = new LinkedList<>(); //初始化七个状态颜色为 灰色 - for (int i=0;i<7; i++){ + for (int i = 0; i < 7; i++) { qcState.add("GRAY"); } //判断 phdFile下QcItems大小是否小于等于5 - if(phd.getQcItems().size() <= 5) { + if (phd.getQcItems().size() <= 5) { //执行判断QC状态方法 RunQC(phd); } //判断 QcItems的col_time的BPass状态 如果是true 则颜色赋值为BLUE 如果是false 则颜色赋值为 RED - qcState.set(0, phd.getQcItems().get("col_time").isBPass()?"BLUE":"RED"); + qcState.set(0, phd.getQcItems().get("col_time").isBPass() ? "BLUE" : "RED"); //判断 QcItems的acq_time的BPass状态 如果是true 则颜色赋值为BLUE 如果是false 则颜色赋值为 RED - qcState.set(1, phd.getQcItems().get("acq_time").isBPass()?"BLUE":"RED"); + qcState.set(1, phd.getQcItems().get("acq_time").isBPass() ? "BLUE" : "RED"); //判断 QcItems的decay_time的BPass状态 如果是true 则颜色赋值为BLUE 如果是false 则颜色赋值为 RED - qcState.set(2, phd.getQcItems().get("decay_time").isBPass()?"BLUE":"RED"); + qcState.set(2, phd.getQcItems().get("decay_time").isBPass() ? "BLUE" : "RED"); //判断 QcItems的samp_vol的BPass状态 如果是true 则颜色赋值为BLUE 如果是false 则颜色赋值为 RED - qcState.set(3, phd.getQcItems().get("samp_vol").isBPass()?"BLUE":"RED"); + qcState.set(3, phd.getQcItems().get("samp_vol").isBPass() ? "BLUE" : "RED"); //判断当前文件系统类型是否匹配 P - if(phd.getHeader().getSystem_type().equalsIgnoreCase("P")) { + if (phd.getHeader().getSystem_type().equalsIgnoreCase("P")) { //如果匹配P 判断 QcItems的Be7-FWHM数据是否为空 - if(Objects.nonNull(phd.getQcItems().get("Be7-FWHM"))) { + if (Objects.nonNull(phd.getQcItems().get("Be7-FWHM"))) { //不为空 判断 QcItems的Be7-FWHM的BPass状态 如果是true 则颜色赋值为BLUE 如果是false则颜色赋值为RED - qcState.set(4, phd.getQcItems().get("Be7-FWHM").isBPass()?"BLUE":"RED"); + qcState.set(4, phd.getQcItems().get("Be7-FWHM").isBPass() ? "BLUE" : "RED"); } //如果匹配P 判断 QcItems的Ba140-MDC数据是否为空 - if(Objects.nonNull(phd.getQcItems().get("Ba140-MDC"))) { + if (Objects.nonNull(phd.getQcItems().get("Ba140-MDC"))) { //不为空 判断 QcItems的Ba140-MDC的BPass状态 如果是true 则颜色赋值为BLUE 如果是false则颜色赋值为RED - qcState.set(5, phd.getQcItems().get("Ba140-MDC").isBPass()?"BLUE":"RED"); + qcState.set(5, phd.getQcItems().get("Ba140-MDC").isBPass() ? "BLUE" : "RED"); } - } else if(phd.getHeader().getSystem_type().equalsIgnoreCase("G")) { + } else if (phd.getHeader().getSystem_type().equalsIgnoreCase("G")) { //判断当前文件系统类型是否匹配 G //如果匹配G 判断 QcItems的Xe133-MDC数据是否为空 - if(Objects.nonNull(phd.getQcItems().get("Xe133-MDC"))) { + if (Objects.nonNull(phd.getQcItems().get("Xe133-MDC"))) { //不为空 判断 QcItems的Xe133-MDC的BPass状态 如果是true 则颜色赋值为BLUE 如果是false则颜色赋值为RED - qcState.set(6, phd.getQcItems().get("Xe133-MDC").isBPass()?"BLUE":"RED"); + qcState.set(6, phd.getQcItems().get("Xe133-MDC").isBPass() ? "BLUE" : "RED"); } } return qcState; @@ -514,17 +515,17 @@ public class GammaFileUtil extends AbstractLogOrReport { //计算得到采集耗时 double collect_hour = 0.0; if (Objects.nonNull(end) && Objects.nonNull(start)) { - collect_hour = ((end.getTime() - start.getTime())/1000) / 3600.0; + collect_hour = ((end.getTime() - start.getTime()) / 1000) / 3600.0; } //获取 实际分析时长 double acq_hour = phd.getAcq().getAcquisition_real_time() / 3600.0; //计算得到衰减耗时 double Decay_hour = 0.0; if (Objects.nonNull(acq) && Objects.nonNull(end)) { - Decay_hour = ((acq.getTime() - end.getTime())/1000) / 3600.0; + Decay_hour = ((acq.getTime() - end.getTime()) / 1000) / 3600.0; } //声明一个double数据 - List Be7Value = new LinkedList<>(); + List Be7Value = new LinkedList<>(); //声明一个map用于存储计算数据 Map vMdcInfoMap = new HashMap<>(); //声明一个数组存储计算数据 @@ -532,9 +533,16 @@ public class GammaFileUtil extends AbstractLogOrReport { //声明一个数组存储QcItems数据 Map qcItems = new TreeMap<>(); //调用方法 读取文件信息 判断QC数据 - if(!ReadQCLimit(qcItems, vMdcInfoMap, Be7Value, phd.getHeader().getSystem_type().toUpperCase())) { + //if (!ReadQCLimit(qcItems, vMdcInfoMap, Be7Value, phd.getHeader().getSystem_type().toUpperCase())) { + // String WARNING = "Read QC Flags from SystemManager.xml Failed!"; + //} + String stationCode = phd.getHeader().getSite_code(); + GardsStations stationInfo = getStationInfo(stationCode); + String stationType = stationInfo.getEfficCalculType(); + if (!ReadQCLimitByStationType(qcItems, vMdcInfoMap, Be7Value, stationType, stationCode)) { String WARNING = "Read QC Flags from SystemManager.xml Failed!"; } + //判断map是否为空 if (CollectionUtils.isNotEmpty(vMdcInfoMap)) { //根据键值按顺序向数组中插入数据 @@ -543,6 +551,7 @@ public class GammaFileUtil extends AbstractLogOrReport { vMdcInfo.add(vMdcInfoMap.get("2")); } //获取QcItem中col_time数据 + log.info("获取QcItem中col_time数据:" + qcItems.get("col_time")); QcCheckItem colTime = qcItems.get("col_time"); //将采集耗时 赋值给 colTime colTime.setValue(collect_hour); @@ -572,9 +581,9 @@ public class GammaFileUtil extends AbstractLogOrReport { //将数据存入QcItems的map中 qcItems.put("airFlow", airFlow); //判断phdFile的valid参数是否为true phdFile的vBase集合大小是否等于phdFile的Spec的num_g_channel数据 - if(phd.isValid() && phd.getVBase().size() == phd.getSpec().getNum_g_channel()) { + if (phd.isValid() && phd.getVBase().size() == phd.getSpec().getNum_g_channel()) { //判断system_type是否匹配P - if(phd.getHeader().getSystem_type().equalsIgnoreCase("P")) { + if (phd.getHeader().getSystem_type().equalsIgnoreCase("P")) { //调用算法计算 CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(Be7Value, phd.getUsedResoPara().getP()); //获取计算结果的counts赋值给 fwhm集合 @@ -601,9 +610,9 @@ public class GammaFileUtil extends AbstractLogOrReport { } } //遍历QcItems - for(Map.Entry iter:qcItems.entrySet()){ + for (Map.Entry iter : qcItems.entrySet()) { //判断 QcItems的Standard是否为空 - if(iter.getValue().getStandard().isEmpty()){ + if (iter.getValue().getStandard().isEmpty()) { continue; } //根据英文,分割standard数据 @@ -611,31 +620,31 @@ public class GammaFileUtil extends AbstractLogOrReport { //声明一个boolean类型 记录是否符合要求 boolean bSatisfy = true; //遍历标准数据 - for(String str : lists) { + for (String str : lists) { //判断标准数据是否含有 / 如果含有跳过本次循环 - if(str.contains(StringPool.DASH)){ + if (str.contains(StringPool.DASH)) { continue; - } else if(str.contains(StringPool.LEFT_BRACKET)) {//判断标准数据是否包含( + } else if (str.contains(StringPool.LEFT_BRACKET)) {//判断标准数据是否包含( //判断当前QcItem的值 是否 小于等于 去掉(后的标准值 - if(iter.getValue().getValue() <= Double.valueOf(str.replace(StringPool.LEFT_BRACKET,""))) { + if (iter.getValue().getValue() <= Double.valueOf(str.replace(StringPool.LEFT_BRACKET, ""))) { bSatisfy = false; break; } - } else if(str.contains(StringPool.RIGHT_BRACKET)) {//判断标准数据是否包含) + } else if (str.contains(StringPool.RIGHT_BRACKET)) {//判断标准数据是否包含) //判断当前QcItem的值 是否 大于等于 去掉)后的标准值 - if(iter.getValue().getValue() >= Double.valueOf(str.replace(StringPool.RIGHT_BRACKET,""))) { + if (iter.getValue().getValue() >= Double.valueOf(str.replace(StringPool.RIGHT_BRACKET, ""))) { bSatisfy = false; break; } - } else if(str.contains(StringPool.LEFT_SQ_BRACKET)) {//判断标准数据是否包含[ + } else if (str.contains(StringPool.LEFT_SQ_BRACKET)) {//判断标准数据是否包含[ //判断当前QcItem的值 是否 小于 去掉[后的标准值 - if(iter.getValue().getValue() < Double.valueOf(str.replace(StringPool.LEFT_SQ_BRACKET,""))) { + if (iter.getValue().getValue() < Double.valueOf(str.replace(StringPool.LEFT_SQ_BRACKET, ""))) { bSatisfy = false; break; } - } else if(str.contains(StringPool.RIGHT_SQ_BRACKET)) {//判断标准数据是否包含] + } else if (str.contains(StringPool.RIGHT_SQ_BRACKET)) {//判断标准数据是否包含] //判断当前QcItem的值 是否 大于 去掉]后的标准值 - if(iter.getValue().getValue() > Double.valueOf(str.replace(StringPool.RIGHT_SQ_BRACKET,""))) { + if (iter.getValue().getValue() > Double.valueOf(str.replace(StringPool.RIGHT_SQ_BRACKET, ""))) { bSatisfy = false; break; } @@ -652,7 +661,7 @@ public class GammaFileUtil extends AbstractLogOrReport { public Double CalculateMDC(PHDFile phd, List vMdcInfo, Double CCF) { try { //判断用于计算的数据大小是否小于3 判断集合中最后一个数值是否等于0 - if(vMdcInfo.size() < 3 || vMdcInfo.get(2) == 0) { + if (vMdcInfo.size() < 3 || vMdcInfo.get(2) == 0) { return 0.0; } @@ -674,12 +683,12 @@ public class GammaFileUtil extends AbstractLogOrReport { //计算采样时间 double Ts = 0.0; if (Objects.nonNull(collectStop) && Objects.nonNull(collectStart)) { - Ts = ((collectStop.getTime() - collectStart.getTime())/1000); + Ts = ((collectStop.getTime() - collectStart.getTime()) / 1000); } //计算衰变时间 double Td = 0.0; if (Objects.nonNull(acqStart) && Objects.nonNull(collectStop)) { - Td = ((acqStart.getTime() - collectStop.getTime())/1000); + Td = ((acqStart.getTime() - collectStop.getTime()) / 1000); } //获取能谱获取实时间 double Ta = phd.getAcq().getAcquisition_real_time(); @@ -692,25 +701,25 @@ public class GammaFileUtil extends AbstractLogOrReport { double DCF3 = 0; //计算得到lamda计算值 double lambda = Math.log(2.0) / (vMdcInfo.get(2) * 86400); - if ( Ts == 0 ) { + if (Ts == 0) { DCF1 = 1; } else { - DCF1 = lambda * Ts / (1-Math.exp(-lambda * Ts)); + DCF1 = lambda * Ts / (1 - Math.exp(-lambda * Ts)); } - if ( Td == 0 ) { + if (Td == 0) { DCF2 = 1; } else { - DCF2 = Math.exp(lambda*Td); + DCF2 = Math.exp(lambda * Td); } - if ( Ta == 0 ) { + if (Ta == 0) { DCF3 = 1; } else { - DCF3 = lambda * Ta / (1-Math.exp(-lambda*Ta)); + DCF3 = lambda * Ta / (1 - Math.exp(-lambda * Ta)); } //计算得到DCF_conc double DCF_conc = Double.POSITIVE_INFINITY; if (Objects.nonNull(collectStart) && Objects.nonNull(phd.getUsedSetting().getRefTime_conc())) { - DCF_conc = Math.exp(lambda * ((collectStart.getTime() - phd.getUsedSetting().getRefTime_conc().getTime())/1000)); + DCF_conc = Math.exp(lambda * ((collectStart.getTime() - phd.getUsedSetting().getRefTime_conc().getTime()) / 1000)); } //声明一个集合 List energy = new LinkedList<>(); @@ -739,18 +748,18 @@ public class GammaFileUtil extends AbstractLogOrReport { List counts = calFcnEval.counts; double effi = counts.get(0); int index = 0; - for(int i=1; i= vMdcInfo.get(0)) { + for (int i = 1; i < phd.getVEnergy().size(); i++) { + if (phd.getVEnergy().get(i) >= vMdcInfo.get(0)) { index = i; - if( (phd.getVEnergy().get(i) - vMdcInfo.get(0)) > (vMdcInfo.get(0) - phd.getVEnergy().get(i-1)) ){ - index = i-1; + if ((phd.getVEnergy().get(i) - vMdcInfo.get(0)) > (vMdcInfo.get(0) - phd.getVEnergy().get(i - 1))) { + index = i - 1; } break; } } double lcc = phd.getVLc().get(index); double baseline = phd.getVBase().get(index); - double mdc = (2 * fwhmc * (lcc - baseline) / 0.8591 ) * CCF*DCF1*DCF2*DCF3*DCF_conc / ( vMdcInfo.get(1) * effi * Tl ) *1e6 / Svol; + double mdc = (2 * fwhmc * (lcc - baseline) / 0.8591) * CCF * DCF1 * DCF2 * DCF3 * DCF_conc / (vMdcInfo.get(1) * effi * Tl) * 1e6 / Svol; return mdc; } catch (ParseException e) { throw new RuntimeException(e); @@ -759,81 +768,81 @@ public class GammaFileUtil extends AbstractLogOrReport { public boolean ReadQCLimit(Map qcItems, Map vMdcInfoMap, List Be7Value, String systemType) { try { - String filePath = parameterProperties.getFilePath()+ File.separator +"SystemManager.xml"; + String filePath = parameterProperties.getFilePath() + File.separator + "SystemManager.xml"; //创建一个文档解析器工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //创建文档解析器 DocumentBuilder documentBuilder = factory.newDocumentBuilder(); //读取xml文件生成一个文档 Document document = documentBuilder.parse(filePath); - if (Objects.isNull(document)){ + if (Objects.isNull(document)) { return false; } //获取文档的根元素 Element element = document.getDocumentElement(); //获取根元素的子节点 NodeList docChildNodes = element.getChildNodes(); - if (Objects.nonNull(docChildNodes) && docChildNodes.getLength()>0){ + if (Objects.nonNull(docChildNodes) && docChildNodes.getLength() > 0) { //遍历子节点信息 - for(int i = 0; i < docChildNodes.getLength(); i++) { + for (int i = 0; i < docChildNodes.getLength(); i++) { //根据下标获取对应的节点信息 Node n = docChildNodes.item(i); //判断节点名称是否是 QCFlags-P 并且当前解析文件的系统类型是否是 P - if(n.getNodeName().equals("QCFlags-P") && systemType.equalsIgnoreCase("P")) { + if (n.getNodeName().equals("QCFlags-P") && systemType.equalsIgnoreCase("P")) { // 获取节点的第一个子节点 Node childNode = n.getFirstChild(); //如果节点信息不为空 - while(Objects.nonNull(childNode)) { + while (Objects.nonNull(childNode)) { String nodeName = childNode.getNodeName(); //判断节点名称是否是 item - if(nodeName.equals("col_time") || nodeName.equals("acq_time") || nodeName.equals("decay_time") || nodeName.equals("samp_vol") + if (nodeName.equals("col_time") || nodeName.equals("acq_time") || nodeName.equals("decay_time") || nodeName.equals("samp_vol") || nodeName.equals("airFlow") || nodeName.equals("Be7-FWHM") || nodeName.equals("Ba140-MDC")) { QcCheckItem qcCheckItem = new QcCheckItem(); // 获取节点的属性信息 NamedNodeMap attributes = childNode.getAttributes(); // 如果属性信息不为空 - if (Objects.nonNull(attributes)){ + if (Objects.nonNull(attributes)) { // 遍历获取属性值 - for (int j=0; j< attributes.getLength(); j++){ + for (int j = 0; j < attributes.getLength(); j++) { // 获取属性 Node item = attributes.item(j); //判断属性名称是否是 number - if(item.getNodeName().equals("green")) { + if (item.getNodeName().equals("green")) { qcCheckItem.setStandard(item.getNodeValue()); qcItems.put(nodeName, qcCheckItem); } } } - }else if(nodeName.equals("Be7")) { + } else if (nodeName.equals("Be7")) { // 获取节点的属性信息 NamedNodeMap attributes = childNode.getAttributes(); // 如果属性信息不为空 - if (Objects.nonNull(attributes)){ + if (Objects.nonNull(attributes)) { // 遍历获取属性值 - for (int j=0; j< attributes.getLength(); j++){ + for (int j = 0; j < attributes.getLength(); j++) { // 获取属性 Node item = attributes.item(j); //判断属性名称是否是 number - if(item.getNodeName().equals(CalType.ENERGY_CAL.getType())) { + if (item.getNodeName().equals(CalType.ENERGY_CAL.getType())) { Be7Value.add(Double.valueOf(item.getNodeValue())); } } } - } else if(nodeName.equals("Ba140")) { + } else if (nodeName.equals("Ba140")) { // 获取节点的属性信息 NamedNodeMap attributes = childNode.getAttributes(); // 如果属性信息不为空 - if (Objects.nonNull(attributes)){ + if (Objects.nonNull(attributes)) { // 遍历获取属性值 - for (int j=0; j< attributes.getLength(); j++){ + for (int j = 0; j < attributes.getLength(); j++) { // 获取属性 Node item = attributes.item(j); //判断属性名称是否是 number - if(item.getNodeName().equals(CalType.ENERGY_CAL.getType())) { + if (item.getNodeName().equals(CalType.ENERGY_CAL.getType())) { vMdcInfoMap.put("0", Double.valueOf(item.getNodeValue())); - }else if (item.getNodeName().equals("yield")){ + } else if (item.getNodeName().equals("yield")) { vMdcInfoMap.put("1", Double.valueOf(item.getNodeValue())); - }else if (item.getNodeName().equals("halflife")){ + } else if (item.getNodeName().equals("halflife")) { vMdcInfoMap.put("2", Double.valueOf(item.getNodeValue())); } } @@ -842,46 +851,46 @@ public class GammaFileUtil extends AbstractLogOrReport { // 获取下一个节点 childNode = childNode.getNextSibling(); } - }else if(n.getNodeName().equals("QCFlags-G") && systemType.equalsIgnoreCase("G")) { + } else if (n.getNodeName().equals("QCFlags-G") && systemType.equalsIgnoreCase("G")) { // 获取节点的第一个子节点 Node childNode = n.getFirstChild(); //如果节点信息不为空 - while(Objects.nonNull(childNode)) { + while (Objects.nonNull(childNode)) { String nodeName = childNode.getNodeName(); //判断节点名称是否是 item - if(nodeName.equals("col_time") || nodeName.equals("acq_time") || nodeName.equals("decay_time") || nodeName.equals("samp_vol") + if (nodeName.equals("col_time") || nodeName.equals("acq_time") || nodeName.equals("decay_time") || nodeName.equals("samp_vol") || nodeName.equals("airFlow") || nodeName.equals("Xe133-MDC")) { QcCheckItem qcCheckItem = new QcCheckItem(); // 获取节点的属性信息 NamedNodeMap attributes = childNode.getAttributes(); // 如果属性信息不为空 - if (Objects.nonNull(attributes)){ + if (Objects.nonNull(attributes)) { // 遍历获取属性值 - for (int j=0; j< attributes.getLength(); j++){ + for (int j = 0; j < attributes.getLength(); j++) { // 获取属性 Node item = attributes.item(j); //判断属性名称是否是 number - if(item.getNodeName().equals("green")) { + if (item.getNodeName().equals("green")) { qcCheckItem.setStandard(item.getNodeValue()); qcItems.put(nodeName, qcCheckItem); } } } - }else if(nodeName.equals("Xe133")) { + } else if (nodeName.equals("Xe133")) { // 获取节点的属性信息 NamedNodeMap attributes = childNode.getAttributes(); // 如果属性信息不为空 - if (Objects.nonNull(attributes)){ + if (Objects.nonNull(attributes)) { // 遍历获取属性值 - for (int j=0; j< attributes.getLength(); j++){ + for (int j = 0; j < attributes.getLength(); j++) { // 获取属性 Node item = attributes.item(j); //判断属性名称是否是 number - if(item.getNodeName().equals(CalType.ENERGY_CAL.getType())) { + if (item.getNodeName().equals(CalType.ENERGY_CAL.getType())) { vMdcInfoMap.put("0", Double.valueOf(item.getNodeValue())); - }else if (item.getNodeName().equals("yield")){ + } else if (item.getNodeName().equals("yield")) { vMdcInfoMap.put("1", Double.valueOf(item.getNodeValue())); - }else if (item.getNodeName().equals("halflife")){ + } else if (item.getNodeName().equals("halflife")) { vMdcInfoMap.put("2", Double.valueOf(item.getNodeValue())); } } @@ -903,6 +912,145 @@ public class GammaFileUtil extends AbstractLogOrReport { return true; } + //region 添加根据台站类型获取QC参数 + public boolean ReadQCLimitByStationType(Map qcItems, Map vMdcInfoMap, + List Be7Value, String systemType, String stationCode) { + try { + + String filePath = parameterProperties.getFilePath() + File.separator + "parameter.xml"; + log.info("filePath:" + filePath); + //创建一个文档解析器工厂 + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + //创建文档解析器 + DocumentBuilder documentBuilder = factory.newDocumentBuilder(); + //读取xml文件生成一个文档 + Document document = documentBuilder.parse(filePath); + log.info("stationCode:" + stationCode); + log.info("document:" + document); + log.info("systemType:" + systemType); + if (StringUtils.isBlank(stationCode) || Objects.isNull(document)) { + return false; + } + //获取文档的根元素 + Element element = document.getDocumentElement(); + log.info("获取文档的根元素:" + element); + + // if (stationCode.charAt(2) == 'X' && systemType.equals("SAUNA")) { + // //切割台站编码 如果 第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 SAUNA + // NodeList nodes = element.getElementsByTagName("QCFlags-SAUNA"); + // for (int i = 0; i < nodes.getLength(); i++) { + // parseQCFlags(nodes.item(i), qcItems, vMdcInfoMap, Be7Value); + // log.info("第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 SAUNA:"+nodes); + // } + // } else if (stationCode.charAt(2) == 'X' && systemType.equals("SAUNA2")) { + // //切割台站编码 如果 第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 SAUNA2 + // NodeList nodes = element.getElementsByTagName("QCFlags-SAUNA2"); + // for (int i = 0; i < nodes.getLength(); i++) { + // parseQCFlags(nodes.item(i), qcItems, vMdcInfoMap, Be7Value); + // } + // } else + // + if (stationCode.charAt(2) == 'X' && systemType.equals("SPALAX")) { + //切割台站编码 如果 第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 SPALAX + NodeList nodes = element.getElementsByTagName("QCFlags-SPALAX"); + log.info("第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 QCFlags-SPALAX:" + nodes); + for (int i = 0; i < nodes.getLength(); i++) { + parseQCFlags(nodes.item(i), qcItems, vMdcInfoMap, Be7Value); + } + } else if (stationCode.charAt(2) == 'X' && systemType.equals("SPALAX_PLC")) { + //切割台站编码 如果 第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 SPALAX-PLC + NodeList nodes = element.getElementsByTagName("QCFlags-SPALAX-PLC"); + log.info("第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 QCFlags-SPALAX-PLC:" + nodes); + for (int i = 0; i < nodes.getLength(); i++) { + parseQCFlags(nodes.item(i), qcItems, vMdcInfoMap, Be7Value); + } + } else if (stationCode.charAt(2) == 'P') { + //切割台站编码 如果 第三个字符是 P + NodeList nodes = element.getElementsByTagName("QCFlags-P"); + log.info("第三个字符是 X 并且 EFFIC_CALCUL_TYPE类型是 QCFlags-P:" + nodes); + for (int i = 0; i < nodes.getLength(); i++) { + parseQCFlags(nodes.item(i), qcItems, vMdcInfoMap, Be7Value); + } + } + log.info("col_time:" + qcItems.get("col_time")); + } catch (ParserConfigurationException | IOException | SAXException e) { + throw new RuntimeException(e); + } + return true; + } + + private static void parseQCFlags(Node node, Map qcItems, Map vMdcInfoMap, List Be7Value) { + Node childNode = node.getFirstChild(); + QcCheckItem qcCheckItem = new QcCheckItem(); + while (Objects.nonNull(childNode)) { + String nodeName = childNode.getNodeName(); + switch (nodeName) { + case "col_time": + case "acq_time": + case "decay_time": + case "samp_vol": + case "Xe133-MDC": + case "airFlow": + case "Be7-FWHM": + case "Ba140-MDC": + qcCheckItem = new QcCheckItem(); + setAttributeSetter(childNode, "green", qcCheckItem::setStandard); + qcItems.put(nodeName, qcCheckItem); + log.info(nodeName + ":" + qcCheckItem.getStandard()); + break; + case "Be7": + setAttributeSetter(childNode, CalType.ENERGY_CAL.getType(), value -> Be7Value.add(Double.valueOf(value))); + log.info(nodeName + ":" + Be7Value); + break; + case "Ba140": + setAttributeSetter(childNode, CalType.ENERGY_CAL.getType(), value -> vMdcInfoMap.put("0", Double.valueOf(value))); + setAttributeSetter(childNode, "yield", value -> vMdcInfoMap.put("1", Double.valueOf(value))); + setAttributeSetter(childNode, "halflife", value -> vMdcInfoMap.put("2", Double.valueOf(value))); + log.info(nodeName + ":" + vMdcInfoMap.get("0") + vMdcInfoMap.get("1") + vMdcInfoMap.get("2")); + break; + case "Xe133": + setAttributeSetter(childNode, CalType.ENERGY_CAL.getType(), value -> vMdcInfoMap.put("0", Double.valueOf(value))); + setAttributeSetter(childNode, "yield", value -> vMdcInfoMap.put("1", Double.valueOf(value))); + setAttributeSetter(childNode, "halflife", value -> vMdcInfoMap.put("2", Double.valueOf(value))); + log.info(nodeName + ":" + vMdcInfoMap.get("0") + vMdcInfoMap.get("1") + vMdcInfoMap.get("2")); + break; + } + childNode = childNode.getNextSibling(); + } + } + + //根据map的value获取map的key + private GardsStations getStationInfo(String value) { + Map stationMap = (Map) redisUtil.get("stationMap"); + Map stations = (Map) redisUtil.get("stationInfoMap"); + GardsStations station = new GardsStations(); + if (Objects.nonNull(stationMap)) { + for (Map.Entry entry : stationMap.entrySet()) { + if (value.equals(entry.getValue())) { + station = stations.get(entry.getKey()); + } + } + } + return station; + } + + private static void setAttributeSetter(Node node, String attributeName, AttributeSetter setter) { + NamedNodeMap attributes = node.getAttributes(); + if (Objects.nonNull(attributes)) { + for (int i = 0; i < attributes.getLength(); i++) { + Node item = attributes.item(i); + if (attributeName.equals(item.getNodeName())) { + setter.setValue(item.getNodeValue()); + } + } + } + } + + @FunctionalInterface + private interface AttributeSetter { + void setValue(String value); + } + public List DetailedInfo(String sampleId, PHDFile phd) { try { // Sample_Id, Station_Code, Detector_Code, System_Type, Data_Type, Spectral_Qualifier, @@ -910,11 +1058,11 @@ public class GammaFileUtil extends AbstractLogOrReport { // Acq_Start, Acq_Real, Acq_Live, Decay_Time, Auto_Cat, Category List detailInfo = new LinkedList<>(); //Detail Info的所有数据初始化为“” - for (int i=0; i<18; i++){ + for (int i = 0; i < 18; i++) { detailInfo.add(""); } //读取phdFile的数据 修改detailInfo的数据 - detailInfo.set(0, StringUtils.isNotBlank(sampleId)?sampleId:""); // Sample_Id + detailInfo.set(0, StringUtils.isNotBlank(sampleId) ? sampleId : ""); // Sample_Id detailInfo.set(1, phd.getHeader().getSite_code()); // Station_Code detailInfo.set(2, phd.getHeader().getDetector_code()); // Detector_Code detailInfo.set(3, phd.getHeader().getSystem_type().toUpperCase()); // System_Type @@ -926,7 +1074,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Date collect_stop_dt = null; if (StringUtils.isNotBlank(phd.getCollect().getCollection_stop_date()) && StringUtils.isNotBlank(phd.getCollect().getCollection_stop_time())) { collect_stop = phd.getCollect().getCollection_stop_date() + StringPool.SPACE + phd.getCollect().getCollection_stop_time(); - collect_stop_dt = DateUtils.parseDate(collect_stop,"yyyy/MM/dd HH:mm:ss"); + collect_stop_dt = DateUtils.parseDate(collect_stop, "yyyy/MM/dd HH:mm:ss"); } String collect_start = ""; Date collect_start_dt = null; @@ -937,12 +1085,12 @@ public class GammaFileUtil extends AbstractLogOrReport { detailInfo.set(8, collect_start); double timeSpan = 0.0; if (Objects.nonNull(collect_start_dt) && Objects.nonNull(collect_stop_dt)) { - timeSpan = (collect_stop_dt.getTime()/1000 - collect_start_dt.getTime()/1000) / 3600.0; + timeSpan = (collect_stop_dt.getTime() / 1000 - collect_start_dt.getTime() / 1000) / 3600.0; } detailInfo.set(9, String.format("%.2f", timeSpan));// Sampling_Time detailInfo.set(10, String.format("%.2f", phd.getCollect().getAir_volume())); - if(timeSpan != 0){ - detailInfo.set(11, String.format("%.2f", phd.getCollect().getAir_volume()/timeSpan)); + if (timeSpan != 0) { + detailInfo.set(11, String.format("%.2f", phd.getCollect().getAir_volume() / timeSpan)); } String acq_start = ""; Date start_date = null; @@ -955,7 +1103,7 @@ public class GammaFileUtil extends AbstractLogOrReport { detailInfo.set(14, String.format("%.2f", phd.getAcq().getAcquisition_live_time())); double timespan = 0.0; if (Objects.nonNull(start_date) && Objects.nonNull(collect_start_dt)) { - timespan = (start_date.getTime()/1000 - collect_stop_dt.getTime()/1000); + timespan = (start_date.getTime() / 1000 - collect_stop_dt.getTime() / 1000); } detailInfo.set(15, String.format("%.2f", timespan / 3600.0)); detailInfo.set(17, phd.getCategory()); @@ -986,13 +1134,13 @@ public class GammaFileUtil extends AbstractLogOrReport { long m_nSChan = phd.getSpec().getBegin_channel(); // 确保绘制曲线时所有谱都是从1道开始 int i = 0; - if(m_nSChan == 0){ + if (m_nSChan == 0) { i = 1; } - for(; i 1 && phd.getVEnergy().size() == m_nCount) { - if(start < 1) { + if (m_nCount > 1 && phd.getVEnergy().size() == m_nCount) { + if (start < 1) { start = 1; } - if(end < 1 || end > m_nCount){ + if (end < 1 || end > m_nCount) { end = m_nCount; } - for(int j=start-1; j 1) { - if(start < 1){ + if (m_nCount > 1) { + if (start < 1) { start = 1; } - if(end < 1 || end > m_nCount){ + if (end < 1 || end > m_nCount) { end = m_nCount; } - for(int j=start-1; j datalist = new LinkedList<>(); int start = 0; long end = -1; - if(m_nCount > 1 && phd.getVEnergy().size() == m_nCount && phd.getVLc().size() == m_nCount + if (m_nCount > 1 && phd.getVEnergy().size() == m_nCount && phd.getVLc().size() == m_nCount && phd.getVScac().size() == m_nCount && phd.getVBase().size() == m_nCount) { - if(start < 1) { + if (start < 1) { start = 1; } - if(end < 1 || end > m_nCount) { + if (end < 1 || end > m_nCount) { end = m_nCount; } @@ -1079,9 +1227,9 @@ public class GammaFileUtil extends AbstractLogOrReport { ChartData data6 = new ChartData(); ChartData data7 = new ChartData(); ChartData data8 = new ChartData(); - for(int i=start-1; i PeakSet(List vPeak, List vBase, String color, long m_nCount, List p, boolean bEnergy) { List datalist = new LinkedList<>(); int peakNum = vPeak.size(); - if(peakNum < 1 || vBase.size() != m_nCount){ + if (peakNum < 1 || vBase.size() != m_nCount) { return datalist; } int start = 0; long end = -1; - if(start < 1){ + if (start < 1) { start = 1; } - if(end > m_nCount || end < 1){ + if (end > m_nCount || end < 1) { end = m_nCount; } // 找出在所给范围的第一道拟合峰和最后一道拟合峰的索引下标 - int index = 0, startPeak = -1, endPeak = peakNum-1; - while(index < peakNum && start > vPeak.get(index).right){ + int index = 0, startPeak = -1, endPeak = peakNum - 1; + while (index < peakNum && start > vPeak.get(index).right) { index++; } - if(index < peakNum) { + if (index < peakNum) { startPeak = index; - while(index < peakNum && vPeak.get(index).left < end){ + while (index < peakNum && vPeak.get(index).left < end) { index++; } - endPeak = index-1; + endPeak = index - 1; } - if(startPeak < 0 || startPeak > endPeak){ + if (startPeak < 0 || startPeak > endPeak) { 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(); cData.setColor(color); @@ -1220,19 +1368,19 @@ public class GammaFileUtil extends AbstractLogOrReport { List regChan = new LinkedList<>(); double d = peak.left; - while(d <= peak.right) { + while (d <= peak.right) { regChan.add(d); d += 0.25; } - List t_base = vBase.subList(peak.left-1, peak.right); + List t_base = vBase.subList(peak.left - 1, peak.right); List regPeak = CalValuesHandler.interp1(peak, t_base, regChan); - if(bEnergy) { + if (bEnergy) { cData.setGroup("energy"); CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(regChan, p); List regEnergy = calValuesOut.counts; - for(int ii=0; ii end){ + for (int ii = 0; ii < regChan.size(); ii++) { + if (regChan.get(ii) < start || regChan.get(ii) > end) { continue; } SeriseData seriseData = new SeriseData(); @@ -1242,13 +1390,13 @@ public class GammaFileUtil extends AbstractLogOrReport { } } else { cData.setGroup("channel"); - for(int ii=0; ii end){ + for (int ii = 0; ii < regChan.size(); ii++) { + if (regChan.get(ii) < start || regChan.get(ii) > end) { continue; } SeriseData seriseData = new SeriseData(); seriseData.setX(regChan.get(ii)); - seriseData.setY(regPeak.get(ii).isNaN()?0:regPeak.get(ii)); + seriseData.setY(regPeak.get(ii).isNaN() ? 0 : regPeak.get(ii)); cData.getPointlist().add(seriseData); } } @@ -1261,10 +1409,10 @@ public class GammaFileUtil extends AbstractLogOrReport { List shapes = new LinkedList<>(); 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 Channel_BaseCP(PHDFile phd) { List shapes = new LinkedList<>(); int num = phd.getBaseCtrls().getXCtrl().size(); - if(num == phd.getBaseCtrls().getYCtrl().size()) { - for(int i=0; i 0) { + if (change == 0 && phd.getVPeak().size() > 0) { return change; - } else if(change == -1) { + } else if (change == -1) { phd.setUsedEffi(phd.getNewEffi()); phd.setUsedEffiKD(phd.getMapEffiKD().get(phd.getNewEffi())); phd.setUsedEffiPara(phd.getMapEffiPara().get(phd.getNewEffi())); @@ -1319,12 +1467,12 @@ public class GammaFileUtil extends AbstractLogOrReport { return change; } - public boolean AnalyseSpectrum(PHDFile phd, Map mapLines){ + public boolean AnalyseSpectrum(PHDFile phd, Map mapLines) { ObjectMapper mapper = new ObjectMapper(); try { String phdStr = mapper.writeValueAsString(phd); String nuclideLinesMap = mapper.writeValueAsString(mapLines); - if (ObjectUtil.isNull(analysisProcess)){ + if (ObjectUtil.isNull(analysisProcess)) { analysisProcess = ApplicationContextUtil.getContext().getBean(AnalysisProcess.class); } String strValue = CalValuesHandler.analyseSpectrum(phdStr, nuclideLinesMap, phd.getTmpFilePath(), analysisProcess); @@ -1334,7 +1482,7 @@ public class GammaFileUtil extends AbstractLogOrReport { String analyMessage = JSON.parseObject(JSON.toJSONString(parseMap.get("analyMessage")), String.class); phd.setAnalyMessage(analyMessage); if (analyFlag) { - for (Map.Entry entry:parseMap.entrySet()) { + for (Map.Entry entry : parseMap.entrySet()) { if (entry.getKey().equalsIgnoreCase("bAnalyed")) { boolean value = JSON.parseObject(JSON.toJSONString(entry.getValue()), Boolean.class); phd.setBAnalyed(value); @@ -1342,7 +1490,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapEnerPara")) { HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); value.put(key, entryValue); @@ -1352,7 +1500,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapResoPara")) { HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); value.put(key, entryValue); @@ -1362,7 +1510,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapEffiPara")) { HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); value.put(key, entryValue); @@ -1372,7 +1520,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapTotEPara")) { HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); value.put(key, entryValue); @@ -1410,7 +1558,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapEnerKD")) { HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); GEnergyBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GEnergyBlock.class); value.put(key, entryValue); @@ -1420,7 +1568,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapResoKD")) { HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); GResolutionBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GResolutionBlock.class); value.put(key, entryValue); @@ -1502,7 +1650,7 @@ public class GammaFileUtil extends AbstractLogOrReport { if (entry.getKey().equalsIgnoreCase("mapNucActMda")) { TreeMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), TreeMap.class); Map value = new TreeMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { + for (Map.Entry objectEntry : jsonMap.entrySet()) { String key = objectEntry.getKey(); NuclideActMda entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), NuclideActMda.class); value.put(key, entryValue); @@ -1512,7 +1660,7 @@ public class GammaFileUtil extends AbstractLogOrReport { } BeanUtils.copyProperties(phd.getSetting(), phd.getUsedSetting()); - for (PeakInfo peak:phd.getVPeak()) { + for (PeakInfo peak : phd.getVPeak()) { if (StringUtils.isBlank(peak.recoilBetaChan)) { peak.recoilBetaChan = "nan"; } @@ -1524,7 +1672,7 @@ public class GammaFileUtil extends AbstractLogOrReport { log.error("AnalyseSpectrum(): {}", analyMessage); return false; } - } catch (JsonProcessingException e){ + } catch (JsonProcessingException e) { e.printStackTrace(); log.error("AnalyseSpectrum(): {}", e); } catch (RuntimeException e) { @@ -1538,7 +1686,7 @@ public class GammaFileUtil extends AbstractLogOrReport { SpecSetup newSets = phd.getSetting(); SpecSetup oldSets = phd.getUsedSetting(); - if(newSets.getECutAnalysis_Low() != oldSets.getECutAnalysis_Low() + if (newSets.getECutAnalysis_Low() != oldSets.getECutAnalysis_Low() || newSets.getECutAnalysis_High() != oldSets.getECutAnalysis_High() || newSets.getEnergyTolerance() != oldSets.getEnergyTolerance() || newSets.getPss_low() != oldSets.getPss_low() @@ -1548,40 +1696,39 @@ public class GammaFileUtil extends AbstractLogOrReport { || newSets.getK_beta() != oldSets.getK_beta() || newSets.getRiskLevelK() != oldSets.getRiskLevelK() || newSets.getRefTime_act() != oldSets.getRefTime_act() - || newSets.getRefTime_conc() != oldSets.getRefTime_conc()) - { + || newSets.getRefTime_conc() != oldSets.getRefTime_conc()) { return 1; } List old_ener = phd.getUsedEnerPara().getP(); - List new_ener = Objects.nonNull(phd.getMapEnerPara().get(phd.getNewEner()))?(CollectionUtils.isNotEmpty(phd.getMapEnerPara().get(phd.getNewEner()).getP())?phd.getMapEnerPara().get(phd.getNewEner()).getP():new LinkedList<>()):new LinkedList<>(); - if(old_ener.size() != new_ener.size()) { + List new_ener = Objects.nonNull(phd.getMapEnerPara().get(phd.getNewEner())) ? (CollectionUtils.isNotEmpty(phd.getMapEnerPara().get(phd.getNewEner()).getP()) ? phd.getMapEnerPara().get(phd.getNewEner()).getP() : new LinkedList<>()) : new LinkedList<>(); + if (old_ener.size() != new_ener.size()) { return 1; } - for(int i=0; i 1E-6){ + for (int i = 0; i < old_ener.size(); i++) { + if (Math.abs(old_ener.get(i) - new_ener.get(i)) > 1E-6) { return 1; } } List old_reso = phd.getUsedResoPara().getP(); - List new_reso = Objects.nonNull(phd.getMapResoPara().get(phd.getNewReso()))?(CollectionUtils.isNotEmpty(phd.getMapResoPara().get(phd.getNewReso()).getP())?phd.getMapResoPara().get(phd.getNewReso()).getP():new LinkedList<>()):new LinkedList<>(); - if(old_reso.size() != new_reso.size()) { + List new_reso = Objects.nonNull(phd.getMapResoPara().get(phd.getNewReso())) ? (CollectionUtils.isNotEmpty(phd.getMapResoPara().get(phd.getNewReso()).getP()) ? phd.getMapResoPara().get(phd.getNewReso()).getP() : new LinkedList<>()) : new LinkedList<>(); + if (old_reso.size() != new_reso.size()) { return 1; } - for(int i=0; i 1E-6){ + for (int i = 0; i < old_reso.size(); i++) { + if (Math.abs(old_reso.get(i) - new_reso.get(i)) > 1E-6) { return 1; } } List old_effi = phd.getUsedEffiPara().getP(); - List new_effi = Objects.nonNull(phd.getMapEffiPara().get(phd.getNewEffi()))?(CollectionUtils.isNotEmpty(phd.getMapEffiPara().get(phd.getNewEffi()).getP())?phd.getMapEffiPara().get(phd.getNewEffi()).getP():new LinkedList<>()):new LinkedList<>(); - if(old_effi.size() != new_effi.size()) { + List new_effi = Objects.nonNull(phd.getMapEffiPara().get(phd.getNewEffi())) ? (CollectionUtils.isNotEmpty(phd.getMapEffiPara().get(phd.getNewEffi()).getP()) ? phd.getMapEffiPara().get(phd.getNewEffi()).getP() : new LinkedList<>()) : new LinkedList<>(); + if (old_effi.size() != new_effi.size()) { return -1; } - for(int i=0; i 1E-6){ + for (int i = 0; i < old_effi.size(); i++) { + if (Math.abs(old_effi.get(i) - new_effi.get(i)) > 1E-6) { return -1; } } @@ -1591,12 +1738,12 @@ public class GammaFileUtil extends AbstractLogOrReport { 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 iter: map.entrySet()){ - if(iter.getValue().halflife <= 0){ + for (Map.Entry iter : map.entrySet()) { + if (iter.getValue().halflife <= 0) { continue; } FilterNuclideLine(iter.getValue(), phd.getUsedSetting().getECutAnalysis_Low()); // 过滤核素能量小于ECutAnalysis_Low的射线 @@ -1625,23 +1772,23 @@ public class GammaFileUtil extends AbstractLogOrReport { List vYield = iter.getValue().vyield; List vEffi = CalValuesHandler.calFcnEval(vEnergy, phd.getUsedEffiPara().getP()).counts; // 该核素所有γ射线能量处的探测效率 List vFit = new LinkedList<>(); // γ射线能量与峰中心道能量匹配标识 - for (int i=0; i= 510 && phd.getVPeak().get(j).energy <= 512) { + for (int i = 0, j = 0; i < vEnergy.size(); i++) { + for (; j < peakNum; j++) { + if (phd.getVPeak().get(j).energy >= 510 && phd.getVPeak().get(j).energy <= 512) { continue; // 峰中心道能量为511的峰不进行核素识别 } - if(vEnergy.get(i) < phd.getVPeak().get(j).energy - energyWidth){ + if (vEnergy.get(i) < phd.getVPeak().get(j).energy - energyWidth) { break; - } else if(vEnergy.get(i) <= phd.getVPeak().get(j).energy + energyWidth) { + } else if (vEnergy.get(i) <= phd.getVPeak().get(j).energy + energyWidth) { sum_found += vEffi.get(i) * vYield.get(i); vFit.set(i, j); - if(iter.getValue().maxYeildIdx == i){ + if (iter.getValue().maxYeildIdx == i) { mainPeakIdx = j; } break; @@ -1651,34 +1798,33 @@ public class GammaFileUtil extends AbstractLogOrReport { } // 核素匹配到峰 - if(sum_total > 0) { + if (sum_total > 0) { // 如果该核素属特殊核素,则用“特殊核素配置文件”中指明的其他核素的半衰期 - double halflife = (Objects.isNull(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) { + if (rate > 0.5) { // 获取用于计算Activity、MDC的主γ峰和最大分支比 double maxFoundYield = vYield.get(iter.getValue().maxYeildIdx); - if(mainPeakIdx < 0) - { + if (mainPeakIdx < 0) { maxFoundYield = 0; - for(int ii=0; ii= 0 && vYield.get(ii) > maxFoundYield) { + for (int ii = 0; ii < vFit.size(); ii++) { + if (vFit.get(ii) >= 0 && vYield.get(ii) > maxFoundYield) { mainPeakIdx = vFit.get(ii); maxFoundYield = vYield.get(ii); } } - if(mainPeakIdx < 0) continue; + if (mainPeakIdx < 0) continue; } NuclideActMda ActMda = new NuclideActMda(); boolean bActBigger = CalculateMDCs(phd, ActMda, mainPeakIdx, lambda, maxFoundYield, 1.0); - if(rate > 0.8 || bActBigger) { + if (rate > 0.8 || bActBigger) { ActMda.setHalflife(halflife); ActMda.setKey_flag(-1); // 需要计算活度浓度的核素 - if(!vNuclides.contains(iter.getKey())) { + if (!vNuclides.contains(iter.getKey())) { ActMda.setBCalculateMDA(true); } else { ActMda.setActivity(0); @@ -1691,27 +1837,27 @@ public class GammaFileUtil extends AbstractLogOrReport { } int fitLineNum = 0, peakIdx = -1; - for(int ii=0; ii= 0) { + for (int ii = 0; ii < vFit.size(); ii++) { + if (vFit.get(ii) >= 0) { // 向峰信息表中添加识别到的核素 PeakInfo peakInfo = phd.getVPeak().get(vFit.get(ii)); Map> deletedNuclideMap = peakInfo.deletedNuclideMap; - if(vFit.get(ii) != peakIdx) { - if(deletedNuclideMap.get(peakInfo.energy) != null - && deletedNuclideMap.get(peakInfo.energy).contains(iter.getKey())){ + if (vFit.get(ii) != peakIdx) { + if (deletedNuclideMap.get(peakInfo.energy) != null + && deletedNuclideMap.get(peakInfo.energy).contains(iter.getKey())) { continue; } peakInfo.nuclides.add(iter.getKey()); peakIdx = vFit.get(ii); } // 添加匹配的γ射线的信息 - if(vFit.get(ii) == mainPeakIdx){ + if (vFit.get(ii) == mainPeakIdx) { ActMda.setCalculateIdx(fitLineNum); } - if(iter.getValue().maxYeildIdx == ii && iter.getValue().key_flag >= 0){ + if (iter.getValue().maxYeildIdx == ii && iter.getValue().key_flag >= 0) { ActMda.setKey_flag(fitLineNum); } - ActMda.getVPeakIdx().add(peakIdx+1); + ActMda.getVPeakIdx().add(peakIdx + 1); ActMda.getFullNames().add(iter.getValue().fullNames.get(ii)); ActMda.getVEnergy().add(vEnergy.get(ii)); ActMda.getVUncertE().add(iter.getValue().vuncertE.get(ii)); @@ -1729,27 +1875,27 @@ public class GammaFileUtil extends AbstractLogOrReport { private void ReadSpecialNuclides(Map mapHalflife, List vNuclides) { try { - String fileName = parameterProperties.getFilePath() + StringPool.SLASH +"nuclide_ActMdc.txt"; + String fileName = parameterProperties.getFilePath() + StringPool.SLASH + "nuclide_ActMdc.txt"; File t_file = new File(fileName); List readLines = FileUtils.readLines(t_file, "UTF-8"); - for (int i=0;i< readLines.size();i++){ + for (int i = 0; i < readLines.size(); i++) { String line = readLines.get(i); - if(line.contains("#MDA")) { - for (int j=i+1; j strList = Arrays.asList(line.split("\\s+")); - if(strList.size() == 3) { + if (strList.size() == 3) { mapHalflife.put(strList.get(0), Double.valueOf(strList.get(2)) * 86400); } } else { - i=j; + i = j; break; } } } - if(line.contains("#Identify")) { - for (int j=i+1; j strList = Arrays.asList(line.split("\\s+")); @@ -1767,35 +1913,35 @@ public class GammaFileUtil extends AbstractLogOrReport { //获取energy的数组数据 List vE = lines.venergy; //遍历数组 - for(int i=0, j=0; i 0) { + if (lines.key_flag < 0 && lines.venergy.size() > 0) { List vY = lines.vyield; lines.maxYeildIdx = 0; double maxYield = vY.get(0); - for(int ii=1; ii maxYield) { + for (int ii = 1; ii < vY.size(); ii++) { + if (vY.get(ii) > maxYield) { maxYield = vY.get(ii); lines.maxYeildIdx = ii; } } - } else{ + } else { lines.maxYeildIdx = lines.key_flag; } } @@ -1817,26 +1963,26 @@ public class GammaFileUtil extends AbstractLogOrReport { } double Ts = 0.0; if (Objects.nonNull(collectStop) && Objects.nonNull(collectStart)) { - Ts = collectStop.getTime()/1000 - collectStart.getTime()/1000; // 采样时间 + Ts = collectStop.getTime() / 1000 - collectStart.getTime() / 1000; // 采样时间 } double Td = 0.0; if (Objects.nonNull(acqStart) && Objects.nonNull(collectStop)) { - Td = acqStart.getTime()/1000 - collectStop.getTime()/1000; // 衰变时间 + Td = acqStart.getTime() / 1000 - collectStop.getTime() / 1000; // 衰变时间 } double Ta = phd.getAcq().getAcquisition_real_time(); // 能谱获取实时间 double Tl = phd.getAcq().getAcquisition_live_time(); // 能谱获取活时间 double Svol = phd.getCollect().getAir_volume(); // 样品采样体积 double DCF1, DCF2, DCF3; - if ( Ts == 0 ) DCF1 = 1; - else DCF1 = lambda * Ts / (1-Math.exp(-lambda*Ts)); - if ( Td == 0 ) DCF2 = 1; - else DCF2 = Math.exp(lambda*Td); - if ( Ta == 0 ) DCF3 = 1; - else DCF3 = lambda * Ta / (1-Math.exp(-lambda*Ta)); + if (Ts == 0) DCF1 = 1; + else DCF1 = lambda * Ts / (1 - Math.exp(-lambda * Ts)); + if (Td == 0) DCF2 = 1; + else DCF2 = Math.exp(lambda * Td); + if (Ta == 0) DCF3 = 1; + else DCF3 = lambda * Ta / (1 - Math.exp(-lambda * Ta)); - double DCF_act = Math.exp(lambda * (acqStart.getTime()/1000 - phd.getUsedSetting().getRefTime_act().getTime()/1000)); - double DCF_conc = Math.exp(lambda * (collectStart.getTime()/1000 - phd.getUsedSetting().getRefTime_conc().getTime()/1000)); + double DCF_act = Math.exp(lambda * (acqStart.getTime() / 1000 - phd.getUsedSetting().getRefTime_act().getTime() / 1000)); + double DCF_conc = Math.exp(lambda * (collectStart.getTime() / 1000 - phd.getUsedSetting().getRefTime_conc().getTime() / 1000)); PeakInfo peak = phd.getVPeak().get(mainPeakIdx); double netKeyPeakArea = peak.area; @@ -1845,21 +1991,21 @@ public class GammaFileUtil extends AbstractLogOrReport { double detectorEfficiency = peak.efficiency; double detectorEfficiencyError = 0.01 * peak.efficiency; double fwhmc = peak.fwhmc; - int index = (int)(peak.peakCentroid + 0.5) - 1; + int index = (int) (peak.peakCentroid + 0.5) - 1; double lcc = phd.getVLc().get(index); double baseline = phd.getVBase().get(index); double activity, mda; - if ( keyLineYield == 0 ) { + if (keyLineYield == 0) { activity = 0; mda = 0; } else { - activity = ( netKeyPeakArea * CCF * DCF3*DCF_act ) / ( keyLineYield * detectorEfficiency * Tl ) ;//Bq,参考时间为referenceTimeActivity - mda = (2 * fwhmc * (lcc - baseline) / 0.8591 ) * CCF * DCF3*DCF_act / ( keyLineYield * detectorEfficiency * Tl ) ;//Bq,参考时间为referenceTimeActivity + activity = (netKeyPeakArea * CCF * DCF3 * DCF_act) / (keyLineYield * detectorEfficiency * Tl);//Bq,参考时间为referenceTimeActivity + mda = (2 * fwhmc * (lcc - baseline) / 0.8591) * CCF * DCF3 * DCF_act / (keyLineYield * detectorEfficiency * Tl);//Bq,参考时间为referenceTimeActivity } - double concentration = ( netKeyPeakArea * CCF*DCF1*DCF2*DCF3*DCF_conc ) / ( keyLineYield * detectorEfficiency * Tl ) *1e6/ Svol;//mBq/m3,参考时间为referenceTimeConc - double mdc = (2 * fwhmc * (lcc - baseline) / 0.8591 ) * CCF*DCF1*DCF2*DCF3*DCF_conc / ( keyLineYield * detectorEfficiency * Tl ) *1e6 / Svol; - double activityErr = Math.sqrt( Math.pow(linePeakAreaErr/netKeyPeakArea, 2) + Math.pow(detectorEfficiencyError/detectorEfficiency, 2) ) * activity; + double concentration = (netKeyPeakArea * CCF * DCF1 * DCF2 * DCF3 * DCF_conc) / (keyLineYield * detectorEfficiency * Tl) * 1e6 / Svol;//mBq/m3,参考时间为referenceTimeConc + double mdc = (2 * fwhmc * (lcc - baseline) / 0.8591) * CCF * DCF1 * DCF2 * DCF3 * DCF_conc / (keyLineYield * detectorEfficiency * Tl) * 1e6 / Svol; + double activityErr = Math.sqrt(Math.pow(linePeakAreaErr / netKeyPeakArea, 2) + Math.pow(detectorEfficiencyError / detectorEfficiency, 2)) * activity; nucActMda.setActivity(activity); nucActMda.setAct_err(activityErr); @@ -1875,22 +2021,22 @@ public class GammaFileUtil extends AbstractLogOrReport { } } - public ChartData Channel_BaseLine(PHDFile phd, String color) { + public ChartData Channel_BaseLine(PHDFile phd, String color) { long m_nCount = phd.getSpec().getNum_g_channel(); ChartData cData = new ChartData(); - int start =0; + int start = 0; long end = -1; - if(m_nCount > 1 && phd.getVBase().size() == m_nCount) { - if(start < 1){ + if (m_nCount > 1 && phd.getVBase().size() == m_nCount) { + if (start < 1) { start = 1; } - if(end > m_nCount || end < 1){ + if (end > m_nCount || end < 1) { end = m_nCount; } - for(int i=start-1; i pointlist = new LinkedList<>(); - int start =0; + int start = 0; long end = -1; int peakNum = vecPeak.size(); - if(peakNum < 1 || phd.getVBase().size() != m_nCount){ + if (peakNum < 1 || phd.getVBase().size() != m_nCount) { return pointlist; } - if(start < 1){ + if (start < 1) { start = 1; } - if(end > m_nCount || end < 1){ + if (end > m_nCount || end < 1) { end = m_nCount; } // 找出在所给范围的第一道拟合峰和最后一道拟合峰的索引下标 int index = 0; int startPeak = -1; - int endPeak = peakNum-1; - while(index < peakNum && start > vecPeak.get(index).right){ + int endPeak = peakNum - 1; + while (index < peakNum && start > vecPeak.get(index).right) { index++; } - if(index < peakNum) { + if (index < peakNum) { startPeak = index; - while(index < peakNum && vecPeak.get(index).left < end){ + while (index < peakNum && vecPeak.get(index).left < end) { index++; } - endPeak = index-1; + endPeak = index - 1; } - if(startPeak < 0 || startPeak > endPeak){ + if (startPeak < 0 || startPeak > endPeak) { return pointlist; } List regPeak = new LinkedList<>(); int channel = 1; - for(int j=start-1; j= peak.left && channel <= peak.right) { - if(CollectionUtils.isEmpty(regPeak)) { + if (channel >= peak.left && channel <= peak.right) { + if (CollectionUtils.isEmpty(regPeak)) { List regChan = new LinkedList<>(); - for(double d=peak.left; d<=peak.right; d+=1.0){ + for (double d = peak.left; d <= peak.right; d += 1.0) { regChan.add(d); } List vBase = phd.getVBase(); - List t_base = vBase.subList(peak.left-1, peak.right); + List t_base = vBase.subList(peak.left - 1, peak.right); regPeak = CalValuesHandler.interp1(peak, t_base, regChan); } // 差值 = 原谱值 - 峰面积 SeriseData seriseData = new SeriseData(); seriseData.setX(channel); - seriseData.setY(m_vCount.get(j) - regPeak.get(channel-peak.left)); + seriseData.setY(m_vCount.get(j) - regPeak.get(channel - peak.left)); pointlist.add(seriseData); - } else if(m_vCount.get(j) > 0 && phd.getVBase().get(j) > 0) { + } else if (m_vCount.get(j) > 0 && phd.getVBase().get(j) > 0) { SeriseData seriseData = new SeriseData(); seriseData.setX(channel); seriseData.setY(m_vCount.get(j) - phd.getVBase().get(j)); pointlist.add(seriseData); - } else{ + } else { SeriseData seriseData = new SeriseData(); seriseData.setX(channel); seriseData.setY(0); pointlist.add(seriseData); } - if(vecPeak.get(startPeak).right < channel) { + if (vecPeak.get(startPeak).right < channel) { ++startPeak; regPeak.clear(); } - if(startPeak > endPeak){ + if (startPeak > endPeak) { break; } } - for(int j=channel; j 0 && phd.getVBase().get(j) > 0) { + for (int j = channel; j < end; j++) { + if (m_vCount.get(j) > 0 && phd.getVBase().get(j) > 0) { SeriseData seriseData = new SeriseData(); - seriseData.setX(j+1); + seriseData.setX(j + 1); seriseData.setY(m_vCount.get(j) - phd.getVBase().get(j)); pointlist.add(seriseData); } else { SeriseData seriseData = new SeriseData(); - seriseData.setX(j+1); + seriseData.setX(j + 1); seriseData.setY(0); pointlist.add(seriseData); } @@ -2010,29 +2156,29 @@ public class GammaFileUtil extends AbstractLogOrReport { public void ReadData(List m_vEnergy, List m_vNuclide) { try { - String filePath = parameterProperties.getFilePath() +File.separator+"Energy_Nuclide.txt"; + String filePath = parameterProperties.getFilePath() + File.separator + "Energy_Nuclide.txt"; File file = new File(filePath); List readLines = FileUtils.readLines(file, "UTF-8"); - for (int i=0; i= 2 && m_curParam.getP().get(2) > 0) { + String equation = ""; + int p_size = m_curParam.getP().size() - 1; + if (p_size >= 2 && m_curParam.getP().get(2) > 0) { // Polynomial: y=a0+a1*x+a2*x^2+a3*x^3 - equation +="Energy = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" + C * "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))); - for(int i=3; i<=p_size; i++) { - equation += " + C" + (i-1) +" * "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i)))+""; + equation += "Energy = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " + C * " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))); + for (int i = 3; i <= p_size; i++) { + equation += " + C" + (i - 1) + " * " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i))) + ""; } - } else if(p_size == 1) { - equation = "Energy = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" * C"; + } else if (p_size == 1) { + equation = "Energy = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " * C"; } return equation; } public void UpdateChartEnergy(List m_vCurEnergy, ParameterInfo m_curParam, List m_vCurCentroid, PHDFile phd, Double width, Map map) { int num = m_vCurEnergy.size(); - if(num < 1){ + if (num < 1) { return; } List datalist = new LinkedList<>(); - if(CollectionUtils.isNotEmpty(m_curParam.getP())) { + if (CollectionUtils.isNotEmpty(m_curParam.getP())) { // 拟合曲线 ChartData lData = new ChartData(); lData.setColor("rgb(255, 255, 0)"); @@ -2071,22 +2217,22 @@ public class GammaFileUtil extends AbstractLogOrReport { double MaxChan = Double.valueOf(phd.getSpec().getNum_g_channel()); double d = 1; double dStep = MaxChan / width * 2; - while(d < MaxChan) { + while (d < MaxChan) { vChan.add(d); - d+= dStep; + d += dStep; } vChan.add(MaxChan); List vFit = CalValuesHandler.calFcnEval(vChan, m_curParam.getP()).counts; - for(int i=0; i 0){ + for (int i = 0; i < vChan.size(); i++) { + if (vFit.get(i) > 0) { SeriseData seriseData = new SeriseData(); seriseData.setX(vChan.get(i)); seriseData.setY(vFit.get(i)); lData.getPointlist().add(seriseData); } } - if(lData.getPointlist().size() > 1){ + if (lData.getPointlist().size() > 1) { datalist.add(lData); } } @@ -2095,7 +2241,7 @@ public class GammaFileUtil extends AbstractLogOrReport { 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) { + int p_size = m_curParam.getP().size() - 1; + if (p_size >= 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 = ("+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" + E * "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))); - for(int i=3; i<=p_size; i++) { - equation += " + E"+(i-1)+" * "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i))); + equation += "FWHM = (" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " + E * " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))); + for (int i = 3; i <= p_size; i++) { + equation += " + E" + (i - 1) + " * " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i))); } - equation += ")"+1+"/"+2+""; + equation += ")" + 1 + "/" + 2 + ""; } return equation; } public void UpdateChartResolution(List m_vCurEnergy, ParameterInfo m_curParam, List m_vCurReso, PHDFile phd, Double width, Map map) { int num = m_vCurEnergy.size(); - if(num < 1) return; + if (num < 1) return; List datalist = new LinkedList<>(); - if(CollectionUtils.isNotEmpty(m_curParam.getP())) { + if (CollectionUtils.isNotEmpty(m_curParam.getP())) { // 拟合曲线 ChartData lData = new ChartData(); lData.setColor("rgb(255, 255, 0)"); @@ -2138,23 +2284,23 @@ public class GammaFileUtil extends AbstractLogOrReport { double d = vEner.get(0), maxE = vEner.get(1); double dStep = maxE / width * 2; - vEner.remove(vEner.size()-1); - while(d < maxE) { + vEner.remove(vEner.size() - 1); + while (d < maxE) { vEner.add(d); d += dStep; } vEner.add(maxE); List vFit = CalValuesHandler.calFcnEval(vEner, m_curParam.getP()).counts; - for(int i=0; i 0){ + for (int i = 0; i < vEner.size(); i++) { + if (vFit.get(i) > 0) { SeriseData seriseData = new SeriseData(); seriseData.setX(vEner.get(i)); seriseData.setY(vFit.get(i)); lData.getPointlist().add(seriseData); } } - if(lData.getPointlist().size() > 1){ + if (lData.getPointlist().size() > 1) { datalist.add(lData); } } @@ -2163,7 +2309,7 @@ public class GammaFileUtil extends AbstractLogOrReport { ChartData pData = new ChartData(); pData.setColor("red"); pData.setType("Scatter"); - for(int i=0; i m_vCurEnergy, ParameterInfo m_curParam, Integer curRow, Integer funId) { String equation = ""; - if(m_curParam.getP().size() > 2) { - int p_size = m_curParam.getP().size()-1; + if (m_curParam.getP().size() > 2) { + int p_size = m_curParam.getP().size() - 1; int e_size = m_vCurEnergy.size(); if (Objects.isNull(funId)) { funId = m_curParam.getP().get(0).intValue(); } - switch(funId) { + switch (funId) { case 1: // Interpolation: y=yi+(y(i+1)-yi)*(x-xi)/(x(i+1)-xi) for xi<=x= 4) { + if (p_size == 2 * e_size && p_size >= 4) { int i = curRow; - if(i < 0 || i >= e_size) break; + if (i < 0 || i >= e_size) break; double y1, y0, x1, x0; - if(i < e_size - 1) - { - y1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2+3)))); - y0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2+1)))); - x1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2+2)))); - x0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2)))); + if (i < e_size - 1) { + y1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2 + 3)))); + y0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2 + 1)))); + x1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2 + 2)))); + x0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2)))); } else { - y1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2+1)))); - y0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2-1)))); - x1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2)))); - x0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i*2-2)))); + y1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2 + 1)))); + y0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2 - 1)))); + x1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2)))); + x0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i * 2 - 2)))); } - equation += "Efficiency = "+y0+" + ("+y1+"-"+y0+") * (E - "+x0+") / ("+x1+" - "+x0+")"; + equation += "Efficiency = " + y0 + " + (" + y1 + "-" + y0 + ") * (E - " + x0 + ") / (" + x1 + " - " + x0 + ")"; } break; case 5: // HT Efficiency: y = A*exp(-(E1/x)^k)*(1-exp(-(E2/x)^n)) - if(p_size == 5) { - for(int i=1; i<=p_size; i++) { - if(m_curParam.getP().get(i) <= 0) break; + if (p_size == 5) { + for (int i = 1; i <= p_size; i++) { + if (m_curParam.getP().get(i) <= 0) break; } - equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2)))+" / E)"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3)))+") * "+ - "(1-exp(-("+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4)))+" / E)"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5)))+"))"; + equation += "Efficiency = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " * exp(-(" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))) + " / E)" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3))) + ") * " + + "(1-exp(-(" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4))) + " / E)" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5))) + "))"; } break; 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) = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" + "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2)))+" * log(E)"; - for(int i=3; i<=p_size; i++) { - equation += " + "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i)))+" * log(E)"+(i-1)+""; + if (p_size >= 2) { + equation += "log(Efficiency) = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " + " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))) + " * log(E)"; + for (int i = 3; i <= p_size; i++) { + equation += " + " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i))) + " * log(E)" + (i - 1) + ""; } } break; 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) = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" + "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2)))+" * log(C/E)"; - for(int i=3; i<=p_size; i++) { - equation += " + "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i)))+" * log(C/E)"+(i-1)+""; + if (p_size >= 3) { + equation += "log(Efficiency) = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " + " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))) + " * log(C/E)"; + for (int i = 3; i <= p_size; i++) { + equation += " + " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(i))) + " * log(C/E)" + (i - 1) + ""; } } break; case 93: // HAE Efficiency (1-3): y=S*exp(-(E1/x)^k)*(1- exp(-(2*E3/(x-E3))^n)) - if(p_size == 5) { - equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2)))+" / E)"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3)))+") * "+ - "(1 - exp(-(2 * "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4)))+" / (E - "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4)))+"))"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5)))+"))"; + if (p_size == 5) { + equation += "Efficiency = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " * exp(-(" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))) + " / E)" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3))) + ") * " + + "(1 - exp(-(2 * " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4))) + " / (E - " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4))) + "))" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5))) + "))"; } break; case 94: // HAE Efficiency (1-2): y=S*exp(-(E1/x)^k)*(1- exp(-b*(1/(x-E2))^m)) - if(p_size == 6) { - equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2)))+" / E)"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3)))+") * "+ - "(1 - exp(-"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4)))+" * (1 / (E - "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5)))+"))"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(6)))+"))"; + if (p_size == 6) { + equation += "Efficiency = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " * exp(-(" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))) + " / E)" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3))) + ") * " + + "(1 - exp(-" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4))) + " * (1 / (E - " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5))) + "))" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(6))) + "))"; } break; case 95: // HAE Efficiency (1-2-3): y = S * exp(-(E1/x)^k) * (1- exp(-b*(1/(x-E2))^m)) *(1 - exp(-(2*E3/(E-E3))^n)) - if(p_size == 8) { - equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2)))+" / E)"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3)))+") * "+ - "(1 - exp(-"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4)))+" * (1 / (E - "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5)))+"))"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(6)))+")) * "+ - "(1 - exp(-(2 * "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(7)))+" / (E - "+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(7)))+"))"+NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(8)))+"))"; + if (p_size == 8) { + equation += "Efficiency = " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(1))) + " * exp(-(" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(2))) + " / E)" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(3))) + ") * " + + "(1 - exp(-" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(4))) + " * (1 / (E - " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(5))) + "))" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(6))) + ")) * " + + "(1 - exp(-(2 * " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(7))) + " / (E - " + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(7))) + "))" + NumberFormatUtil.numberFormat(String.valueOf(m_curParam.getP().get(8))) + "))"; } break; } @@ -2254,10 +2399,10 @@ public class GammaFileUtil extends AbstractLogOrReport { public void UpdateChartEfficiency(List m_vCurEnergy, ParameterInfo m_curParam, List m_vCurEffi, PHDFile phd, Double width, Map map) { int num = m_vCurEnergy.size(); - if(num < 1) return; + if (num < 1) return; List datalist = new LinkedList<>(); - if(CollectionUtils.isNotEmpty(m_curParam.getP())) { + if (CollectionUtils.isNotEmpty(m_curParam.getP())) { // 拟合曲线 ChartData lData = new ChartData(); lData.setColor("rgb(255, 255, 0)"); @@ -2272,23 +2417,23 @@ public class GammaFileUtil extends AbstractLogOrReport { double maxE = vEner.get(1); double dStep = maxE / width * 2; - vEner.remove(vEner.size()-1); - while(d < maxE) { + vEner.remove(vEner.size() - 1); + while (d < maxE) { vEner.add(d); d += dStep; } vEner.add(maxE); List vFit = CalValuesHandler.calFcnEval(vEner, m_curParam.getP()).counts; - for(int i=0; i 0){ + for (int i = 0; i < vEner.size(); i++) { + if (vFit.get(i) > 0) { SeriseData seriseData = new SeriseData(); seriseData.setX(vEner.get(i)); seriseData.setY(vFit.get(i)); lData.getPointlist().add(seriseData); } } - if(lData.getPointlist().size() > 1){ + if (lData.getPointlist().size() > 1) { datalist.add(lData); } } @@ -2297,7 +2442,7 @@ public class GammaFileUtil extends AbstractLogOrReport { ChartData pData = new ChartData(); pData.setColor("red"); pData.setType("Scatter"); - for(int i=0; i temp = new HashMap<>(); try { - bRet = GetMiddleData(phd, userName, temp,middleData, MiddleDataType.InterAction.getType(), flag); - middleData.analyses_type ="Interactive"; + bRet = GetMiddleData(phd, userName, temp, middleData, MiddleDataType.InterAction.getType(), flag); + middleData.analyses_type = "Interactive"; } catch (ParseException e) { throw new RuntimeException(e); } @@ -2354,7 +2499,7 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); String calibration = "Channel : %-12s Energy : %s keV Error : %-10s"; //日志文本内容第一部分数据 - for (int i=0;i0) { + if (middleData.calibration_pairs_E_idCalPoint.size() > 0) { String title = String.format("Energy Calibration [%s ]", middleData.calibration_pairs_E_Input); strBuffer.append(title); strBuffer.append(System.lineSeparator()); @@ -2448,7 +2593,7 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); } //文本日志内容第七部分数据 - if(middleData.calibration_pairs_R_idCalPoint.size()>0) { + if (middleData.calibration_pairs_R_idCalPoint.size() > 0) { String title = String.format("Resolution Calibration [%s ]", middleData.calibration_pairs_R_Input); strBuffer.append(title); strBuffer.append(System.lineSeparator()); @@ -2464,7 +2609,7 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); } //文本日志内容第八部分数据 - if(middleData.calibration_pairs_EF_idCalPoint.size()>0) { + if (middleData.calibration_pairs_EF_idCalPoint.size() > 0) { String title = String.format("Efficiency Calibration [%s ]", middleData.calibration_pairs_EF_Input); strBuffer.append(title); strBuffer.append(System.lineSeparator()); @@ -2480,7 +2625,7 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); } //文本日志内容第九部分数据 - if(middleData.calibration_pairs_T_idCalPoint.size()>0) { + if (middleData.calibration_pairs_T_idCalPoint.size() > 0) { String title = String.format("Tot_efficiency Calibration [%s ]", middleData.calibration_pairs_T_Input); strBuffer.append(title); strBuffer.append(System.lineSeparator()); @@ -2518,7 +2663,7 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); //文本内容第十部分数据 String[] dataTitles10 = new String[]{"ECutAnalysis_Low", "ECutAnalysis_High", "EnergyTolerance", "BaseImprovePSS", "PSS_low", "k_back", "k_alpha", "k_beta", "RiskLevelK", "refTime_act", "refTime_conc"}; - String[] dataContent10 = new String[]{String.valueOf(middleData.setting_specSetup.getECutAnalysis_Low()), middleData.setting_specSetup.getECutAnalysis_High()==-9999?"inf":String.valueOf(middleData.setting_specSetup.getECutAnalysis_High()), + String[] dataContent10 = new String[]{String.valueOf(middleData.setting_specSetup.getECutAnalysis_Low()), middleData.setting_specSetup.getECutAnalysis_High() == -9999 ? "inf" : String.valueOf(middleData.setting_specSetup.getECutAnalysis_High()), String.valueOf(middleData.setting_specSetup.getEnergyTolerance()), String.valueOf(middleData.setting_specSetup.getBaseImprovePSS()), String.valueOf(middleData.setting_specSetup.getPss_low()), String.valueOf(middleData.setting_specSetup.getK_back()), String.valueOf(middleData.setting_specSetup.getK_alpha()), String.valueOf(middleData.setting_specSetup.getK_beta()), String.valueOf(middleData.setting_specSetup.getRiskLevelK()), @@ -2533,12 +2678,12 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); //文本内容第十一部分数据 String[] dataTitle11 = new String[]{"CalibrationPSS_low", "CalibrationPSS_high", "bUpdateCal", "KeepCalPeakSearchPeaks"}; - String[] dataContent11 = new String[]{String.valueOf(middleData.setting_specSetup.getCalibrationPSS_low()), String.valueOf(middleData.setting_specSetup.getCalibrationPSS_high()), (middleData.setting_specSetup.isBUpdateCal()?"1":"0"), (middleData.setting_specSetup.isKeepCalPeakSearchPeaks()?"1":"0")}; + String[] dataContent11 = new String[]{String.valueOf(middleData.setting_specSetup.getCalibrationPSS_low()), String.valueOf(middleData.setting_specSetup.getCalibrationPSS_high()), (middleData.setting_specSetup.isBUpdateCal() ? "1" : "0"), (middleData.setting_specSetup.isKeepCalPeakSearchPeaks() ? "1" : "0")}; strBuffer.append(attributeFormat(dataTitle11, dataContent11)); //获取peak的数据 int peaksUsed = 0; - for(int m=0;m0?StringUtils.join(middleData.peaks_Nuclide_name.get(i), StringPool.SEMICOLON):""; + String nuclide = middleData.peaks_Nuclide_name.get(i).length() > 0 ? StringUtils.join(middleData.peaks_Nuclide_name.get(i), StringPool.SEMICOLON) : ""; strBuffer.append(rowFormat(data14, idPeak, energy, peakCentroid, fwhm, area, areaErr, signif, sensit, nuclide)); //换行 strBuffer.append(System.lineSeparator()); @@ -2576,12 +2721,12 @@ public class GammaFileUtil extends AbstractLogOrReport { } //获取当前正在使用的核素信息 String qsNuclidesName = ""; - for(int m=0;m1) { - qsNuclidesName = qsNuclidesName+middleData.nucl_ided_Nuclidename.get(middleData.nucl_ided_Nuclidename.size()-1); + if (middleData.nucl_ided_Nuclidename.size() > 1) { + qsNuclidesName = qsNuclidesName + middleData.nucl_ided_Nuclidename.get(middleData.nucl_ided_Nuclidename.size() - 1); } //文本内容第十六部分头部信息 String logHead16 = "Nuclide Identified%s"; @@ -2600,7 +2745,7 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); //文本内容第十五部分数据 String data15 = "Nuclide : %-11s Halflife : %-20s Activity : %-14s RelErr : %-12s Conc : %-24s MDC : %-17s"; - for (int i=0;i> reportMap1 = GetReportFixedWidth(cells1, datas1, 30); List title1 = reportMap1.get("title"); List content1 = reportMap1.get("content"); - for (int i=0; i< title1.size(); i++) { + for (int i = 0; i < title1.size(); i++) { String title = title1.get(i); String content = content1.get(i); strBuffer.append(String.format("%s:%-8s%s", title, StringPool.SPACE, content)); @@ -2746,7 +2891,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMap2 = GetReportFixedWidth(cell2, datas2, 30); List title2 = reportMap2.get("title"); List content2 = reportMap2.get("content"); - for (int i=0; i< title2.size(); i++) { + for (int i = 0; i < title2.size(); i++) { String title = title2.get(i); String content = content2.get(i); strBuffer.append(String.format("%s:%-10s%s", title, StringPool.SPACE, content)); @@ -2757,11 +2902,11 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(System.lineSeparator()); //获取核素信息 String qsNuclidesName = ""; - for(int m=0;m1) { - qsNuclidesName = qsNuclidesName+middleData.nucl_ided_Nuclidename.get(middleData.nucl_ided_Nuclidename.size()-1); + if (middleData.nucl_ided_Nuclidename.size() > 1) { + qsNuclidesName = qsNuclidesName + middleData.nucl_ided_Nuclidename.get(middleData.nucl_ided_Nuclidename.size() - 1); } strBuffer.append("#ACTIVITY SUMMARY"); //换行 @@ -2775,7 +2920,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMap3 = GetReportFixedWidth(cells3, datas3, 30); List title3 = reportMap3.get("title"); List content3 = reportMap3.get("content"); - for (int i=0; i< title3.size(); i++) { + for (int i = 0; i < title3.size(); i++) { String title = title3.get(i); String content = content3.get(i); strBuffer.append(String.format("%s:%-16s%s", title, StringPool.SPACE, content)); @@ -2802,9 +2947,9 @@ public class GammaFileUtil extends AbstractLogOrReport { String[] nuclideData = new String[]{" Nuclide", "Halflife(s)", "Activity(Bq)", "RelErr%", "MDA(Bq)", "Conc(uBq/m^3)", "MDC"}; strBuffer.append(rowFormat(nuclideTitle, nuclideData)); strBuffer.append(System.lineSeparator()); - for (int i=0; i0) { + if (middleData.calibration_pairs_E_idCalPoint.size() > 0) { strBuffer.append("#Calibration"); //换行 strBuffer.append(System.lineSeparator()); - strBuffer.append(" Energy Calibration ["+middleData.calibration_pairs_E_Input+" ]"); + strBuffer.append(" Energy Calibration [" + middleData.calibration_pairs_E_Input + " ]"); //换行 strBuffer.append(System.lineSeparator()); strBuffer.append(rowFormat("%sFunction:%-27s%s", StringPool.SPACE, StringPool.SPACE, middleData.calibration_E_functionTypeDef)); @@ -2953,7 +3098,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMapE4 = GetReportFixedWidth(cellsE4, datasE4, 30); List titleE4 = reportMapE4.get("title"); List contentE4 = reportMapE4.get("content"); - for (int i=0; i< titleE4.size(); i++) { + for (int i = 0; i < titleE4.size(); i++) { String title = titleE4.get(i); String content = contentE4.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -2966,7 +3111,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMap4 = GetReportFixedWidth(cells4, datas4, 30); List title4 = reportMap4.get("title"); List content4 = reportMap4.get("content"); - for (int i=0; i< title4.size(); i++) { + for (int i = 0; i < title4.size(); i++) { String title = title4.get(i); String content = content4.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -2986,8 +3131,8 @@ public class GammaFileUtil extends AbstractLogOrReport { //换行 strBuffer.append(System.lineSeparator()); } - if(middleData.calibration_pairs_R_idCalPoint.size()>0) { - strBuffer.append(" Resolution Calibration ["+middleData.calibration_pairs_R_Input+" ]"); + if (middleData.calibration_pairs_R_idCalPoint.size() > 0) { + strBuffer.append(" Resolution Calibration [" + middleData.calibration_pairs_R_Input + " ]"); //换行 strBuffer.append(System.lineSeparator()); strBuffer.append(rowFormat("%sFunction:%-27s%s", StringPool.SPACE, StringPool.SPACE, middleData.calibration_R_functionTypeDef)); @@ -2999,7 +3144,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMapE5 = GetReportFixedWidth(cellsE5, datasE5, 30); List titleE5 = reportMapE5.get("title"); List contentE5 = reportMapE5.get("content"); - for (int i=0; i< titleE5.size(); i++) { + for (int i = 0; i < titleE5.size(); i++) { String title = titleE5.get(i); String content = contentE5.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -3012,7 +3157,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMap5 = GetReportFixedWidth(cells5, datas5, 30); List title5 = reportMap5.get("title"); List content5 = reportMap5.get("content"); - for (int i=0; i< title5.size(); i++) { + for (int i = 0; i < title5.size(); i++) { String title = title5.get(i); String content = content5.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -3028,8 +3173,8 @@ public class GammaFileUtil extends AbstractLogOrReport { //换行 strBuffer.append(System.lineSeparator()); } - if(middleData.calibration_pairs_EF_idCalPoint.size()>0) { - strBuffer.append(" Efficiency Calibration ["+middleData.calibration_pairs_EF_Input+" ]"); + if (middleData.calibration_pairs_EF_idCalPoint.size() > 0) { + strBuffer.append(" Efficiency Calibration [" + middleData.calibration_pairs_EF_Input + " ]"); //换行 strBuffer.append(System.lineSeparator()); strBuffer.append(rowFormat("%sFunction:%-27s%s", StringPool.SPACE, StringPool.SPACE, middleData.calibration_EF_functionTypeDef)); @@ -3041,7 +3186,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMapE6 = GetReportFixedWidth(cellsE6, datasE6, 30); List titleE6 = reportMapE6.get("title"); List contentE6 = reportMapE6.get("content"); - for (int i=0; i< titleE6.size(); i++) { + for (int i = 0; i < titleE6.size(); i++) { String title = titleE6.get(i); String content = contentE6.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -3054,7 +3199,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMap6 = GetReportFixedWidth(cells6, datas6, 30); List title6 = reportMap6.get("title"); List content6 = reportMap6.get("content"); - for (int i=0; i< title6.size(); i++) { + for (int i = 0; i < title6.size(); i++) { String title = title6.get(i); String content = content6.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -3070,8 +3215,8 @@ public class GammaFileUtil extends AbstractLogOrReport { //换行 strBuffer.append(System.lineSeparator()); } - if(middleData.calibration_pairs_T_idCalPoint.size()>0) { - strBuffer.append(" Tot_efficiency Calibration ["+middleData.calibration_pairs_T_Input+" ]"); + if (middleData.calibration_pairs_T_idCalPoint.size() > 0) { + strBuffer.append(" Tot_efficiency Calibration [" + middleData.calibration_pairs_T_Input + " ]"); //换行 strBuffer.append(System.lineSeparator()); strBuffer.append(rowFormat("%sFunction:%-27s%s", StringPool.SPACE, StringPool.SPACE, middleData.calibration_T_functionTypeDef)); @@ -3083,7 +3228,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMapE7 = GetReportFixedWidth(cellsE7, datasE7, 30); List titleE7 = reportMapE7.get("title"); List contentE7 = reportMapE7.get("content"); - for (int i=0; i< titleE7.size(); i++) { + for (int i = 0; i < titleE7.size(); i++) { String title = titleE7.get(i); String content = contentE7.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -3096,7 +3241,7 @@ public class GammaFileUtil extends AbstractLogOrReport { Map> reportMap7 = GetReportFixedWidth(cells7, datas7, 30); List title7 = reportMap7.get("title"); List content7 = reportMap7.get("content"); - for (int i=0; i< title7.size(); i++) { + for (int i = 0; i < title7.size(); i++) { String title = title7.get(i); String content = content7.get(i); strBuffer.append(rowFormat("%s:%-34s%s", title, StringPool.SPACE, content)); @@ -3121,22 +3266,22 @@ public class GammaFileUtil extends AbstractLogOrReport { strBuffer.append(rowFormat(qualityTitle, " Name", "Pass/Fail", "Value", "Test")); //换行 strBuffer.append(System.lineSeparator()); - for (int i=0;i DoubleLimit(List data) { List rData = new LinkedList<>(); - for(int pos=0;pos DoubleLimit_G(List _data) { List rdata = new LinkedList<>(); - for(int pos=0;pos<_data.size();pos++) { + for (int pos = 0; pos < _data.size(); pos++) { Double value = _data.get(pos); - if(Objects.isNull(value)) { + if (Objects.isNull(value)) { rdata.add(null); } else { rdata.add(String.format("%.10g", value)); @@ -3161,62 +3306,128 @@ public class GammaFileUtil extends AbstractLogOrReport { public String EquationDescription(int funcId) { String desc = ""; - switch (funcId) - { - case 1: desc = "y=yi+(y(i+1)-yi)*(x-xi)/(x(i+1)-xi) for xi<=x nucline,GStoreMiddleProcessData middleData, String type, String flag) throws ParseException { - boolean bRet=true; + public boolean GetMiddleData(PHDFile fileAnlyse, String userName, Map nucline, GStoreMiddleProcessData middleData, String type, String flag) throws ParseException { + boolean bRet = true; //标准名称规范化 middleData.mdcInfos = ListUtil.toList(fileAnlyse.getMdcInfoMap().values()); String dataType = fileAnlyse.getMsgInfo().getData_type(); String subDirSavePath = ""; - subDirSavePath+=nameStandUtil.GetSysTemSubdir(fileAnlyse.getHeader().getSystem_type()); - subDirSavePath+=nameStandUtil.GetDateTypeSubdir(dataType); + subDirSavePath += nameStandUtil.GetSysTemSubdir(fileAnlyse.getHeader().getSystem_type()); + subDirSavePath += nameStandUtil.GetDateTypeSubdir(dataType); Map fileNames = nameStandUtil.NameStandard(fileAnlyse); String lcName = fileNames.get("lc"); String scacName = fileNames.get("scac"); @@ -3225,16 +3436,16 @@ public class GammaFileUtil extends AbstractLogOrReport { String rptName = fileNames.get("rpt"); String saveFileName = fileNames.get("saveFile"); String path = nameStandUtil.SetFileDir(subDirSavePath, saveFileName); - middleData.analyses_analyst=userName; - String qsSaveFile = path+StringPool.SLASH+saveFileName; + middleData.analyses_analyst = userName; + String qsSaveFile = path + StringPool.SLASH + saveFileName; qsSaveFile = qsSaveFile.replace(StringPool.BACK_SLASH, StringPool.SLASH); - String qsLogPath= path+StringPool.SLASH+middleData.analyses_analyst+"_"+logName; + String qsLogPath = path + StringPool.SLASH + middleData.analyses_analyst + "_" + logName; qsLogPath = qsLogPath.replace(StringPool.BACK_SLASH, StringPool.SLASH); - String qsReportPath= ""; - if(type.equals(MiddleDataType.Auto.getType())) { - qsReportPath="Arr"+StringPool.SLASH+path+StringPool.SLASH+middleData.analyses_analyst+"_"+rptName; - } else if (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save")){ - qsReportPath="Rrr"+StringPool.SLASH+path+StringPool.SLASH+middleData.analyses_analyst+"_"+rptName; + String qsReportPath = ""; + if (type.equals(MiddleDataType.Auto.getType())) { + qsReportPath = "Arr" + StringPool.SLASH + path + StringPool.SLASH + middleData.analyses_analyst + "_" + rptName; + } else if (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save")) { + qsReportPath = "Rrr" + StringPool.SLASH + path + StringPool.SLASH + middleData.analyses_analyst + "_" + rptName; } qsReportPath = qsReportPath.replace(StringPool.BACK_SLASH, StringPool.SLASH); @@ -3242,11 +3453,11 @@ public class GammaFileUtil extends AbstractLogOrReport { middleData.analyses_LogPath = qsLogPath; middleData.analyses_ReportPath = qsReportPath; //获取算法数据 - if(type.equals(MiddleDataType.Auto.getType())) { + if (type.equals(MiddleDataType.Auto.getType())) { String anylseBegin; String anylseEnd; anylseBegin = DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"); - bRet = AnalyseSpectrum(fileAnlyse,nucline); + bRet = AnalyseSpectrum(fileAnlyse, nucline); if (bRet) { RunQC(fileAnlyse); fileAnlyse.setEfficiencyParam(fileAnlyse.getUsedEffiPara().getP()); @@ -3261,7 +3472,7 @@ public class GammaFileUtil extends AbstractLogOrReport { } else { return bRet; } - } else if (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save")){ //如果是人工交互分析 则先上传phd对应文件信息 + } else if (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save")) { //如果是人工交互分析 则先上传phd对应文件信息 //上传本次文件到ftp人工交互存储路径下 File sampleTmp = null; try { @@ -3277,12 +3488,12 @@ public class GammaFileUtil extends AbstractLogOrReport { } //gards_analyses - String qsBaseLinePath = path+StringPool.SLASH+middleData.analyses_analyst+"_"+baselineName; + String qsBaseLinePath = path + StringPool.SLASH + middleData.analyses_analyst + "_" + baselineName; qsBaseLinePath = qsBaseLinePath.replace(StringPool.BACK_SLASH, StringPool.SLASH); // m_baseLineFileName; - String qsLcPath= path+StringPool.SLASH+middleData.analyses_analyst+"_"+lcName; + String qsLcPath = path + StringPool.SLASH + middleData.analyses_analyst + "_" + lcName; qsLcPath = qsLcPath.replace(StringPool.BACK_SLASH, StringPool.SLASH); - String qsScacPath= path+StringPool.SLASH+middleData.analyses_analyst+"_"+scacName; + String qsScacPath = path + StringPool.SLASH + middleData.analyses_analyst + "_" + scacName; qsScacPath = qsScacPath.replace(StringPool.BACK_SLASH, StringPool.SLASH); @@ -3292,7 +3503,7 @@ public class GammaFileUtil extends AbstractLogOrReport { String qsSaveBaseLine = savePath + StringPool.SLASH + qsBaseLinePath; String qsSaveLc = savePath + StringPool.SLASH + qsLcPath; String qsSaveScac = savePath + StringPool.SLASH + qsScacPath; - if((type.equals(MiddleDataType.Auto.getType())) || (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save")) ) { + if ((type.equals(MiddleDataType.Auto.getType())) || (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save"))) { //判断生成baseline,lc,scac文件的目录是否存在 如果不存在则创建目录 String fileSavePath = rootPath + qsSaveBaseLine.substring(0, qsSaveBaseLine.lastIndexOf(StringPool.SLASH)); File fileSave = new File(fileSavePath); @@ -3305,10 +3516,10 @@ public class GammaFileUtil extends AbstractLogOrReport { } double totalNumber = 0.0; - for(int m=0;m temp = new LinkedList<>(); - for(int pos=0;pos temp = new LinkedList<>(); - for(int pos=0;pos temp = new LinkedList<>(); - for(int pos=0;pos temp = new LinkedList<>(); - for(int pos=0;pos0) { + if (coeffNumber > 0) { funcType = fileAnlyse.getUsedEnerPara().getP().get(0).intValue(); } - for(int m=1;m0) { - coeffEnergy+=String.format("%e", fileAnlyse.getUsedEnerPara().getP().get(coeffNumber-1)); + if (coeffNumber > 0) { + coeffEnergy += String.format("%e", fileAnlyse.getUsedEnerPara().getP().get(coeffNumber - 1)); } uncerNumber = fileAnlyse.getUsedEnerPara().getPerr().size(); - for(int m=0;m0) { - uncerEnergy+=String.format("%e", fileAnlyse.getUsedEnerPara().getPerr().get(uncerNumber-1)); + if (uncerNumber > 0) { + uncerEnergy += String.format("%e", fileAnlyse.getUsedEnerPara().getPerr().get(uncerNumber - 1)); } funcDefEnergy = EquationDescription(funcType); funcTypeDefEnergy = EquationName(funcType); @@ -3468,22 +3678,22 @@ public class GammaFileUtil extends AbstractLogOrReport { String funcDefEffi = ""; String funcTypeDefEffi = ""; coeffNumber = fileAnlyse.getUsedEffiPara().getP().size(); - if(coeffNumber>0) { + if (coeffNumber > 0) { funcType = fileAnlyse.getUsedEffiPara().getP().get(0).intValue(); } - for(int m=1;m0) { - coeffEffi+=String.format("%e", fileAnlyse.getUsedEffiPara().getP().get(coeffNumber-1)); + if (coeffNumber > 0) { + coeffEffi += String.format("%e", fileAnlyse.getUsedEffiPara().getP().get(coeffNumber - 1)); } uncerNumber = fileAnlyse.getUsedEffiPara().getPerr().size(); - for(int m=0;m0) { - uncerEffi+= String.format("%e", fileAnlyse.getUsedEffiPara().getPerr().get(uncerNumber-1)); + if (uncerNumber > 0) { + uncerEffi += String.format("%e", fileAnlyse.getUsedEffiPara().getPerr().get(uncerNumber - 1)); } funcDefEffi = EquationDescription(funcType); funcTypeDefEffi = EquationName(funcType); @@ -3500,22 +3710,22 @@ public class GammaFileUtil extends AbstractLogOrReport { String funcDefReso = ""; String funcTypeDefReso = ""; coeffNumber = fileAnlyse.getUsedResoPara().getP().size(); - if(coeffNumber>0) { + if (coeffNumber > 0) { funcType = fileAnlyse.getUsedResoPara().getP().get(0).intValue(); } - for(int m=1;m0) { - coeffReso+= String.format("%e", fileAnlyse.getUsedResoPara().getP().get(coeffNumber-1)); + if (coeffNumber > 0) { + coeffReso += String.format("%e", fileAnlyse.getUsedResoPara().getP().get(coeffNumber - 1)); } uncerNumber = fileAnlyse.getUsedResoPara().getPerr().size(); - for(int m=0;m0) { - uncerReso+= String.format("%e", fileAnlyse.getUsedResoPara().getPerr().get(uncerNumber-1)); + if (uncerNumber > 0) { + uncerReso += String.format("%e", fileAnlyse.getUsedResoPara().getPerr().get(uncerNumber - 1)); } funcDefReso = EquationDescription(funcType); funcTypeDefReso = EquationName(funcType); @@ -3532,22 +3742,22 @@ public class GammaFileUtil extends AbstractLogOrReport { String funcDefTotE = ""; String funcTypeDefTotE = ""; coeffNumber = fileAnlyse.getUsedTotEPara().getP().size(); - if(coeffNumber>0) { + if (coeffNumber > 0) { funcType = fileAnlyse.getUsedTotEPara().getP().get(0).intValue(); } - for(int m=1;m0) { - coeffTotE+= String.format("%e", fileAnlyse.getUsedTotEPara().getP().get(coeffNumber-1)); + if (coeffNumber > 0) { + coeffTotE += String.format("%e", fileAnlyse.getUsedTotEPara().getP().get(coeffNumber - 1)); } uncerNumber = fileAnlyse.getUsedTotEPara().getPerr().size(); - for(int m=0;m0) { - uncerTotE+= String.format("%e", fileAnlyse.getUsedTotEPara().getPerr().get(uncerNumber-1)); + if (uncerNumber > 0) { + uncerTotE += String.format("%e", fileAnlyse.getUsedTotEPara().getPerr().get(uncerNumber - 1)); } funcDefTotE = EquationDescription(funcType); funcTypeDefTotE = EquationName(funcType); @@ -3561,7 +3771,7 @@ public class GammaFileUtil extends AbstractLogOrReport { //gards_ peaks数据表 - if(fileAnlyse.getVPeak().size() != 0) { + if (fileAnlyse.getVPeak().size() != 0) { List dvctIDPEAK = new LinkedList<>(); List dvctCENTROIDCHANNEL = new LinkedList<>(); List dvctUNCCENTROIDCHANNEL = new LinkedList<>(); @@ -3594,18 +3804,18 @@ public class GammaFileUtil extends AbstractLogOrReport { List dvctLD = new LinkedList<>(); List dvctNuclide_name = new LinkedList<>(); List dvctComments = new LinkedList<>(); - for(int m=0; m 1024){ + String t_comment = fileAnlyse.getVPeak().get(m).comments == null ? "" : fileAnlyse.getVPeak().get(m).comments.replace("\'", "\'\'").trim(); + if (t_comment.length() > 1024) { t_comment = t_comment.substring(0, 1025); } dvctComments.add(t_comment); dvctNuclide_name.add(StringUtils.join(fileAnlyse.getVPeak().get(m).nuclides, ";")); } - middleData.peaks_idPeak =dvctIDPEAK; - middleData.peaks_peakCentroid =DoubleLimit_G(dvctCENTROIDCHANNEL); - middleData.peaks_uncpeakCentroid =DoubleLimit_G(dvctUNCCENTROIDCHANNEL); - middleData.peaks_Energy =DoubleLimit_G(dvctENERGY); - middleData.peaks_uncEnergy =DoubleLimit_G(dvctUNCENERGY); - middleData.peaks_Area =DoubleLimit_G(dvctAREA); - middleData.peaks_areaErr =DoubleLimit_G(dvctUNCAREA); - middleData.peaks_Efficiency =DoubleLimit_G(dvctEFFICIENCY); - middleData.peaks_Uncefficiency =DoubleLimit_G(dvctUNCEFFICIENCY); - middleData.peaks_Fwhm =DoubleLimit_G(dvctFWHM); + middleData.peaks_idPeak = dvctIDPEAK; + middleData.peaks_peakCentroid = DoubleLimit_G(dvctCENTROIDCHANNEL); + middleData.peaks_uncpeakCentroid = DoubleLimit_G(dvctUNCCENTROIDCHANNEL); + middleData.peaks_Energy = DoubleLimit_G(dvctENERGY); + middleData.peaks_uncEnergy = DoubleLimit_G(dvctUNCENERGY); + middleData.peaks_Area = DoubleLimit_G(dvctAREA); + middleData.peaks_areaErr = DoubleLimit_G(dvctUNCAREA); + middleData.peaks_Efficiency = DoubleLimit_G(dvctEFFICIENCY); + middleData.peaks_Uncefficiency = DoubleLimit_G(dvctUNCEFFICIENCY); + middleData.peaks_Fwhm = DoubleLimit_G(dvctFWHM); middleData.peaks_Fwhmc = DoubleLimit_G(dvctFWTM); - middleData.peaks_Significance =DoubleLimit_G(dvctSIGNIFICANCE); - middleData.peaks_Sensitivity =DoubleLimit_G(dvctSENSITIVITY); - middleData.peaks_multiIndex =DoubleLimit_G(dvctMULTIINDEX); - middleData.peaks_ROIstart =DoubleLimit_G(dvctROISTART); - middleData.peaks_ROIend =DoubleLimit_G(dvctROIEND); - middleData.peaks_tail =DoubleLimit_G(dvctTAIL); - middleData.peaks_tailAlpha =DoubleLimit_G(dvctTAILALPHA); - middleData.peaks_upperTail =DoubleLimit_G(dvctUPPERTAIL); - middleData.peaks_upperTailAlpha =DoubleLimit_G(dvctUPPERTAILALPHA); - middleData.peaks_BWWidthChan =DoubleLimit_G(dvctBWWIDTHCHAN); + middleData.peaks_Significance = DoubleLimit_G(dvctSIGNIFICANCE); + middleData.peaks_Sensitivity = DoubleLimit_G(dvctSENSITIVITY); + middleData.peaks_multiIndex = DoubleLimit_G(dvctMULTIINDEX); + middleData.peaks_ROIstart = DoubleLimit_G(dvctROISTART); + middleData.peaks_ROIend = DoubleLimit_G(dvctROIEND); + middleData.peaks_tail = DoubleLimit_G(dvctTAIL); + middleData.peaks_tailAlpha = DoubleLimit_G(dvctTAILALPHA); + middleData.peaks_upperTail = DoubleLimit_G(dvctUPPERTAIL); + middleData.peaks_upperTailAlpha = DoubleLimit_G(dvctUPPERTAILALPHA); + middleData.peaks_BWWidthChan = DoubleLimit_G(dvctBWWIDTHCHAN); middleData.peaks_recoilBetaChan = DoubleLimit_G(dvctRECOILBETACHAN); - middleData.peaks_recoilDeltaChan =DoubleLimit_G(dvctRECOILDELTACHAN); - middleData.peaks_stepRatio =DoubleLimit_G(dvctSTEPRAIO); - middleData.peaks_backgroundArea =DoubleLimit_G(dvctBACKGROUNDAREA); - middleData.peaks_meanBackCount =DoubleLimit_G(dvctMEANBACKCOUNT); - middleData.peaks_Lc =DoubleLimit_G(dvctLC); - middleData.peaks_Ld =DoubleLimit_G(dvctLD); + middleData.peaks_recoilDeltaChan = DoubleLimit_G(dvctRECOILDELTACHAN); + middleData.peaks_stepRatio = DoubleLimit_G(dvctSTEPRAIO); + middleData.peaks_backgroundArea = DoubleLimit_G(dvctBACKGROUNDAREA); + middleData.peaks_meanBackCount = DoubleLimit_G(dvctMEANBACKCOUNT); + middleData.peaks_Lc = DoubleLimit_G(dvctLC); + middleData.peaks_Ld = DoubleLimit_G(dvctLD); middleData.peaks_comments = dvctComments; middleData.peaks_Nuclide_name = dvctNuclide_name; } // gards_ nucl_lines_ided数据表 - for(Map.Entry itor:fileAnlyse.getMapNucActMda().entrySet()) { + for (Map.Entry itor : fileAnlyse.getMapNucActMda().entrySet()) { GStoreMiddleProcessDataNuclLinesIded nucl_lines_ided_data = new GStoreMiddleProcessDataNuclLinesIded(); List svctNUCLIDEFULLNAME = new LinkedList<>(); List dvctIDPEAK = new LinkedList<>(); @@ -3680,19 +3890,19 @@ public class GammaFileUtil extends AbstractLogOrReport { List dvctCSC_MOD_FLAG = new LinkedList<>(); List dvctMDC = new LinkedList<>(); List dvctCONCENTRATION = new LinkedList<>(); - int first=itor.getValue().getFullNames().size(); - int second=itor.getValue().getVPeakIdx().size(); - first = first0?String.format("%e", itor.getValue().getMda()):"0.0"); + dvctMDA.add(itor.getValue().getMda() > 0 ? String.format("%e", itor.getValue().getMda()) : "0.0"); // dvctKEY_FLAG.add(itor.value().vYield.get(m)); dvctCSC_RATIO.add(1.0); dvctCSC_RATIO_ERR.add(0.0); dvctCSC_MOD_FLAG.add(0.0); - if(itor.getValue().getKey_flag() == m) { + if (itor.getValue().getKey_flag() == m) { dvctKEY_FLAG.add(1.0); } else { dvctKEY_FLAG.add(0.0); @@ -3716,26 +3926,26 @@ public class GammaFileUtil extends AbstractLogOrReport { dvctCONCENTRATION.add(String.format("%e", itor.getValue().getConcentration())); } nucl_lines_ided_data.nuclideFullname = svctNUCLIDEFULLNAME; - nucl_lines_ided_data.idPeak =dvctIDPEAK; - nucl_lines_ided_data.Energy =DoubleLimit_G(dvctENERGY); - nucl_lines_ided_data.uncEnergy =DoubleLimit_G(dvctUNCENERGY); - nucl_lines_ided_data.Abundance =DoubleLimit_G(dvctABUNDANCE); - nucl_lines_ided_data.uncAbundance =DoubleLimit_G(dvctUNCABUNDANCE); + nucl_lines_ided_data.idPeak = dvctIDPEAK; + nucl_lines_ided_data.Energy = DoubleLimit_G(dvctENERGY); + nucl_lines_ided_data.uncEnergy = DoubleLimit_G(dvctUNCENERGY); + nucl_lines_ided_data.Abundance = DoubleLimit_G(dvctABUNDANCE); + nucl_lines_ided_data.uncAbundance = DoubleLimit_G(dvctUNCABUNDANCE); nucl_lines_ided_data.Activity = dvctACTIVITY; - nucl_lines_ided_data.uncActivity =DoubleLimit_G(dvctUNCACTIVITY); - nucl_lines_ided_data.Effic =DoubleLimit_G(dvctEFFIC); - nucl_lines_ided_data.uncEffic =DoubleLimit_G(dvctUNEFFIC); + nucl_lines_ided_data.uncActivity = DoubleLimit_G(dvctUNCACTIVITY); + nucl_lines_ided_data.Effic = DoubleLimit_G(dvctEFFIC); + nucl_lines_ided_data.uncEffic = DoubleLimit_G(dvctUNEFFIC); nucl_lines_ided_data.Mda = dvctMDA; - nucl_lines_ided_data.key_flag =DoubleLimit_G(dvctKEY_FLAG); - nucl_lines_ided_data.csc_ratio =DoubleLimit_G(dvctCSC_RATIO); - nucl_lines_ided_data.csc_ratio_err =DoubleLimit_G(dvctCSC_RATIO_ERR); - nucl_lines_ided_data.csc_mod_flag =DoubleLimit_G(dvctCSC_MOD_FLAG); + nucl_lines_ided_data.key_flag = DoubleLimit_G(dvctKEY_FLAG); + nucl_lines_ided_data.csc_ratio = DoubleLimit_G(dvctCSC_RATIO); + nucl_lines_ided_data.csc_ratio_err = DoubleLimit_G(dvctCSC_RATIO_ERR); + nucl_lines_ided_data.csc_mod_flag = DoubleLimit_G(dvctCSC_MOD_FLAG); nucl_lines_ided_data.MDC = dvctMDC; nucl_lines_ided_data.Concentration = dvctCONCENTRATION; middleData.getNucl_lines_ided_data().put(itor.getKey(), nucl_lines_ided_data); } // gards_ nucl_ided数据表 - if( fileAnlyse.getMapNucActMda().size() != 0) { + if (fileAnlyse.getMapNucActMda().size() != 0) { List svctNUCLIDEFULLNAME = new LinkedList<>(); List svctTYPE = new LinkedList<>(); List dvctHALFLIFE = new LinkedList<>(); @@ -3753,79 +3963,79 @@ public class GammaFileUtil extends AbstractLogOrReport { List dvctCONCENTRATION = new LinkedList<>(); List dvctKey_Energy = new LinkedList<>(); List dvctKey_Yield = new LinkedList<>(); - for(Map.Entry itor_v: fileAnlyse.getMapNucActMda().entrySet()) { - String nuclideName = itor_v.getKey(); + for (Map.Entry itor_v : fileAnlyse.getMapNucActMda().entrySet()) { + String nuclideName = itor_v.getKey(); svctNUCLIDEFULLNAME.add(nuclideName); dvctHALFLIFE.add(itor_v.getValue().getHalflife()); dvctACTIV_KEY.add(itor_v.getValue().getActivity()); dvctACTIV_KEY_ERR.add(itor_v.getValue().getAct_err()); dvctMDA.add(String.format("%e", itor_v.getValue().getMda())); - dvctMDC.add(Objects.isNull(itor_v.getValue().getMdc())?null:(itor_v.getValue().getMdc().isInfinite()?"inf":(itor_v.getValue().getMdc()>0?String.format("%e", itor_v.getValue().getMdc()):"0.0"))); - dvctCONCENTRATION.add(Objects.isNull(itor_v.getValue().getConcentration())?null:itor_v.getValue().getConcentration().isInfinite()?"inf":String.format("%e", itor_v.getValue().getConcentration())); + dvctMDC.add(Objects.isNull(itor_v.getValue().getMdc()) ? null : (itor_v.getValue().getMdc().isInfinite() ? "inf" : (itor_v.getValue().getMdc() > 0 ? String.format("%e", itor_v.getValue().getMdc()) : "0.0"))); + dvctCONCENTRATION.add(Objects.isNull(itor_v.getValue().getConcentration()) ? null : itor_v.getValue().getConcentration().isInfinite() ? "inf" : String.format("%e", itor_v.getValue().getConcentration())); dvctCSC_RATIO.add(1.0); dvctCSC_RATIO_ERR.add(0.0); - if(itor_v.getValue().getCalculateIdx() >= 0 && itor_v.getValue().getCalculateIdx()= 0 && itor_v.getValue().getCalculateIdx() < itor_v.getValue().getVEnergy().size()) { dvctKey_Energy.add(itor_v.getValue().getVEnergy().get(itor_v.getValue().getCalculateIdx())); } - if(itor_v.getValue().getCalculateIdx() >= 0 && itor_v.getValue().getCalculateIdx()= 0 && itor_v.getValue().getCalculateIdx() < itor_v.getValue().getVYield().size()) { dvctKey_Yield.add(itor_v.getValue().getVYield().get(itor_v.getValue().getCalculateIdx())); } } middleData.nucl_ided_Nuclidename = svctNUCLIDEFULLNAME; - middleData.nucl_ided_Type= svctTYPE; - middleData.nucl_ided_Halflife =DoubleLimit_G(dvctHALFLIFE); + middleData.nucl_ided_Type = svctTYPE; + middleData.nucl_ided_Halflife = DoubleLimit_G(dvctHALFLIFE); middleData.nucl_ided_ave_activ = dvctAVE_ACTIV; - middleData.nucl_ided_ave_activ_err =DoubleLimit_G(dvctAVE_ACTIV_ERR); - middleData.nucl_ided_activ_key =DoubleLimit_G(dvctACTIV_KEY); - middleData.nucl_ided_activ_key_err =DoubleLimit_G(dvctACTIV_KEY_ERR); + middleData.nucl_ided_ave_activ_err = DoubleLimit_G(dvctAVE_ACTIV_ERR); + middleData.nucl_ided_activ_key = DoubleLimit_G(dvctACTIV_KEY); + middleData.nucl_ided_activ_key_err = DoubleLimit_G(dvctACTIV_KEY_ERR); middleData.nucl_ided_mda = dvctMDA; - middleData.nucl_ided_mda_err =DoubleLimit_G(dvctMDA_ERR); - middleData.nucl_ided_nid_flag =DoubleLimit_G(dvctNID_FLAG); - middleData.nucl_ided_csc_ratio =DoubleLimit_G(dvctCSC_RATIO); - middleData.nucl_ided_csc_ratio_err =DoubleLimit_G(dvctCSC_RATIO_ERR); - middleData.nucl_ided_csc_mod_flag =DoubleLimit_G(dvctCSC_MOD_FLAG); + middleData.nucl_ided_mda_err = DoubleLimit_G(dvctMDA_ERR); + middleData.nucl_ided_nid_flag = DoubleLimit_G(dvctNID_FLAG); + middleData.nucl_ided_csc_ratio = DoubleLimit_G(dvctCSC_RATIO); + middleData.nucl_ided_csc_ratio_err = DoubleLimit_G(dvctCSC_RATIO_ERR); + middleData.nucl_ided_csc_mod_flag = DoubleLimit_G(dvctCSC_MOD_FLAG); middleData.nucl_ided_MDC = dvctMDC; middleData.nucl_ided_Concentration = dvctCONCENTRATION; middleData.nucl_ided_Key_Energy = DoubleLimit_G(dvctKey_Energy); middleData.nucl_ided_Key_Yield = DoubleLimit_G(dvctKey_Yield); } // GARDS_QC_CHECK数据表 - if( fileAnlyse.getQcItems().size() != 0) { + if (fileAnlyse.getQcItems().size() != 0) { List qvctQC_NAME = new LinkedList<>(); List dvctQC_VALUE = new LinkedList<>(); List qvctQC_STANDARD = new LinkedList<>(); List dvctQC_RESULT = new LinkedList<>(); - for(Map.Entry itor_q:fileAnlyse.getQcItems().entrySet()) { - String nuclideName = itor_q.getKey(); + for (Map.Entry itor_q : fileAnlyse.getQcItems().entrySet()) { + String nuclideName = itor_q.getKey(); qvctQC_NAME.add(nuclideName); - dvctQC_VALUE.add(Double.isFinite(itor_q.getValue().getValue())?itor_q.getValue().getValue():null); + dvctQC_VALUE.add(Double.isFinite(itor_q.getValue().getValue()) ? itor_q.getValue().getValue() : null); qvctQC_STANDARD.add(itor_q.getValue().getStandard()); - dvctQC_RESULT.add(itor_q.getValue().isBPass()?1.0:0.0); + dvctQC_RESULT.add(itor_q.getValue().isBPass() ? 1.0 : 0.0); } - middleData.QC_CHECK_QC_NAME=qvctQC_NAME; - middleData.QC_CHECK_QC_RESULT=DoubleLimit_G(dvctQC_RESULT); - middleData.QC_CHECK_QC_STANDARD=qvctQC_STANDARD; - middleData.QC_CHECK_QC_VALUE=DoubleLimit_G(dvctQC_VALUE); + middleData.QC_CHECK_QC_NAME = qvctQC_NAME; + middleData.QC_CHECK_QC_RESULT = DoubleLimit_G(dvctQC_RESULT); + middleData.QC_CHECK_QC_STANDARD = qvctQC_STANDARD; + middleData.QC_CHECK_QC_VALUE = DoubleLimit_G(dvctQC_VALUE); } //sample info middleData.sample_collection_start = ""; if (StringUtils.isNotBlank(fileAnlyse.getCollect().getCollection_start_date()) && StringUtils.isNotBlank(fileAnlyse.getCollect().getCollection_start_time())) { - middleData.sample_collection_start = fileAnlyse.getCollect().getCollection_start_date()+StringPool.SPACE+fileAnlyse.getCollect().getCollection_start_time(); + middleData.sample_collection_start = fileAnlyse.getCollect().getCollection_start_date() + StringPool.SPACE + fileAnlyse.getCollect().getCollection_start_time(); } middleData.sample_collection_stop = ""; if (StringUtils.isNotBlank(fileAnlyse.getCollect().getCollection_stop_date()) && StringUtils.isNotBlank(fileAnlyse.getCollect().getCollection_stop_time())) { - middleData.sample_collection_stop = fileAnlyse.getCollect().getCollection_stop_date()+StringPool.SPACE+fileAnlyse.getCollect().getCollection_stop_time(); + middleData.sample_collection_stop = fileAnlyse.getCollect().getCollection_stop_date() + StringPool.SPACE + fileAnlyse.getCollect().getCollection_stop_time(); } - if(Objects.nonNull(fileAnlyse.getQcItems().get("col_time"))) { + if (Objects.nonNull(fileAnlyse.getQcItems().get("col_time"))) { middleData.sample_time = String.format("%.4f", fileAnlyse.getQcItems().get("col_time").getValue()); - if(fileAnlyse.getQcItems().get("col_time").getValue()!=0) { - middleData.sample_Avg_Flow_Rate = String.format("%.5f", fileAnlyse.getCollect().getAir_volume()/fileAnlyse.getQcItems().get("col_time").getValue()); + if (fileAnlyse.getQcItems().get("col_time").getValue() != 0) { + middleData.sample_Avg_Flow_Rate = String.format("%.5f", fileAnlyse.getCollect().getAir_volume() / fileAnlyse.getQcItems().get("col_time").getValue()); } } - if(Objects.nonNull(fileAnlyse.getQcItems().get("decay_time"))) { + if (Objects.nonNull(fileAnlyse.getQcItems().get("decay_time"))) { middleData.sample_decay_time = String.format("%.5f", fileAnlyse.getQcItems().get("decay_time").getValue()); } - if(Objects.nonNull(fileAnlyse.getQcItems().get("acq_time"))) { + if (Objects.nonNull(fileAnlyse.getQcItems().get("acq_time"))) { middleData.sample_acquistion_time = String.format("%.5f", fileAnlyse.getQcItems().get("acq_time").getValue()); } middleData.sample_quantity = String.format("%.4f", fileAnlyse.getCollect().getAir_volume()); @@ -3833,56 +4043,53 @@ public class GammaFileUtil extends AbstractLogOrReport { Date dataTime = null; middleData.sample_acquistion_stop = ""; if (StringUtils.isNotBlank(fileAnlyse.getAcq().getAcquisition_start_date()) && StringUtils.isNotBlank(fileAnlyse.getAcq().getAcquisition_start_time())) { - middleData.sample_acquisiton_start = fileAnlyse.getAcq().getAcquisition_start_date()+StringPool.SPACE+fileAnlyse.getAcq().getAcquisition_start_time(); + middleData.sample_acquisiton_start = fileAnlyse.getAcq().getAcquisition_start_date() + StringPool.SPACE + fileAnlyse.getAcq().getAcquisition_start_time(); dataTime = DateUtils.parseDate(middleData.sample_acquisiton_start); - middleData.sample_acquistion_stop = DateUtils.formatDate(new Date((long) (dataTime.getTime() + fileAnlyse.getAcq().getAcquisition_real_time()*1000)), "yyyy/MM/dd HH:mm:ss"); + middleData.sample_acquistion_stop = DateUtils.formatDate(new Date((long) (dataTime.getTime() + fileAnlyse.getAcq().getAcquisition_real_time() * 1000)), "yyyy/MM/dd HH:mm:ss"); } - middleData.sample_acquistion_time = String.format("%.2f", fileAnlyse.getAcq().getAcquisition_real_time()) ; + middleData.sample_acquistion_time = String.format("%.2f", fileAnlyse.getAcq().getAcquisition_real_time()); middleData.sample_stationID = fileAnlyse.getHeader().getSite_code(); middleData.sample_detectID = fileAnlyse.getHeader().getDetector_code(); middleData.sample_Geometry = fileAnlyse.getHeader().getSample_geometry(); middleData.sample_Type = fileAnlyse.getHeader().getSystem_type(); middleData.setting_specSetup = fileAnlyse.getUsedSetting(); - middleData.Collection_Station_Comments = StringUtils.isNotBlank(fileAnlyse.getOriTotalCmt())?fileAnlyse.getOriTotalCmt():""; - middleData.NDC_Analysis_General_Comments = StringUtils.isNotBlank(fileAnlyse.getTotalCmt())?fileAnlyse.getTotalCmt():""; + middleData.Collection_Station_Comments = StringUtils.isNotBlank(fileAnlyse.getOriTotalCmt()) ? fileAnlyse.getOriTotalCmt() : ""; + middleData.NDC_Analysis_General_Comments = StringUtils.isNotBlank(fileAnlyse.getTotalCmt()) ? fileAnlyse.getTotalCmt() : ""; return bRet; } - public Map UpdateDatasNuclideActivity(Map mapNucAct, Date act_ref, Date con_ref) { - Map map = new HashMap<>(); + public Map UpdateDatasNuclideActivity(Map mapNucAct, Date act_ref, Date con_ref) { + Map map = new HashMap<>(); map.put("dateTime_act_ref", act_ref); map.put("dateTime_con_ref", con_ref); //m_mapAct = mapNucAct; int size_map = mapNucAct.size(); - if(size_map < 1){ + if (size_map < 1) { return map; } List nuclideActivityList = new LinkedList<>(); - for(Map.Entry iter:mapNucAct.entrySet()){ + for (Map.Entry iter : mapNucAct.entrySet()) { TableNuclideActivity tableNuclideActivity = new TableNuclideActivity(); NuclideActMda nuc = iter.getValue(); tableNuclideActivity.setNuclide(iter.getKey()); char units = 'S'; double halflife = nuc.getHalflife(); - if(halflife >= 31556736) // 1年 = 365.24 * 24 * 60 * 60 = 31556736s + if (halflife >= 31556736) // 1年 = 365.24 * 24 * 60 * 60 = 31556736s { halflife /= 31556736; units = 'A'; - } - else if(halflife >= 86400) // 1天 = 24 * 60 * 60 = 86400s + } else if (halflife >= 86400) // 1天 = 24 * 60 * 60 = 86400s { halflife /= 86400; units = 'D'; - } - else if(halflife >= 3600) - { + } else if (halflife >= 3600) { halflife /= 3600; units = 'H'; } - tableNuclideActivity.setHalfLife(NumberFormatUtil.numberFormat(String.valueOf(halflife))+StringPool.SPACE+units); + tableNuclideActivity.setHalfLife(NumberFormatUtil.numberFormat(String.valueOf(halflife)) + StringPool.SPACE + units); tableNuclideActivity.setEnergy(NumberFormatUtil.numberFormat(String.valueOf(nuc.getVEnergy().get(nuc.getCalculateIdx())))); - tableNuclideActivity.setYield(NumberFormatUtil.numberFormat(String.valueOf(nuc.getVYield().get(nuc.getCalculateIdx())*100))); + tableNuclideActivity.setYield(NumberFormatUtil.numberFormat(String.valueOf(nuc.getVYield().get(nuc.getCalculateIdx()) * 100))); String str_effi = (nuc.getEfficiency() <= 0 ? "null" : NumberFormatUtil.numberFormat(String.valueOf(nuc.getEfficiency()))); tableNuclideActivity.setEfficiency(str_effi); @@ -3895,9 +4102,9 @@ public class GammaFileUtil extends AbstractLogOrReport { String str_mda = (nuc.getMda() <= 0 ? "null" : NumberFormatUtil.numberFormat(String.valueOf(nuc.getMda()))); tableNuclideActivity.setMda(str_mda); - String str_con = (Objects.nonNull(nuc.getConcentration())?(Double.isFinite(nuc.getConcentration())? (nuc.getConcentration() <= 0 ? "null" : NumberFormatUtil.numberFormat(String.valueOf(nuc.getConcentration()))) : (Double.isInfinite(nuc.getConcentration())? "inf": "nan")):"null"); + String str_con = (Objects.nonNull(nuc.getConcentration()) ? (Double.isFinite(nuc.getConcentration()) ? (nuc.getConcentration() <= 0 ? "null" : NumberFormatUtil.numberFormat(String.valueOf(nuc.getConcentration()))) : (Double.isInfinite(nuc.getConcentration()) ? "inf" : "nan")) : "null"); tableNuclideActivity.setConc(str_con); - String str_mdc = (Objects.nonNull(nuc.getMdc())?(Double.isFinite(nuc.getMdc())? (nuc.getMdc() <= 0 ? "null" : NumberFormatUtil.numberFormat(String.valueOf(nuc.getMdc()))) : (Double.isInfinite(nuc.getMdc())? "inf" : "nan")):"null"); + String str_mdc = (Objects.nonNull(nuc.getMdc()) ? (Double.isFinite(nuc.getMdc()) ? (nuc.getMdc() <= 0 ? "null" : NumberFormatUtil.numberFormat(String.valueOf(nuc.getMdc()))) : (Double.isInfinite(nuc.getMdc()) ? "inf" : "nan")) : "null"); tableNuclideActivity.setMdc(str_mdc); nuclideActivityList.add(tableNuclideActivity); } @@ -3909,8 +4116,8 @@ public class GammaFileUtil extends AbstractLogOrReport { public String RightFill(String str, int fieldWidth) { String fillChar = StringPool.SPACE; int fillNum = fieldWidth - str.length(); - while(fillNum > 0) { - str+=fillChar; + while (fillNum > 0) { + str += fillChar; --fillNum; } return str; @@ -3920,10 +4127,10 @@ public class GammaFileUtil extends AbstractLogOrReport { // 算法描述:取指定点附近的两点,根据 y=ax+b 方程求指定点处的能量 double y = 0.0; long m_nCount = phd.getSpec().getNum_g_channel(); - int index = channel > 0 ? channel-1 : channel; // 确保索引大于等于0 - if(phd.getVEnergy().size() == m_nCount && index < m_nCount) // 确保索引有效 + int index = channel > 0 ? channel - 1 : channel; // 确保索引大于等于0 + if (phd.getVEnergy().size() == m_nCount && index < m_nCount) // 确保索引有效 { - int index2 = (index < m_nCount-1 ? index + 1 : index - 1); + int index2 = (index < m_nCount - 1 ? index + 1 : index - 1); double y1 = phd.getVEnergy().get(index); double y2 = phd.getVEnergy().get(index2); y = y1 + (y2 - y1) / (index2 - index) * (channel - index); @@ -3933,14 +4140,14 @@ public class GammaFileUtil extends AbstractLogOrReport { public void InitChart(List nuclideTableList, PHDFile phd, Map map, Map colorMap) { List> chartList = new LinkedList<>(); - for (int i=0; i < nuclideTableList.size(); i++){ + for (int i = 0; i < nuclideTableList.size(); i++) { Map chartMap = new HashMap<>(); GardsNuclLinesLib item = nuclideTableList.get(i); double energy = item.getEnergy(); List chartData = Energy_Count_Base(energy, 30, phd, colorMap); - String title = "Line" + (i+1); + String title = "Line" + (i + 1); String bottom = "Abundance:" + item.getYield(); - String selPos = energy+""; + String selPos = energy + ""; String cursorText = energy + " keV"; chartMap.put("chartData", chartData); chartMap.put("title", title); @@ -3955,11 +4162,11 @@ public class GammaFileUtil extends AbstractLogOrReport { public List Energy_Count_Base(double energy, int chanNum, PHDFile phd, Map colorMap) { List datalist = new LinkedList<>(); int channel = GetChannelByEnergy(energy, 0, phd); - int start = channel-chanNum/2, end = channel+chanNum/2; - if(start < 1) { + int start = channel - chanNum / 2, end = channel + chanNum / 2; + if (start < 1) { start = 1; end = start + chanNum; - } else if(end > phd.getSpec().getNum_g_channel()) { + } else if (end > phd.getSpec().getNum_g_channel()) { end = (int) phd.getSpec().getNum_g_channel(); start = end - chanNum; } @@ -3970,14 +4177,14 @@ public class GammaFileUtil extends AbstractLogOrReport { public ChartData Energy_CountChart(int start, int end, PHDFile phd, String color) { ChartData data1 = new ChartData(); - if(phd.getSpec().getNum_g_channel() > 1 && phd.getVEnergy().size() == phd.getSpec().getNum_g_channel()) { - if(start < 1){ + if (phd.getSpec().getNum_g_channel() > 1 && phd.getVEnergy().size() == phd.getSpec().getNum_g_channel()) { + if (start < 1) { start = 1; } - if(end < 1 || end > phd.getSpec().getNum_g_channel()){ + if (end < 1 || end > phd.getSpec().getNum_g_channel()) { end = (int) phd.getSpec().getNum_g_channel(); } - for(int i=start-1; i 1 && phd.getVEnergy().size() == phd.getSpec().getNum_g_channel() && phd.getVBase().size() == phd.getSpec().getNum_g_channel()) { - if(start < 1){ + if (phd.getSpec().getNum_g_channel() > 1 && phd.getVEnergy().size() == phd.getSpec().getNum_g_channel() && phd.getVBase().size() == phd.getSpec().getNum_g_channel()) { + if (start < 1) { start = 1; } - if(end > phd.getSpec().getNum_g_channel() || end < 1){ + if (end > phd.getSpec().getNum_g_channel() || end < 1) { 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)){ + if (phd.getVEnergy().get(i) >= energy) { + if (phd.getVEnergy().get(i) - energy > energy - phd.getVEnergy().get(i - 1)) { channel = i; // 道在索引(i-1)处 - } else{ - channel = i+1; // 道在索引(i)处 + } else { + channel = i + 1; // 道在索引(i)处 } break; } @@ -4063,7 +4270,7 @@ public class GammaFileUtil extends AbstractLogOrReport { List vFwhmCh = new LinkedList<>(); List vTail = new LinkedList<>(); List vUpperTail = new LinkedList<>(); - for (PeakInfo peak: phd.getVPeak()) { + for (PeakInfo peak : phd.getVPeak()) { vCentroid.add(peak.peakCentroid); vFwhmCh.add(peak.fwhmc); vTail.add(peak.tail); @@ -4073,7 +4280,7 @@ public class GammaFileUtil extends AbstractLogOrReport { StructInsertOutput structInsertOutput = CalValuesHandler.ComputePeakRange(phd.getVPeak().size(), (int) phd.getSpec().getNum_g_channel(), vCentroid, vFwhmCh, vTail, vUpperTail); if (CollectionUtils.isNotEmpty(structInsertOutput.vLeft) && CollectionUtils.isNotEmpty(structInsertOutput.vRight) && CollectionUtils.isNotEmpty(structInsertOutput.multiIndex)) { - for (int i=0; i vPeak, int channel, boolean bFind) { boolean t_bFind = false; - int i=0, peakNum = vPeak.size(); - for(; i= peak.left && channel <= peak.right) { + if (channel >= peak.left && channel <= peak.right) { // 如果 channel 在峰的左右边界内 - if(peak.multiIndex > 0 && channel > peak.peakCentroid) { + if (peak.multiIndex > 0 && channel > peak.peakCentroid) { // 如果是重峰,且 channel 在重峰的第一个峰的中心道右侧 int j = i; double temp = channel - peak.peakCentroid; - while(++j < peakNum && vPeak.get(j).multiIndex == peak.multiIndex) { + while (++j < peakNum && vPeak.get(j).multiIndex == peak.multiIndex) { // 找出重峰中峰中心道离 channel 最近的峰 - if(Math.abs(vPeak.get(j).peakCentroid - channel) < temp) { + if (Math.abs(vPeak.get(j).peakCentroid - channel) < temp) { temp = Math.abs(vPeak.get(j).peakCentroid - channel); i = j; } @@ -4104,14 +4311,14 @@ public class GammaFileUtil extends AbstractLogOrReport { // channel 在索引(i)对应的峰内 t_bFind = true; break; - } else if(peak.left > channel) { + } else if (peak.left > channel) { // channel 不在任何峰内,找离它最近的峰 - if(i>0 && channel-vPeak.get(i-1).peakCentroid < peak.peakCentroid-channel) i -= 1; + if (i > 0 && channel - vPeak.get(i - 1).peakCentroid < peak.peakCentroid - channel) i -= 1; break; } } - if(i >= peakNum) i -= 1; - if(bFind) { + if (i >= peakNum) i -= 1; + if (bFind) { bFind = t_bFind; } return i; @@ -4119,7 +4326,7 @@ public class GammaFileUtil extends AbstractLogOrReport { public List InitPeakTable(List vPeak) { //遍历vPeak - for (PeakInfo info:vPeak) { + for (PeakInfo info : vPeak) { if (Objects.isNull(info.recoilBetaChan)) { info.recoilBetaChan = "nan"; } @@ -4128,9 +4335,9 @@ public class GammaFileUtil extends AbstractLogOrReport { } } List result = new LinkedList<>(); - for(int i=0; i vPeakIdx, Double energyTolerance) { - if(lines.halflife <= 0) { + if (lines.halflife <= 0) { return; } // 过滤核素能量小于ECutAnalysis_Low的射线 @@ -4181,40 +4388,40 @@ public class GammaFileUtil extends AbstractLogOrReport { int mainPeakIdx = -1; // 记录核素主γ峰的索引下标 NuclideActMda ActMda = new NuclideActMda(); - ActMda.setHalflife(Objects.isNull(mapHalflife.get(nucName))?lines.halflife : mapHalflife.get(nucName)); - for (int i=0, j=0; i vPeak = phd.getVPeak(); - if(vEnergy.get(i) < energy - energyWidth) { + if (vEnergy.get(i) < energy - energyWidth) { break; - } else if(vEnergy.get(i) <= energy + energyWidth) { + } else if (vEnergy.get(i) <= energy + energyWidth) { ActMda.getVEnergy().add(vEnergy.get(i)); ActMda.getVUncertE().add(lines.vuncertE.get(i)); ActMda.getVYield().add(lines.vyield.get(i)); ActMda.getVUncertY().add(lines.vuncertY.get(i)); ActMda.getFullNames().add(lines.fullNames.get(i)); - ActMda.getVPeakIdx().add(vPeakIdx.get(j)+1); - if(lines.key_flag == i) { - ActMda.setKey_flag(ActMda.getVEnergy().size()-1); + ActMda.getVPeakIdx().add(vPeakIdx.get(j) + 1); + if (lines.key_flag == i) { + ActMda.setKey_flag(ActMda.getVEnergy().size() - 1); } break; } } } - for(int i=0; i maxYield) { + for (int i = 0; i < ActMda.getVYield().size(); i++) { + if (ActMda.getVYield().get(i) > maxYield) { maxYield = ActMda.getVYield().get(i); - mainPeakIdx = ActMda.getVPeakIdx().get(i)-1; + mainPeakIdx = ActMda.getVPeakIdx().get(i) - 1; ActMda.setCalculateIdx(i); } } - if(mainPeakIdx < 0) { + if (mainPeakIdx < 0) { return; } // 如果该核素属特殊核素,则用“特殊核素配置文件”中指明的其他核素的半衰期 - double halflife = Objects.isNull(mapHalflife.get(nucName))?lines.halflife : mapHalflife.get(nucName); + double halflife = Objects.isNull(mapHalflife.get(nucName)) ? lines.halflife : mapHalflife.get(nucName); double lambda = Math.log(2.0) / halflife; CalculateMDCs(phd, ActMda, mainPeakIdx, lambda, maxYield, 1.0); @@ -4225,54 +4432,54 @@ public class GammaFileUtil extends AbstractLogOrReport { public void ReCalcMdaMdc(PHDFile phd, String nuclide, int removePeakIdx) { NuclideActMda it = phd.getMapNucActMda().get(nuclide); - if(Objects.isNull(it)) { + if (Objects.isNull(it)) { return; } NuclideActMda nuc = it; // 如果该核素只与一个峰对应则直接删除该核素的 MDA 信息 - if(nuc.getVPeakIdx().size() == 1) { + if (nuc.getVPeakIdx().size() == 1) { phd.getMapNucActMda().remove(nuclide); return; } // 否则删除该核素与该峰所有关联的射线信息 boolean needReCalc = false; - for(int i=nuc.getVPeakIdx().size()-1; i>=0; i--) { + for (int i = nuc.getVPeakIdx().size() - 1; i >= 0; i--) { //判断当前下标对应的核素下标是否是需要删除的下标 - if(nuc.getVPeakIdx().get(i) == removePeakIdx) { + if (nuc.getVPeakIdx().get(i) == removePeakIdx) { nuc.getVEnergy().remove(i); nuc.getVUncertE().remove(i); nuc.getVYield().remove(i); nuc.getVUncertY().remove(i); nuc.getFullNames().remove(i); //判断主峰核素下标是否与当前下标一致 且 BCalculateMDA是true - if(nuc.getCalculateIdx() == i && nuc.isBCalculateMDA()) { + if (nuc.getCalculateIdx() == i && nuc.isBCalculateMDA()) { needReCalc = true; } - nuc.setCalculateIdx(nuc.getVEnergy().size()-1); + nuc.setCalculateIdx(nuc.getVEnergy().size() - 1); nuc.getVPeakIdx().remove(i); } } // 如果该核素只与一个峰对应则直接删除该核素的 MDA 信息 - if(nuc.getVPeakIdx().size() < 1) { + if (nuc.getVPeakIdx().size() < 1) { phd.getMapNucActMda().remove(nuclide); return; } - if(needReCalc) { + if (needReCalc) { double maxYield = 0; int mainPeakIdx = -1; - for(int j=0; j maxYield) { + for (int j = 0; j < nuc.getVYield().size(); j++) { + if (nuc.getVYield().get(j) > maxYield) { nuc.setCalculateIdx(j); maxYield = nuc.getVYield().get(j); - mainPeakIdx = nuc.getVPeakIdx().get(j)-1; + mainPeakIdx = nuc.getVPeakIdx().get(j) - 1; } } - if(mainPeakIdx < 0) { + if (mainPeakIdx < 0) { return; } - CalculateMDCs(phd, nuc, mainPeakIdx, Math.log(2.0)/nuc.getHalflife(), maxYield, 1.0); + CalculateMDCs(phd, nuc, mainPeakIdx, Math.log(2.0) / nuc.getHalflife(), maxYield, 1.0); } } @@ -4296,26 +4503,26 @@ public class GammaFileUtil extends AbstractLogOrReport { public List CompareData(List m_vecCompare, long m_nCount, Map colorMap, List vEnergy) { List datalist = new LinkedList<>(); int size = m_vecCompare.size(); - if(size == m_nCount) { + if (size == m_nCount) { ChartData data1 = new ChartData(); data1.setName("Compare"); data1.setGroup("channel"); data1.setColor(colorMap.get("Color_Compare")); // Compare two Spectrum in Channel - for(int i=0; i ReferenceData(List m_vecCompare, long m_nCount, Map colorMap, List vEnergy) { List datalist = new LinkedList<>(); int size = m_vecCompare.size(); - if(size == m_nCount) { + if (size == m_nCount) { ChartData data1 = new ChartData(); data1.setName("Compare"); data1.setGroup("channel"); data1.setColor(colorMap.get("Color_Reference")); // Compare two Spectrum in Channel - for(int i=0; i StripData(List m_vecCompare, List m_vCount, long m_nCount, Map colorMap, List vEnergy, Double ratioRate) { List datalist = new LinkedList<>(); int size = m_vecCompare.size(); - if(size == m_nCount) { + if (size == m_nCount) { ChartData data1 = new ChartData(); data1.setName("Compare"); data1.setGroup("channel"); - if (ratioRate<0) { + if (ratioRate < 0) { data1.setColor(colorMap.get("Color_SpecCut")); } else { data1.setColor(colorMap.get("Color_SpecSum")); } // type: 1 Add a Spectrum in Channel; -1 Cut a Spectrum in Channel - for(int i=0; i 0) { + if (phd.getProcess().getSample_volume_of_Xe() > 0) { spectrum.append("#Processing"); spectrum.append(System.lineSeparator()); String processing = "%s %s"; @@ -4548,7 +4755,7 @@ public class GammaFileUtil extends AbstractLogOrReport { } // #Sample - if(phd.getSampleBlock().getDimension_1() > 0) { + if (phd.getSampleBlock().getDimension_1() > 0) { spectrum.append("#Sample"); //换行 spectrum.append(System.lineSeparator()); @@ -4561,7 +4768,7 @@ public class GammaFileUtil extends AbstractLogOrReport { // Certificate CertificateBlock phdCertificate = phd.getCertificate(); if (Objects.nonNull(phdCertificate)) { - if(CollectionUtils.isNotEmpty(phd.getCertificate().getG_energy())) { + if (CollectionUtils.isNotEmpty(phd.getCertificate().getG_energy())) { spectrum.append("#Certificate"); //换行 spectrum.append(System.lineSeparator()); @@ -4572,7 +4779,7 @@ public class GammaFileUtil extends AbstractLogOrReport { //换行 spectrum.append(System.lineSeparator()); String certificate = "%-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s"; - for(int i=0; i 0) { + if (g_totE.getG_energy().size() > 0) { spectrum.append("#TotalEff"); //换行 spectrum.append(System.lineSeparator()); - for(int i=0; i CreateShapeCP(BaseControls baseControls) { List shapes = new LinkedList<>(); - for(int i=0; i mdcInfoMap, Map nuclideLinesMap) { //遍历峰核素信息 - for (Map.Entry entry: nuclideLinesMap.entrySet()) { + for (Map.Entry entry : nuclideLinesMap.entrySet()) { //获取核素名称 String nuclideName = entry.getKey(); NuclideLines nuclideLines = entry.getValue(); @@ -4773,11 +4980,11 @@ public class GammaFileUtil extends AbstractLogOrReport { int funId = phd.getEfficiencyParam().get(0).intValue(); int p_size = phd.getEfficiencyParam().size() - 1; int e_size = phd.getEfficiencyEnergy().size(); - switch(funId) { + switch (funId) { case 1: // Interpolation: y=yi+(y(i+1)-yi)*(x-xi)/(x(i+1)-xi) for xi<=x= 4) { + if (p_size == 2 * e_size && p_size >= 4) { List effList = CalValuesHandler.calFcnEval(nuclideLines.venergy, phd.getEfficiencyParam()).counts; - for (int j=0; j= 2) { - for (int j=0; j= 2) { + for (int j = 0; j < nuclideLines.fullNames.size(); j++) { //获取峰核素能量值 Double energy = nuclideLines.venergy.get(j); Double yield = nuclideLines.vyield.get(j); @@ -4838,12 +5045,12 @@ public class GammaFileUtil extends AbstractLogOrReport { paramB = 0; } double param = paramA + paramB; - for(int i=3; i<=p_size; i++) { - double paramC = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i)))) * Math.pow(Math.log(energy), (i -1)); + for (int i = 3; i <= p_size; i++) { + double paramC = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i)))) * Math.pow(Math.log(energy), (i - 1)); if (Double.isNaN(paramC)) { paramC = 0; } - param+=paramC; + param += paramC; } double eff = Math.pow(Math.E, param); if (Double.isFinite(eff)) { @@ -4855,9 +5062,9 @@ public class GammaFileUtil extends AbstractLogOrReport { } break; 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) { + if (p_size >= 3) { List effList = CalValuesHandler.calFcnEval(nuclideLines.venergy, phd.getEfficiencyParam()).counts; - for (int j=0; j hCounts = struct.h_counts; List histogramDataList = new LinkedList<>(); List histogramDataDList = new LinkedList<>(); - for (int i=0; i 0){ + if (count > 0) { HistogramData his = new HistogramData(); his.setG(i); his.setB(j); his.setC(count); histogramDataList.add(his); histogramDataDList.add(his); - }else { + } else { HistogramData his = new HistogramData(); his.setG(i); his.setB(j); @@ -135,7 +137,7 @@ public class PHDFileUtil extends AbstractLogOrReport { long numGChannel = struct.num_g_channel; List gCounts = struct.g_counts; List gammaOriginalSeriseData = new LinkedList<>(); - for (int i=0; i gammaProjectedData = new LinkedList<>(); - for (int i=0; i gammaProjectedSeriseData = new LinkedList<>(); - for (int i=0; i gammaFittingPara = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel, gEnergy); List gammaFittingParaStr = new LinkedList<>(); - for (Double para:gammaFittingPara) { + for (Double para : gammaFittingPara) { gammaFittingParaStr.add(String.valueOf(para)); } //E to C List gammaFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gEnergy, gCentroidChannel); List gammaFittingParaToUiStr = new LinkedList<>(); - for (Double para:gammaFittingParaToUi) { + for (Double para : gammaFittingParaToUi) { gammaFittingParaToUiStr.add(String.valueOf(para)); } betaDataFile.setGammaFittingParaOld(gammaFittingParaStr); betaDataFile.setGammaFittingParaToUiOld(gammaFittingParaToUiStr); List gammaParam = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel, gEnergy); List gchannels = new ArrayList<>(); - for (int i=0; i gammaEnergy = EnergySpectrumHandler.GetFileFittingData(gchannels, gammaParam); @@ -192,7 +194,7 @@ public class PHDFileUtil extends AbstractLogOrReport { long numBChannel = struct.num_b_channel; List bCounts = struct.b_counts; List betaOriginalSeriseData = new LinkedList<>(); - for (int i=0; i betaProjectedData = new LinkedList<>(); - for (int j=0; j betaProjectedSeriseData = new LinkedList<>(); - for (int i=0; i betaFittingPara = EnergySpectrumHandler.GetFileFittingPara(bChannel, bElectronEnergy); List betaFittingParaStr = new LinkedList<>(); - for (Double para:betaFittingPara) { + for (Double para : betaFittingPara) { betaFittingParaStr.add(String.valueOf(para)); } //E to C List betaFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(bElectronEnergy, bChannel); List betaFittingParaToUiStr = new LinkedList<>(); - for (Double para:betaFittingParaToUi) { + for (Double para : betaFittingParaToUi) { betaFittingParaToUiStr.add(String.valueOf(para)); } betaDataFile.setBetaFittingParaOld(betaFittingParaStr); betaDataFile.setBetaFittingParaToUiOld(betaFittingParaToUiStr); List betaParam = EnergySpectrumHandler.GetFileFittingPara(bChannel, bElectronEnergy); List bchannels = new ArrayList<>(); - for (int i=0; i betaEnergy = EnergySpectrumHandler.GetFileFittingData(bchannels, betaParam); @@ -264,7 +265,7 @@ public class PHDFileUtil extends AbstractLogOrReport { List roiBBoundaryStop = bgBoundary.ROI_B_Boundary_stop; List roiGBoundaryStart = bgBoundary.ROI_G_Boundary_start; List roiGBoundaryStop = bgBoundary.ROI_G_Boundary_stop; - for (int i=0; i sampleRoiChannel, Map map) { List boundaryList = new LinkedList<>(); - for (int i=0; i> gammaNewEnergyList = new LinkedList<>(); List> betaNewEnergyList = new LinkedList<>(); //填充道值数组的数据 - for (int i=0; i<255; i++) { + for (int i = 0; i < 255; i++) { channels.add(Double.valueOf(i)); } //过滤出Gamma对应的表单数据 @@ -359,9 +360,9 @@ public class PHDFileUtil extends AbstractLogOrReport { //计算gamma对应的数据 List gammaFittingPara = EnergySpectrumHandler.GetFileFittingPara(gammaChannelList, gammaEnergyList); //计算道值的能量 - List gammaEnergys = EnergySpectrumHandler.GetFileFittingData(channels,gammaFittingPara); + List gammaEnergys = EnergySpectrumHandler.GetFileFittingData(channels, gammaFittingPara); //将新计算的能量封装到数组 - for (Double calEnergy:gammaEnergys) { + for (Double calEnergy : gammaEnergys) { List newEnergy = new LinkedList<>(); newEnergy.add(calEnergy); gammaNewEnergyList.add(newEnergy); @@ -375,9 +376,9 @@ public class PHDFileUtil extends AbstractLogOrReport { List betaFittingPara = EnergySpectrumHandler.GetFileFittingPara(betaChannelList, betaEnergyList); //计算道值的能量 - List betaEnergys = EnergySpectrumHandler.GetFileFittingData(channels,betaFittingPara); + List betaEnergys = EnergySpectrumHandler.GetFileFittingData(channels, betaFittingPara); //将新计算的能量封装到数组 - for (Double calEnergy:betaEnergys) { + for (Double calEnergy : betaEnergys) { List newEnergy = new LinkedList<>(); newEnergy.add(calEnergy); betaNewEnergyList.add(newEnergy); @@ -395,9 +396,9 @@ public class PHDFileUtil extends AbstractLogOrReport { } } - public void createBgCalPara(BetaDataFile betaDataFile, List gammaCalibrationSpectrumList,List betaCalibrationSpectrumList, - List gammaCalibrationPairsList,List betaCalibrationPairsList) { - SpectrumGroup spectrum_group = new SpectrumGroup(); + public void createBgCalPara(BetaDataFile betaDataFile, List gammaCalibrationSpectrumList, List betaCalibrationSpectrumList, + List gammaCalibrationPairsList, List betaCalibrationPairsList) { + SpectrumGroup spectrum_group = new SpectrumGroup(); //我需要根据 calibration页面对应的数组 及 公式判断是否有勾选sample det gas 这四个文件的操作 //gammaCalibrationSpectrumList存储的是gamma对应的公式数据 //betaCalibrationSpectrumList存储的是beta对应的公式数据 @@ -422,7 +423,7 @@ public class PHDFileUtil extends AbstractLogOrReport { List bChannel = struct.b_channel; List bElectronEnergy = struct.b_electron_energy; //比较四组表单数据 - if ( !gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy) ) { + if (!gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy)) { //将公式参数放入到重新计算的参数内 List newFittingPara = EnergySpectrumHandler.GetFileFittingPara(gammaChannelList, gammaEnergyList); //计算E to C公式参数 @@ -444,7 +445,7 @@ public class PHDFileUtil extends AbstractLogOrReport { gc2e.add(Double.valueOf(sampleGammaCalibrationList.get(0).getCoeff3())); spectrum_group.g_c2e = gc2e; //将新的道值对应能量值参数存储 - for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(betaEnergyList, betaChannelList); @@ -476,7 +477,7 @@ public class PHDFileUtil extends AbstractLogOrReport { bc2e.add(Double.valueOf(sampleBetaCalibrationList.get(0).getCoeff3())); spectrum_group.b_c2e = bc2e; //将新的道值对应能量值参数存储 - for (int i=0; i bChannel = struct.b_channel; List bElectronEnergy = struct.b_electron_energy; //比较gamma部分表单数据 - if ( !gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy) ) { + if (!gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy)) { //将公式参数放入到重新计算的参数内 //计算E to C公式参数 List newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gammaEnergyList, gammaChannelList); @@ -528,7 +529,7 @@ public class PHDFileUtil extends AbstractLogOrReport { gc2e.add(Double.valueOf(gasGammaCalibrationList.get(0).getCoeff3())); spectrum_group.g_c2e = gc2e; //将新的道值对应能量值参数存储 - for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(betaEnergyList, betaChannelList); List beCal = new LinkedList<>(); @@ -559,7 +560,7 @@ public class PHDFileUtil extends AbstractLogOrReport { bc2e.add(Double.valueOf(gasBetaCalibrationList.get(0).getCoeff3())); spectrum_group.b_c2e = bc2e; //将新的道值对应能量值参数存储 - for (int i=0; i bChannel = struct.b_channel; List bElectronEnergy = struct.b_electron_energy; //比较四组表单数据 - if ( !gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy) ) { + if (!gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy)) { //计算E to C公式参数 List newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gammaEnergyList, gammaChannelList); List geCal = new LinkedList<>(); @@ -609,7 +610,7 @@ public class PHDFileUtil extends AbstractLogOrReport { gc2e.add(Double.valueOf(detGammaCalibrationList.get(0).getCoeff3())); spectrum_group.g_c2e = gc2e; //将新的道值对应能量值参数存储 - for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(betaEnergyList, betaChannelList); //将公式参数放入到重新计算的参数内 @@ -640,7 +641,7 @@ public class PHDFileUtil extends AbstractLogOrReport { bc2e.add(Double.valueOf(detBetaCalibrationList.get(0).getCoeff3())); spectrum_group.b_c2e = bc2e; //将新的道值对应能量值参数存储 - for (int i=0; i sampleMap, Map gasBgMap, Map detBgMap, Map qcMap) { - SpectrumData sampleSpectrumData = (SpectrumData)sampleMap.get("spectrumData"); - SpectrumData gasBgSpectrumData = (SpectrumData)gasBgMap.get("spectrumData"); - SpectrumData detBgSpectrumData = (SpectrumData)detBgMap.get("spectrumData"); + SpectrumData sampleSpectrumData = (SpectrumData) sampleMap.get("spectrumData"); + SpectrumData gasBgSpectrumData = (SpectrumData) gasBgMap.get("spectrumData"); + SpectrumData detBgSpectrumData = (SpectrumData) detBgMap.get("spectrumData"); //灯颜色 Sections sections = new Sections(); List airVolumeSections = sections.getAirVolumeSections(); @@ -678,7 +679,7 @@ public class PHDFileUtil extends AbstractLogOrReport { List acquisitionTimeSections = sections.getAcquisitionTimeSections(); List xeVolumeSections = sections.getXeVolumeSections(); double airVolume = Double.parseDouble(sampleSpectrumData.getAirVolume()); - if (Objects.nonNull(airVolume)){ + if (Objects.nonNull(airVolume)) { // air volume check if (airVolumeSections.get(0) < airVolume && airVolume <= airVolumeSections.get(1)) { // red sampleMap.put("SampleVolumeBtn", "RedLight"); @@ -698,9 +699,9 @@ public class PHDFileUtil extends AbstractLogOrReport { } } String collectionTime = sampleSpectrumData.getCollectionTime(); - if (StringUtils.isNotBlank(collectionTime)){ + if (StringUtils.isNotBlank(collectionTime)) { double collection_time = Double.parseDouble(collectionTime); - collection_time = collection_time/3600; + collection_time = collection_time / 3600; // collection time check if (collectionTimeSections.get(0) < collection_time && collection_time <= collectionTimeSections.get(1)) { // red sampleMap.put("CollectTimeBtn", "RedLight"); @@ -730,8 +731,8 @@ public class PHDFileUtil extends AbstractLogOrReport { } } double acquisitionLiveTime = Double.parseDouble(sampleSpectrumData.getAcquisitionLiveTime()); - if (Objects.nonNull(acquisitionLiveTime)){ - acquisitionLiveTime = acquisitionLiveTime/3600; + if (Objects.nonNull(acquisitionLiveTime)) { + acquisitionLiveTime = acquisitionLiveTime / 3600; // acquisition time check if (acquisitionTimeSections.get(0) < acquisitionLiveTime && acquisitionLiveTime <= acquisitionTimeSections.get(1)) { // red sampleMap.put("AcqTimeBtn", "RedLight"); @@ -780,24 +781,24 @@ public class PHDFileUtil extends AbstractLogOrReport { } } - if (gasBgSpectrumData.getMeasurementId().equals(sampleSpectrumData.getGasBkMeasurementId())){ + if (gasBgSpectrumData.getMeasurementId().equals(sampleSpectrumData.getGasBkMeasurementId())) { sampleMap.put("GasBgBtn", "GreenLight"); gasBgMap.put("GasBgBtn", "GreenLight"); detBgMap.put("GasBgBtn", "GreenLight"); qcMap.put("GasBgBtn", "GreenLight"); - }else { + } else { sampleMap.put("GasBgBtn", "RedLight"); gasBgMap.put("GasBgBtn", "RedLight"); detBgMap.put("GasBgBtn", "RedLight"); qcMap.put("GasBgBtn", "RedLight"); } - if (detBgSpectrumData.getMeasurementId().equals(sampleSpectrumData.getDetectorBkMeasurementId())){ + if (detBgSpectrumData.getMeasurementId().equals(sampleSpectrumData.getDetectorBkMeasurementId())) { sampleMap.put("DetBgBtn", "GreenLight"); gasBgMap.put("DetBgBtn", "GreenLight"); detBgMap.put("DetBgBtn", "GreenLight"); qcMap.put("DetBgBtn", "GreenLight"); - }else { + } else { sampleMap.put("DetBgBtn", "RedLight"); gasBgMap.put("DetBgBtn", "RedLight"); detBgMap.put("DetBgBtn", "RedLight"); @@ -805,6 +806,139 @@ public class PHDFileUtil extends AbstractLogOrReport { } } + + public void getLightColor(StationDetailType stationType, Map sampleMap, Map gasBgMap, Map detBgMap, Map qcMap) { + + String pathname = parameterProperties.getFilePath() + File.separator + "parameter.xml"; + SpectrumData sampleSpectrumData = (SpectrumData) sampleMap.get("spectrumData"); + SpectrumData gasBgSpectrumData = (SpectrumData) gasBgMap.get("spectrumData"); + SpectrumData detBgSpectrumData = (SpectrumData) detBgMap.get("spectrumData"); + + //灯颜色 + Sections sections = new Sections(stationType, pathname); + List airVolumeRules = sections.getAirVolumeRules(); + List collectionTimeRules = sections.getCollectionTimeRules(); + List acquisitionTimeRules = sections.getAcquisitionTimeRules(); + List xeVolumeRules = sections.getXeVolumeRules(); + + //region air volume check + double airVolume = Double.parseDouble(sampleSpectrumData.getAirVolume()); + if (Objects.nonNull(airVolume) && Objects.nonNull(airVolumeRules)) { + // air volume check + for (Rule rule : airVolumeRules) { + if (Objects.isNull(rule.getMax())) { + if (rule.getMin() < airVolume) { + sampleMap.put("SampleVolumeBtn", rule.getColor()); + gasBgMap.put("SampleVolumeBtn", rule.getColor()); + detBgMap.put("SampleVolumeBtn", rule.getColor()); + qcMap.put("SampleVolumeBtn", rule.getColor()); + break; + } + } + if (rule.getMin() < airVolume && airVolume <= rule.getMax()) { + sampleMap.put("SampleVolumeBtn", rule.getColor()); + gasBgMap.put("SampleVolumeBtn", rule.getColor()); + detBgMap.put("SampleVolumeBtn", rule.getColor()); + qcMap.put("SampleVolumeBtn", rule.getColor()); + break; + } + } + } + //endregion + + //region collection time check + String collectionTime = sampleSpectrumData.getCollectionTime(); + if (StringUtils.isNotBlank(collectionTime) && Objects.nonNull(collectionTimeRules)) { + double collection_time = Double.parseDouble(collectionTime); + collection_time = collection_time / 3600; + for (Rule rule : collectionTimeRules) { + if (Objects.isNull(rule.getMax())) { + if (rule.getMin() < collection_time) { + sampleMap.put("CollectTimeBtn", rule.getColor()); + gasBgMap.put("CollectTimeBtn", rule.getColor()); + detBgMap.put("CollectTimeBtn", rule.getColor()); + qcMap.put("CollectTimeBtn", rule.getColor()); + break; + } + } + if (rule.getMin() < collection_time && collection_time <= rule.getMax()) { + sampleMap.put("CollectTimeBtn", rule.getColor()); + gasBgMap.put("CollectTimeBtn", rule.getColor()); + detBgMap.put("CollectTimeBtn", rule.getColor()); + qcMap.put("CollectTimeBtn", rule.getColor()); + break; + } + } + } + + //endregion + + //region acquisition time check + double acquisitionLiveTime = Double.parseDouble(sampleSpectrumData.getAcquisitionLiveTime()); + if (Objects.nonNull(acquisitionLiveTime) && Objects.nonNull(acquisitionTimeRules)) { + acquisitionLiveTime = acquisitionLiveTime / 3600; + for (Rule rule : acquisitionTimeRules) { + if (Objects.isNull(rule.getMax())) { + if (rule.getMin() < acquisitionLiveTime) { + sampleMap.put("AcqTimeBtn", rule.getColor()); + gasBgMap.put("AcqTimeBtn", rule.getColor()); + detBgMap.put("AcqTimeBtn", rule.getColor()); + qcMap.put("AcqTimeBtn", rule.getColor()); + break; + } + } + if (rule.getMin() < acquisitionLiveTime && acquisitionLiveTime <= rule.getMax()) { + sampleMap.put("AcqTimeBtn", rule.getColor()); + gasBgMap.put("AcqTimeBtn", rule.getColor()); + detBgMap.put("AcqTimeBtn", rule.getColor()); + qcMap.put("AcqTimeBtn", rule.getColor()); + break; + } + } + } + //endregion + + //region XeVolume + double xeVolume = Double.parseDouble(sampleSpectrumData.getXeVolume()); + if (Objects.nonNull(xeVolumeRules)) { + for (Rule rule : xeVolumeRules) { + if (Objects.isNull(rule.getMax())) { + if (rule.getMin() < xeVolume) { + sampleMap.put("XeVolumeBtn", rule.getColor()); + gasBgMap.put("XeVolumeBtn", rule.getColor()); + detBgMap.put("XeVolumeBtn", rule.getColor()); + qcMap.put("XeVolumeBtn", rule.getColor()); + break; + } + } + if (rule.getMin() < xeVolume && xeVolume <= rule.getMax()) { + sampleMap.put("XeVolumeBtn", rule.getColor()); + gasBgMap.put("XeVolumeBtn", rule.getColor()); + detBgMap.put("XeVolumeBtn", rule.getColor()); + qcMap.put("XeVolumeBtn", rule.getColor()); + break; + } + } + } + //endregion + + //region GasBgBtn、DetBgBtn + String gasBgColor = gasBgSpectrumData.getMeasurementId().equals(sampleSpectrumData.getGasBkMeasurementId()) ? "GreenLight" : "RedLight"; + sampleMap.put("GasBgBtn", gasBgColor); + gasBgMap.put("GasBgBtn", gasBgColor); + detBgMap.put("GasBgBtn", gasBgColor); + qcMap.put("GasBgBtn", gasBgColor); + + String detBgColor = detBgSpectrumData.getMeasurementId().equals(sampleSpectrumData.getDetectorBkMeasurementId()) ? "GreenLight" : "RedLight"; + sampleMap.put("DetBgBtn", detBgColor); + gasBgMap.put("DetBgBtn", detBgColor); + detBgMap.put("DetBgBtn", detBgColor); + qcMap.put("DetBgBtn", detBgColor); + + //endregion + } + + public Map getFileData(String filePath, String sampleFileName) { Map map = new HashMap<>(); File file = null; @@ -831,7 +965,7 @@ public class PHDFileUtil extends AbstractLogOrReport { map.put("detaFileName", detaFileName); map.put("sampleSystemType", systemType); return map; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return map; } @@ -846,77 +980,78 @@ public class PHDFileUtil extends AbstractLogOrReport { EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(file.getAbsolutePath()); String systemType = sourceData.system_type; String dataType = sourceData.data_type; - if(systemType.contains("B")) { + if (systemType.contains("B")) { path.append("Spectrum"); - path.append(StringPool.SLASH+"Xenon"); - path.append(StringPool.SLASH+"Sauna"); - } else if(systemType.contains("G")) { + path.append(StringPool.SLASH + "Xenon"); + path.append(StringPool.SLASH + "Sauna"); + } else if (systemType.contains("G")) { path.append("Spectrum"); - path.append(StringPool.SLASH+"Xenon"); - path.append(StringPool.SLASH+"Spalax"); + path.append(StringPool.SLASH + "Xenon"); + path.append(StringPool.SLASH + "Spalax"); } else if (systemType.contains("C")) { path.append("Spectrum"); - path.append(StringPool.SLASH+"Xenon"); - path.append(StringPool.SLASH+"Self"); + path.append(StringPool.SLASH + "Xenon"); + path.append(StringPool.SLASH + "Self"); } - if(dataType.contains("SAMPLEPHD")) { - path.append(StringPool.SLASH+"Samplephd"); - } else if(dataType.contains("DETBKPHD")) { - path.append(StringPool.SLASH+"Detbkphd"); - } else if(dataType.contains("GASBKPHD")) { - path.append(StringPool.SLASH+"Gasbkphd"); - } else if(dataType.contains("QCPHD")) { - path.append(StringPool.SLASH+"Qcphd"); + if (dataType.contains("SAMPLEPHD")) { + path.append(StringPool.SLASH + "Samplephd"); + } else if (dataType.contains("DETBKPHD")) { + path.append(StringPool.SLASH + "Detbkphd"); + } else if (dataType.contains("GASBKPHD")) { + path.append(StringPool.SLASH + "Gasbkphd"); + } else if (dataType.contains("QCPHD")) { + path.append(StringPool.SLASH + "Qcphd"); } int pos = fileName.indexOf('-'); - if(-1 == pos) { + if (-1 == pos) { - } else if(fileName.length() >= pos+7) { - path.append(StringPool.SLASH+fileName.substring(pos+1,pos+5)); - path.append(StringPool.SLASH+fileName.substring(pos+5,pos+7)); + } else if (fileName.length() >= pos + 7) { + path.append(StringPool.SLASH + fileName.substring(pos + 1, pos + 5)); + path.append(StringPool.SLASH + fileName.substring(pos + 5, pos + 7)); } - path.append(StringPool.SLASH+fileName); + path.append(StringPool.SLASH + fileName); return path.toString(); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return path.toString(); } } - public String NameStandardBy(String fileName, String systemType,String dataType) { + + public String NameStandardBy(String fileName, String systemType, String dataType) { StringBuffer path = new StringBuffer(); try { - if(systemType.contains("B")) { + if (systemType.contains("B")) { path.append("Spectrum"); - path.append(StringPool.SLASH+"Xenon"); - path.append(StringPool.SLASH+"Sauna"); - } else if(systemType.contains("G")) { + path.append(StringPool.SLASH + "Xenon"); + path.append(StringPool.SLASH + "Sauna"); + } else if (systemType.contains("G")) { path.append("Spectrum"); - path.append(StringPool.SLASH+"Xenon"); - path.append(StringPool.SLASH+"Spalax"); + path.append(StringPool.SLASH + "Xenon"); + path.append(StringPool.SLASH + "Spalax"); } else if (systemType.contains("C")) { path.append("Spectrum"); - path.append(StringPool.SLASH+"Xenon"); - path.append(StringPool.SLASH+"Self"); + path.append(StringPool.SLASH + "Xenon"); + path.append(StringPool.SLASH + "Self"); } - if(dataType.contains("SAMPLEPHD")) { - path.append(StringPool.SLASH+"Samplephd"); - } else if(dataType.contains("DETBKPHD")) { - path.append(StringPool.SLASH+"Detbkphd"); - } else if(dataType.contains("GASBKPHD")) { - path.append(StringPool.SLASH+"Gasbkphd"); - } else if(dataType.contains("QCPHD")) { - path.append(StringPool.SLASH+"Qcphd"); + if (dataType.contains("SAMPLEPHD")) { + path.append(StringPool.SLASH + "Samplephd"); + } else if (dataType.contains("DETBKPHD")) { + path.append(StringPool.SLASH + "Detbkphd"); + } else if (dataType.contains("GASBKPHD")) { + path.append(StringPool.SLASH + "Gasbkphd"); + } else if (dataType.contains("QCPHD")) { + path.append(StringPool.SLASH + "Qcphd"); } int pos = fileName.indexOf('-'); - if(-1 == pos) { + if (-1 == pos) { - } else if(fileName.length() >= pos+7) { - path.append(StringPool.SLASH+fileName.substring(pos+1,pos+5)); - path.append(StringPool.SLASH+fileName.substring(pos+5,pos+7)); + } else if (fileName.length() >= pos + 7) { + path.append(StringPool.SLASH + fileName.substring(pos + 1, pos + 5)); + path.append(StringPool.SLASH + fileName.substring(pos + 5, pos + 7)); } - path.append(StringPool.SLASH+fileName); + path.append(StringPool.SLASH + fileName); return path.toString(); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return path.toString(); } @@ -945,8 +1080,8 @@ public class PHDFileUtil extends AbstractLogOrReport { // List ftpFiles = Arrays.asList(ftpClient.listFiles()); File file = new File(filePath); List ftpFiles = Arrays.asList(file.listFiles()); - if (CollectionUtils.isNotEmpty(ftpFiles)){ - fileNames = ftpFiles.stream().filter(item-> item.getName().contains(station)).map(File::getName).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(ftpFiles)) { + fileNames = ftpFiles.stream().filter(item -> item.getName().contains(station)).map(File::getName).collect(Collectors.toList()); } } catch (Exception e) { throw new RuntimeException(e); @@ -965,10 +1100,10 @@ public class PHDFileUtil extends AbstractLogOrReport { if (StringUtils.isBlank(tmpFileName)) { return matchFileName; } - fileNames = fileNames.stream().filter(item-> item.contains(type)).sorted().collect(Collectors.toList()); + fileNames = fileNames.stream().filter(item -> item.contains(type)).sorted().collect(Collectors.toList()); //用于比较的字符串 - String fileCompare = tmpFileName.substring(0,23); - for (String fileName:fileNames) { + String fileCompare = tmpFileName.substring(0, 23); + for (String fileName : fileNames) { String compare = fileName.substring(0, 23); if (compare.equals(fileCompare) && fileName.contains("FULL")) { matchFileName = fileName; @@ -979,13 +1114,13 @@ public class PHDFileUtil extends AbstractLogOrReport { public String GetQCPHD(String sampleName, List fileNames) { //过滤出所有包含Q的文件 - fileNames = fileNames.stream().filter(item-> item.contains(DataTypeAbbr.QCPHD.getType())).sorted().collect(Collectors.toList()); + fileNames = fileNames.stream().filter(item -> item.contains(DataTypeAbbr.QCPHD.getType())).sorted().collect(Collectors.toList()); Long dateTime = Long.valueOf(sampleName.substring(10, 23).replace("_", "")); String rData = ""; - for(int pos=0;posdateTime) { + if (qcphdDateTime > dateTime) { break; } else { if (fileNames.get(pos).contains("FULL")) { @@ -1009,7 +1144,7 @@ public class PHDFileUtil extends AbstractLogOrReport { //新计算得到的边界值 if (CollectionUtils.isNotEmpty(analyseResult.S_ROI_B_Boundary_start)) { List boundaryList = new LinkedList<>(); - for (int i=0; i boundaryList = new LinkedList<>(); - for (int i=0; i boundaryList = new LinkedList<>(); - for (int i=0; i boundaryList = new LinkedList<>(); - for (int i=0; i boundaryList = new LinkedList<>(); - for (int i=0; i boundaryList = new LinkedList<>(); - for (int i=0; i roiChannelsSpectrumList = new LinkedList<>(); - for (int i=0; i roiResultsSpectrumList = new LinkedList<>(); - for (int i=0; ibgAnalyseResult.MDC.get(i)) { + if (bgAnalyseResult.ROI_con_uncer.get(i) > bgAnalyseResult.MDC.get(i)) { roiResults.setNidFlag(1); } else { roiResults.setNidFlag(0); @@ -1550,7 +1685,7 @@ public class PHDFileUtil extends AbstractLogOrReport { public List StringToDouble(List datas) { List result = new LinkedList<>(); - for (String data: datas) { + for (String data : datas) { result.add(Double.valueOf(data)); } return result; @@ -1592,7 +1727,7 @@ public class PHDFileUtil extends AbstractLogOrReport { List roiBBoundaryStop = bgBoundary.ROI_B_Boundary_stop; List roiGBoundaryStart = bgBoundary.ROI_G_Boundary_start; List roiGBoundaryStop = bgBoundary.ROI_G_Boundary_stop; - for (int i=0; i 0) { out.append(rowFormat("energy to channel equation: CH(x) = (%s)+(%s)*x+(%s)x*x", NumberFormatUtil.numberFormat(String.valueOf(bgAnalyseResult.s_g_fitting_e_c.get(0))), NumberFormatUtil.numberFormat(String.valueOf(bgAnalyseResult.s_g_fitting_e_c.get(1))), NumberFormatUtil.numberFormat(String.valueOf(bgAnalyseResult.s_g_fitting_e_c.get(2))))); } else { @@ -2333,16 +2468,16 @@ public class PHDFileUtil extends AbstractLogOrReport { StringBuffer strBuffer = new StringBuffer(); //对分析后的内容进行数据获取 - List channelsSpectrums = betaDataFile.getRoiChannelsSpectrumList(); + List channelsSpectrums = betaDataFile.getRoiChannelsSpectrumList(); List roiChannelsSpectrumsSample = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("S")).collect(Collectors.toList()); List roiChannelsSpectrumsGas = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("G")).collect(Collectors.toList()); List roiChannelsSpectrumsDet = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("D")).collect(Collectors.toList()); - List resultsSpectrums = betaDataFile.getRoiResultsSpectrumList(); - List xeResultsSpectrums = betaDataFile.getXeResultsSpectrumList(); + List resultsSpectrums = betaDataFile.getRoiResultsSpectrumList(); + List xeResultsSpectrums = betaDataFile.getXeResultsSpectrumList(); //#SAMPLE: LIMITS PER ROI GAMMA List gammaCalibrationParamList = betaDataFile.getGammaCalibrationSpectrumList(); List gammaCalibrationSpectrumEList = betaDataFile.getGammaCalibrationSpectrumEList(); - for (int i=0; i betaCalibrationParamList = betaDataFile.getBetaCalibrationSpectrumList(); List betaCalibrationSpectrumEList = betaDataFile.getBetaCalibrationSpectrumEList(); - for (int i=0; i viewXeData(List xeResultsSpectrumList) { List xeResultsViewList = new LinkedList<>(); if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)) { - for (GardsXeResultsSpectrum xeResultsSpectrum:xeResultsSpectrumList) { + for (GardsXeResultsSpectrum xeResultsSpectrum : xeResultsSpectrumList) { GardsXeResultsView xeResultsView = new GardsXeResultsView(); xeResultsView.setNuclideName(xeResultsSpectrum.getNuclideName()); xeResultsView.setConc(NumberFormatUtil.numberSixLen(String.valueOf(xeResultsSpectrum.getConc()))); @@ -2778,15 +2913,16 @@ public class PHDFileUtil extends AbstractLogOrReport { /** * 获取beta刻度校正数据 - * @param gEtoCParam gamma e2c公式参数 + * + * @param gEtoCParam gamma e2c公式参数 * @param bElectronEnergy beta energy - * @param bEtoCParam beta e2c公式参数 - * @param numGChannel gamma 道址数 + * @param bEtoCParam beta e2c公式参数 + * @param numGChannel gamma 道址数 * @param qcStruct */ public List getBetaCalibrationCorrection(List gEtoCParam, List bElectronEnergy, - List bEtoCParam, long numGChannel, - EnergySpectrumStruct qcStruct) { + List bEtoCParam, long numGChannel, + EnergySpectrumStruct qcStruct) { // E_β=661.6-E_γ,E_γ=F(C) // 中心:C_β=F(E_β),范围:左[C_β-3√(C_β ), C_β+3√(C_β )]右 // 高斯函数拟合得到拟合的中心道址,显示Energy vs. Channel @@ -2809,7 +2945,7 @@ public class PHDFileUtil extends AbstractLogOrReport { double right = bc + Math.cbrt(bc); int sum = 0; for (SeriseData f : seriseDatas) { - if(left < f.getX() && right > f.getX()){ + if (left < f.getX() && right > f.getX()) { points.add(f.getX(), f.getY()); sum += f.getX(); } @@ -2818,7 +2954,7 @@ public class PHDFileUtil extends AbstractLogOrReport { Double channel = sum / (right - left); //表单数据信息 TableWidget tableWidget = new TableWidget(); - tableWidget.setRowCount(i+1); + tableWidget.setRowCount(i + 1); tableWidget.setChannel(channel); tableWidget.setEnergy(be); table.add(tableWidget); @@ -2827,21 +2963,20 @@ public class PHDFileUtil extends AbstractLogOrReport { } /** - * - * @param chartHeight 图形高度 + * @param chartHeight 图形高度 * @param channelWidth 图形宽度 * @param gammaChannel gamma道址 - * @param struct qc数据 + * @param struct qc数据 * @return */ - private List getGammaGated(int chartHeight, int channelWidth, int gammaChannel, EnergySpectrumStruct struct){ + private List getGammaGated(int chartHeight, int channelWidth, int gammaChannel, EnergySpectrumStruct struct) { List series_data = new LinkedList<>(); //选择矩形框高度 - int flagHeight = channelWidth * (chartHeight / 256); + int flagHeight = channelWidth * (chartHeight / 256); int value = Double.valueOf(flagHeight / 2).intValue(); //计算得到最高值 int up = gammaChannel - value; - if (up < 0){ + if (up < 0) { up = 0; } //计算得到最低值 @@ -2851,7 +2986,7 @@ public class PHDFileUtil extends AbstractLogOrReport { long bChannels = struct.b_channels; List hCounts = struct.h_counts; - for ( int i=0; i < bChannels; ++i ) { + for (int i = 0; i < bChannels; ++i) { long count = 0; for (int j = up; j <= down; ++j) { long index = j * bChannels + i; diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java index e1bf626e..da4e8d9b 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java @@ -39,6 +39,7 @@ import org.jeecg.modules.base.entity.rnman.*; import org.jeecg.modules.base.enums.*; import org.jeecg.modules.entity.*; import org.jeecg.modules.entity.vo.*; +import org.jeecg.modules.entity.vo.QCFlagParmData.Rule; import org.jeecg.modules.mapper.SpectrumAnalysisMapper; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.BgAnalyseResult; @@ -385,6 +386,7 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements @Override public Result getDBSpectrumChart(String dbName, Integer sampleId, String analyst, HttpServletRequest request) { + HashMap stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); Result result = new Result(); //获取当前的用户名称 String userName = JwtUtil.getUserNameByToken(request); @@ -632,8 +634,23 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements qcMap.put("fileName", betaDataFile.getQcFileName()); resultMap.put("qc", qcMap); } - //分析状态颜色 - phdFileUtil.getLightColor(sampleMap, gasBgMap, detBgMap, qcMap); + Integer stationId = spectrumAnalysisMapper.getStationId(betaDataFile.getSampleStruct().getSite_code()); + GardsStations station = stationInfoMap.get(stationId.toString()); + switch (station.getEfficCalculType()) { + case "SAUNA": + //分析状态颜色 + phdFileUtil.getLightColor(StationDetailType.SAUNA, sampleMap, gasBgMap, detBgMap, qcMap); + break; + case "SAUNA2": + //分析状态颜色 + phdFileUtil.getLightColor(StationDetailType.SAUNA2, sampleMap, gasBgMap, detBgMap, qcMap); + break; + default: + //分析状态颜色 + phdFileUtil.getLightColor(sampleMap, gasBgMap, detBgMap, qcMap); + break; + } + //Xe if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)) { for (GardsXeResultsSpectrum xeData : xeResultsSpectrumList) { @@ -796,6 +813,7 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements @Override public Result getFileSpectrumChart(String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) { Result result = new Result(); + HashMap stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); //获取用户名 String userName = JwtUtil.getUserNameByToken(request); //上传文件路径 @@ -862,6 +880,7 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements resultMap.put("qc", qcMap); } } + } else { xeResultsSpectrumList = betaDataFile.getXeResultsSpectrumList(); sampleMap = loadData("sample", betaDataFile); @@ -877,7 +896,22 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements qcMap.put("fileName", betaDataFile.getQcFileName()); resultMap.put("qc", qcMap); } - phdFileUtil.getLightColor(sampleMap, gasBgMap, detBgMap, qcMap); + Integer stationId = spectrumAnalysisMapper.getStationId(betaDataFile.getSampleStruct().getSite_code()); + GardsStations station = stationInfoMap.get(stationId.toString()); + switch (station.getEfficCalculType()) { + case "SAUNA": + //分析状态颜色 + phdFileUtil.getLightColor(StationDetailType.SAUNA, sampleMap, gasBgMap, detBgMap, qcMap); + break; + case "SAUNA2": + //分析状态颜色 + phdFileUtil.getLightColor(StationDetailType.SAUNA2, sampleMap, gasBgMap, detBgMap, qcMap); + break; + default: + //分析状态颜色 + phdFileUtil.getLightColor(sampleMap, gasBgMap, detBgMap, qcMap); + break; + } //Xe if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)) { for (GardsXeResultsSpectrum xeData : xeResultsSpectrumList) { @@ -1685,6 +1719,7 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements @Override public Result viewQCResult(Integer sampleId, String dbName, String sampleFileName, String gasFileName, String detFileName, HttpServletRequest request) { Result result = new Result(); + HashMap stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); //获取用户名称 String userName = JwtUtil.getUserNameByToken(request); //读取本地缓存 @@ -1694,6 +1729,25 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements result.error500("Load basic file information first!"); return result; } + Integer stationId = spectrumAnalysisMapper.getStationId(betaDataFile.getSampleStruct().getSite_code()); + GardsStations station = stationInfoMap.get(stationId.toString()); + QCResult qcResult = new QCResult(); + switch (station.getEfficCalculType()) { + case "SAUNA": + qcResult = ProcessQCResultBranch(StationDetailType.SAUNA,betaDataFile); + break; + case "SAUNA2": + qcResult = ProcessQCResultBranch(StationDetailType.SAUNA2, betaDataFile); + break; + default: + break; + } + result.setSuccess(true); + result.setResult(qcResult); + return result; + } + + private QCResult ProcessQCResultBranch(BetaDataFile betaDataFile) { QCResult qcResult = new QCResult(); //获取各数据的范围信息 Sections sections = new Sections(); @@ -1718,80 +1772,187 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements gardsXeResults = xeDataList.get(0); } //解析sample,gas,det文件并判断数据状态 - if (Objects.nonNull(betaDataFile)) { - EnergySpectrumStruct sampleSourceData = betaDataFile.getSampleStruct(); - EnergySpectrumStruct gasSourceData = betaDataFile.getGasStruct(); - EnergySpectrumStruct detSourceData = betaDataFile.getDetStruct(); - try { - if (Objects.nonNull(sampleSourceData) && Objects.nonNull(gasSourceData) && Objects.nonNull(detSourceData)) { - Date collectStartDate = DateUtils.parseDate(sampleSourceData.collection_start_date + StringPool.SPACE + sampleSourceData.collection_start_time); - Date collectStopDate = DateUtils.parseDate(sampleSourceData.collection_stop_date + StringPool.SPACE + sampleSourceData.collection_stop_time); - Double collection_time = Double.valueOf((collectStopDate.getTime() - collectStartDate.getTime()) / 1000); - String collection_time_value = String.format("%.4f", collection_time / 3600.0); - qcResult.setCollectTimeValue(collection_time_value); - if (collectionTimeSections.get(1) < collection_time / 3600.0 && collection_time / 3600.0 < collectionTimeSections.get(4)) { - qcResult.setCollectTimeStatus("Pass"); - } else { - qcResult.setCollectTimeStatus("Failed"); - } - String acquisition_live_sec = String.format("%.2f", sampleSourceData.acquisition_live_time / 3600.0); - qcResult.setAcquisitionTimeValue(acquisition_live_sec); - if (acquisitionTimeSections.get(1) < sampleSourceData.acquisition_live_time / 3600.0 && sampleSourceData.acquisition_live_time / 3600.0 < acquisitionTimeSections.get(4)) { - qcResult.setAcquisitionTimeStatus("Pass"); - } else { - qcResult.setAcquisitionTimeStatus("Failed"); - } - String s_xe_stable_volume = String.valueOf(sampleSourceData.sample_volume_of_Xe); - qcResult.setXenonVolumeValue(s_xe_stable_volume); - if (xeVolumeSections.get(1) < sampleSourceData.sample_volume_of_Xe) { - qcResult.setXenonVolumeStatus("Pass"); - } else { - qcResult.setXenonVolumeStatus("Failed"); - } - // - String gasMeasurementID = gasSourceData.measurement_id; - if (gasMeasurementID.equals(sampleSourceData.gas_bk_measurement_id)) { - qcResult.setGasBgValue("Match"); - qcResult.setGasBgEvaluationMetrics("Match"); - qcResult.setGasBgValueAndStatus(true); - } else { - qcResult.setGasBgValue(""); - qcResult.setGasBgEvaluationMetrics(""); - qcResult.setGasBgValueAndStatus(false); - } - // - String detMeasurementID = detSourceData.measurement_id; - if (detMeasurementID.equals(sampleSourceData.detector_bk_measurement_id)) { - qcResult.setDetBgValue("Match"); - qcResult.setDetBgEvaluationMetrics("Match"); - qcResult.setDetBgValueAndStatus(true); - } else { - qcResult.setDetBgValue(""); - qcResult.setDetBgEvaluationMetrics(""); - qcResult.setDetBgValueAndStatus(false); - } - } - } catch (ParseException e) { - throw new RuntimeException(e); - } - if (Objects.nonNull(gardsXeResults)) { - qcResult.setXe133MDCValue(String.valueOf(gardsXeResults.getMdc())); - if (0.001 < gardsXeResults.getMdc() && gardsXeResults.getMdc() < 5.0) { - qcResult.setXe133MDCStatus("Pass"); + EnergySpectrumStruct sampleSourceData = betaDataFile.getSampleStruct(); + EnergySpectrumStruct gasSourceData = betaDataFile.getGasStruct(); + EnergySpectrumStruct detSourceData = betaDataFile.getDetStruct(); + try { + if (Objects.nonNull(sampleSourceData) && Objects.nonNull(gasSourceData) && Objects.nonNull(detSourceData)) { + Date collectStartDate = DateUtils.parseDate(sampleSourceData.collection_start_date + StringPool.SPACE + sampleSourceData.collection_start_time); + Date collectStopDate = DateUtils.parseDate(sampleSourceData.collection_stop_date + StringPool.SPACE + sampleSourceData.collection_stop_time); + Double collection_time = (double) ((collectStopDate.getTime() - collectStartDate.getTime()) / 1000); + String collection_time_value = String.format("%.4f", collection_time / 3600.0); + qcResult.setCollectTimeValue(collection_time_value); + if (collectionTimeSections.get(1) < collection_time / 3600.0 && collection_time / 3600.0 < collectionTimeSections.get(4)) { + qcResult.setCollectTimeStatus("Pass"); } else { - qcResult.setXe133MDCStatus("Failed"); + qcResult.setCollectTimeStatus("Failed"); + } + String acquisition_live_sec = String.format("%.2f", sampleSourceData.acquisition_live_time / 3600.0); + qcResult.setAcquisitionTimeValue(acquisition_live_sec); + if (acquisitionTimeSections.get(1) < sampleSourceData.acquisition_live_time / 3600.0 && sampleSourceData.acquisition_live_time / 3600.0 < acquisitionTimeSections.get(4)) { + qcResult.setAcquisitionTimeStatus("Pass"); + } else { + qcResult.setAcquisitionTimeStatus("Failed"); + } + String s_xe_stable_volume = String.valueOf(sampleSourceData.sample_volume_of_Xe); + qcResult.setXenonVolumeValue(s_xe_stable_volume); + if (xeVolumeSections.get(1) < sampleSourceData.sample_volume_of_Xe) { + qcResult.setXenonVolumeStatus("Pass"); + } else { + qcResult.setXenonVolumeStatus("Failed"); + } + // + String gasMeasurementID = gasSourceData.measurement_id; + if (gasMeasurementID.equals(sampleSourceData.gas_bk_measurement_id)) { + qcResult.setGasBgValue("Match"); + qcResult.setGasBgEvaluationMetrics("Match"); + qcResult.setGasBgValueAndStatus(true); + } else { + qcResult.setGasBgValue(""); + qcResult.setGasBgEvaluationMetrics(""); + qcResult.setGasBgValueAndStatus(false); + } + // + String detMeasurementID = detSourceData.measurement_id; + if (detMeasurementID.equals(sampleSourceData.detector_bk_measurement_id)) { + qcResult.setDetBgValue("Match"); + qcResult.setDetBgEvaluationMetrics("Match"); + qcResult.setDetBgValueAndStatus(true); + } else { + qcResult.setDetBgValue(""); + qcResult.setDetBgEvaluationMetrics(""); + qcResult.setDetBgValueAndStatus(false); } - } else { - qcResult.setXe133MDCValue("None"); - qcResult.setXe133MDCStatus("None"); } + } catch (ParseException e) { + throw new RuntimeException(e); + } + if (Objects.nonNull(gardsXeResults)) { + qcResult.setXe133MDCValue(String.valueOf(gardsXeResults.getMdc())); + if (0.001 < gardsXeResults.getMdc() && gardsXeResults.getMdc() < 5.0) { + qcResult.setXe133MDCStatus("Pass"); + } else { + qcResult.setXe133MDCStatus("Failed"); + } + } else { + qcResult.setXe133MDCValue("None"); + qcResult.setXe133MDCStatus("None"); } } catch (Exception e) { e.printStackTrace(); } - result.setSuccess(true); - result.setResult(qcResult); - return result; + return qcResult; + } + + private QCResult ProcessQCResultBranch(StationDetailType stationType, BetaDataFile betaDataFile) { + //region 参数信息 + QCResult qcResult = new QCResult(); + String pathname = parameterProperties.getFilePath() + File.separator + "parameter.xml"; + //获取各数据的范围信息 + Sections sections = new Sections(stationType, pathname); + List collectionTimeRules = sections.getCollectionTimeRules(); + if (CollectionUtils.isNotEmpty(collectionTimeRules)) { + String collectionMerits = collectionTimeRules.get(1).getMin() + "~" + collectionTimeRules.get(collectionTimeRules.size() - 1).getMin(); + qcResult.setCollectTimeEvaluationMetrics(collectionMerits); + } + List acquisitionTimeRules = sections.getAcquisitionTimeRules(); + if (CollectionUtils.isNotEmpty(acquisitionTimeRules)) { + String acquisitionMerits = acquisitionTimeRules.get(1).getMin() + "~" + acquisitionTimeRules.get(acquisitionTimeRules.size() - 1).getMin(); + qcResult.setAcquisitionTimeEvaluationMetrics(acquisitionMerits); + } + List xeVolumeRules = sections.getXeVolumeRules(); + if (CollectionUtils.isNotEmpty(xeVolumeRules)) { + String xeMerits = xeVolumeRules.get(1).getMin() + "~ "; + qcResult.setXenonVolumeEvaluationMetrics(xeMerits); + } + String xe133MDCEvaluationMetrics = "0.001 ~ 5"; + qcResult.setXe133MDCEvaluationMetrics(xe133MDCEvaluationMetrics); + //endregion + + //获取数据信息 + GardsXeResultsSpectrum gardsXeResults = null; + List xeDataList = new LinkedList<>(); + try { + xeDataList = betaDataFile.getXeResultsSpectrumList(); + if (CollectionUtils.isNotEmpty(xeDataList)) { + xeDataList = xeDataList.stream().filter(item -> item.getNuclideName().equals(XeNuclideName.XE_133.getType())).collect(Collectors.toList()); + gardsXeResults = xeDataList.get(0); + } + //解析sample,gas,det文件并判断数据状态 + EnergySpectrumStruct sampleSourceData = betaDataFile.getSampleStruct(); + EnergySpectrumStruct gasSourceData = betaDataFile.getGasStruct(); + EnergySpectrumStruct detSourceData = betaDataFile.getDetStruct(); + + try { + if (Objects.nonNull(sampleSourceData) && Objects.nonNull(gasSourceData) && Objects.nonNull(detSourceData)) { + Date collectStartDate = DateUtils.parseDate(sampleSourceData.collection_start_date + StringPool.SPACE + sampleSourceData.collection_start_time); + Date collectStopDate = DateUtils.parseDate(sampleSourceData.collection_stop_date + StringPool.SPACE + sampleSourceData.collection_stop_time); + double collection_time = ((double) ((collectStopDate.getTime() - collectStartDate.getTime()) / 1000)) / 3600.0; + String collection_time_value = String.format("%.4f", collection_time); + qcResult.setCollectTimeValue(collection_time_value); + if (collectionTimeRules.get(1).getMin() < collection_time && collection_time < collectionTimeRules.get(collectionTimeRules.size() - 1).getMin()) { + qcResult.setCollectTimeStatus("Pass"); + } else { + qcResult.setCollectTimeStatus("Failed"); + } + double acquisition_live_time = sampleSourceData.acquisition_live_time / 3600.0; + String acquisition_live_sec = String.format("%.2f", sampleSourceData.acquisition_live_time / 3600.0); + qcResult.setAcquisitionTimeValue(acquisition_live_sec); + if (acquisitionTimeRules.get(1).getMin() < acquisition_live_time && acquisition_live_time < acquisitionTimeRules.get(acquisitionTimeRules.size()-1).getMin()) { + qcResult.setAcquisitionTimeStatus("Pass"); + } else { + qcResult.setAcquisitionTimeStatus("Failed"); + } + + String s_xe_stable_volume = String.valueOf(sampleSourceData.sample_volume_of_Xe); + qcResult.setXenonVolumeValue(s_xe_stable_volume); + if (xeVolumeRules.get(1).getMin() < sampleSourceData.sample_volume_of_Xe) { + qcResult.setXenonVolumeStatus("Pass"); + } else { + qcResult.setXenonVolumeStatus("Failed"); + } + // + String gasMeasurementID = gasSourceData.measurement_id; + if (gasMeasurementID.equals(sampleSourceData.gas_bk_measurement_id)) { + qcResult.setGasBgValue("Match"); + qcResult.setGasBgEvaluationMetrics("Match"); + qcResult.setGasBgValueAndStatus(true); + } else { + qcResult.setGasBgValue(""); + qcResult.setGasBgEvaluationMetrics(""); + qcResult.setGasBgValueAndStatus(false); + } + // + String detMeasurementID = detSourceData.measurement_id; + if (detMeasurementID.equals(sampleSourceData.detector_bk_measurement_id)) { + qcResult.setDetBgValue("Match"); + qcResult.setDetBgEvaluationMetrics("Match"); + qcResult.setDetBgValueAndStatus(true); + } else { + qcResult.setDetBgValue(""); + qcResult.setDetBgEvaluationMetrics(""); + qcResult.setDetBgValueAndStatus(false); + } + } + } catch (RuntimeException e) { + throw new RuntimeException(e); + } + if (Objects.nonNull(gardsXeResults)) { + qcResult.setXe133MDCValue(String.valueOf(gardsXeResults.getMdc())); + if (0.001 < gardsXeResults.getMdc() && gardsXeResults.getMdc() < 5.0) { + qcResult.setXe133MDCStatus("Pass"); + } else { + qcResult.setXe133MDCStatus("Failed"); + } + } else { + qcResult.setXe133MDCValue("None"); + qcResult.setXe133MDCStatus("None"); + } + + } catch (Exception e) { + e.printStackTrace(); + } + return qcResult; } @Override diff --git a/setup/parameter.xml b/setup/parameter.xml index 0430c61b..e07c0ca3 100644 --- a/setup/parameter.xml +++ b/setup/parameter.xml @@ -1,4 +1,5 @@ + @@ -7,236 +8,326 @@ - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - + - + - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +