人工交互分析模块增加启动时读取mdc参数文件内容缓存方法

人工交互分析模块增加启动时读取加和核素信息内容方法
人工交互分析模块gamma分析部分新增主页面查询附近峰核素信息接口
人工交互分析模块gamma分析部分新增分析时计算部分特殊核素的mdc值方法
人工交互分析模块gamma分析部分存储数据库方法增加存储mdc计算结果相关代码
人工交互分析模块gamma分析部分增加新实体类自动处理GardsMDC表,人工交互GardsMDC表,记录计算结果CalMDCInfo表
人工交互分析模块gamma分析部分Efficiency切换方法接口重新计算公式代码修改
人工交互分析模块gamma分析部分PHDFile实体类增加字段记录重新获取计算公式时使用的参数内容,缓存mdc计算结果的参数字段
This commit is contained in:
qiaoqinzheng 2023-12-19 09:47:19 +08:00
parent e15047e259
commit 4b6b3046c4
17 changed files with 933 additions and 111 deletions

View File

@ -0,0 +1,42 @@
package org.jeecg.modules.base.entity.configuration;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("CONFIGURATION.GARDS_NUCL_COINCIDENCE_SUM")
public class GardsNuclCoincidenceSum implements Serializable {
@TableField(value = "NAME")
private String name;
@TableField(value = "ENERGY")
private Double energy;
@TableField(value = "ENERGY_UNCERT")
private Double energyUncert;
@TableField(value = "YIELD")
private Double yield;
@TableField(value = "YIELD_UNCERT")
private Double yieldUncert;
@TableField(value = "NUCLIDE_ID")
private Integer nuclideId;
@TableField(value = "FULLNAME")
private String fullName;
@TableField(value = "MODDATE")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date moddate;
}

View File

@ -0,0 +1,45 @@
package org.jeecg.modules.base.entity.rnauto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("RNAUTO.GARDS_MDC")
public class GardsMDC implements Serializable {
@TableField(value = "SAMPLE_ID")
private Integer sampleId;
@TableField(value = "IDANALYSIS")
private Integer idAnalysis;
@TableField(value = "NUCLIDENAME")
private String nuclideName;
@TableField(value = "ENERGY")
private Double energy;
@TableField(value = "YIELD")
private Double yield;
@TableField(value = "EFFICIENCY")
private Double efficiency;
@TableField(value = "MDC")
private Double mdc;
@TableField(value = "MDC_ERR")
private Double mdcErr;
@TableField(value = "MODDATE")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date moddate;
}

View File

@ -0,0 +1,45 @@
package org.jeecg.modules.base.entity.rnman;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("RNMAN.GARDS_MDC")
public class GardsMDC implements Serializable {
@TableField(value = "SAMPLE_ID")
private Integer sampleId;
@TableField(value = "IDANALYSIS")
private Integer idAnalysis;
@TableField(value = "NUCLIDENAME")
private String nuclideName;
@TableField(value = "ENERGY")
private Double energy;
@TableField(value = "YIELD")
private Double yield;
@TableField(value = "EFFICIENCY")
private Double efficiency;
@TableField(value = "MDC")
private Double mdc;
@TableField(value = "MDC_ERR")
private Double mdcErr;
@TableField(value = "MODDATE")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date moddate;
}

View File

@ -0,0 +1,46 @@
package org.jeecg.modules.entity.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class CalMDCInfo implements Serializable {
/**
* 核素名称
*/
private String nuclideName;
/**
* 核素能量
*/
private Double energy;
/**
* 核素效率
*/
private Double efficiency;
/**
* 计算结果mdc
*/
private Double mdc;
/**
* mdc偏差值
*/
private Double mdcErr;
/**
* 半衰期(单位-)
*/
private Double halflife;
/**
* 分支比
*/
private Double yield;
}

View File

@ -155,6 +155,26 @@ public class PHDFile implements Serializable {
// 核素活度浓度
private Map<String, NuclideActMda> mapNucActMda;
/**
* 计算mdc值的map
*/
private Map<String, CalMDCInfo> mdcInfoMap;
/**
* efficiency对应的公式能量
*/
private List<Double> efficiencyEnergy;
/**
* efficiency对应的公式参数
*/
private List<Double> efficiencyParam;
/**
* efficiency公式对应选中行
*/
private Integer efficiencyCurRow;
public PHDFile() {
userId = "";
xmlFilePath = "";
@ -219,6 +239,10 @@ public class PHDFile implements Serializable {
certificate = new CertificateBlock();
QcItems = new TreeMap<>();
mapNucActMda = new TreeMap<>();
mdcInfoMap = new TreeMap<>();
efficiencyEnergy = new LinkedList<>();
efficiencyParam = new LinkedList<>();
efficiencyCurRow = 0;
}
}

View File

@ -2083,7 +2083,7 @@ public class GammaFileUtil extends AbstractLogOrReport {
map.put("AllData", datalist);
}
public String UpdateEquationEfficiency(List<Double> m_vCurEnergy, ParameterInfo m_curParam, Integer funId) {
public String UpdateEquationEfficiency(List<Double> 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;
@ -2094,7 +2094,7 @@ public class GammaFileUtil extends AbstractLogOrReport {
switch(funId) {
case 1: // Interpolation: y=yi+(y(i+1)-yi)*(x-xi)/(x(i+1)-xi) for xi<=x<x(i+1)
if(p_size == 2 * e_size && p_size >= 4) {
int i = 0;
int i = curRow;
if(i < 0 || i >= e_size) break;
double y1, y0, x1, x0;
@ -2104,8 +2104,7 @@ public class GammaFileUtil extends AbstractLogOrReport {
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 {
} 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))));
@ -4581,4 +4580,272 @@ public class GammaFileUtil extends AbstractLogOrReport {
return shapes;
}
public void getNuclideMDCValue(PHDFile phd, Map<String, CalMDCInfo> mdcInfoMap, Map<String, NuclideLines> nuclideLinesMap) {
//遍历峰核素信息
for (Map.Entry<String, NuclideLines> entry: nuclideLinesMap.entrySet()) {
//获取核素名称
String nuclideName = entry.getKey();
NuclideLines nuclideLines = entry.getValue();
CalMDCInfo mdcInfo = mdcInfoMap.get(nuclideName);
if (Objects.nonNull(mdcInfo)) {
calCulEfficiencyValue(phd, mdcInfo, nuclideLines);
//计算MDC数据
List<Double> vMdcInfo = new LinkedList<>();
vMdcInfo.add(mdcInfo.getEnergy());
vMdcInfo.add(mdcInfo.getYield());
vMdcInfo.add(mdcInfo.getHalflife());
Double mdc = CalculateMDC(phd, vMdcInfo, 1.0);
mdcInfo.setMdc(mdc);
}
}
}
public void calCulEfficiencyValue(PHDFile phd, CalMDCInfo mdcInfo, NuclideLines nuclideLines) {
List<Double> efficiencies = new LinkedList<>();
int funId = phd.getEfficiencyParam().get(0).intValue();
int p_size = phd.getEfficiencyParam().size() - 1;
int e_size = phd.getEfficiencyEnergy().size();
switch(funId) {
case 1: // Interpolation: y=yi+(y(i+1)-yi)*(x-xi)/(x(i+1)-xi) for xi<=x<x(i+1)
if(p_size == 2 * e_size && p_size >= 4) {
int i = phd.getEfficiencyCurRow();
if(i < 0 || i >= e_size) break;
double y1, y0, x1, x0;
if(i < e_size - 1) {
y1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2+3))));
y0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2+1))));
x1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2+2))));
x0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2))));
} else {
y1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2+1))));
y0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2-1))));
x1 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2))));
x0 = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i*2-2))));
}
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double eff = y0 + (y1 - y0) * (energy - x0) / (x1 - x0);
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// 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(phd.getEfficiencyParam().get(i) <= 0) break;
}
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double paramA = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1))));
if (Double.isNaN(paramA)) {
paramA = 1;
}
double paramB = Math.exp( -1 * Math.pow(Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3))))) );
if (Double.isNaN(paramB)) {
paramB = 1;
}
double paramC = (1 - Math.exp(-1 * Math.pow(Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5))))) ));
if (Double.isNaN(paramC)) {
paramC = 1;
}
double eff = paramA * paramB * paramC;
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))+" / E)<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3)))+"</sup>) * "+
// "(1-exp(-("+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))+" / E)<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5)))+"</sup>))";
}
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) {
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double paramA = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1))));
if (Double.isNaN(paramA)) {
paramA = 0;
}
double paramB = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))) * Math.log(energy);
if (Double.isNaN(paramB)) {
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));
if (Double.isNaN(paramC)) {
paramC = 0;
}
param+=paramC;
}
double eff = Math.pow(Math.E, param);
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// equation += "log(Efficiency) = "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1)))+" + "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))+" * log(E)";
// for(int i=3; i<=p_size; i++) {
// equation += " + "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i)))+" * log(E)<sup style=\"vertical-align:super;\">"+(i-1)+"</sup>";
// }
}
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) {
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
double C = Math.round(phd.getEfficiencyParam().get(phd.getEfficiencyParam().size() - 1));
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double paramA = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1))));
double paramB = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))) * Math.log(C/energy);
if (Double.isNaN(paramB)) {
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(C/energy), (i-1));
if (Double.isNaN(paramC)) {
paramC = 0;
}
param += paramC;
}
double eff = Math.pow(Math.E, param);
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// equation += "log(Efficiency) = "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1)))+" + "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))+" * log(C/E)";
// for(int i=3; i<=p_size; i++) {
// equation += " + "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(i)))+" * log(C/E)<sup style=\"vertical-align:super;\">"+(i-1)+"</sup>";
// }
}
break;
case 93: // HAE Efficiency (1-3): y=S*exp(-(E1/x)^k)*(1- exp(-(2*E3/(x-E3))^n))
if(p_size == 5) {
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double paramA = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1))));
double paramB = Math.exp( -1 * Math.pow((Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))) / energy), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3))))) );
if (Double.isNaN(paramB)) {
paramB = 1;
}
double paramC = (1 - Math.exp( -1 * Math.pow( ( 2 * Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))) / ( energy - Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))) ) ), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5)))) ) ));
if (Double.isNaN(paramC)) {
paramC = 1;
}
double eff = paramA * paramB * paramC;
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))+" / E)<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3)))+"</sup>) * "+
// "(1 - exp(-(2 * "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))+" / (E - "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))+"))<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5)))+"</sup>))";
}
break;
case 94: // HAE Efficiency (1-2): y=S*exp(-(E1/x)^k)*(1- exp(-b*(1/(x-E2))^m))
if(p_size == 6) {
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double paramA = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1))));
double paramB = Math.exp( -1 * Math.pow((Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))) / energy), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3))))) );
if (Double.isNaN(paramB)) {
paramB = 1;
}
double paramC = (1 - Math.exp( -1 * Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))) * Math.pow((1/(energy - Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5)))))), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(6))))) ));
if (Double.isNaN(paramC)) {
paramC = 1;
}
double eff = paramA * paramB * paramC;
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// Efficiency = phd.getEfficiencyParam().get(1)
// * exp( -(phd.getEfficiencyParam().get(2) / E) ^ phd.getEfficiencyParam().get(3) )
// * (1 -
// exp( -phd.getEfficiencyParam().get(4) * (1 / (E - phd.getEfficiencyParam().get(5)) ^ phd.getEfficiencyParam().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) {
for (int j=0; j<nuclideLines.fullNames.size(); j++) {
//获取峰核素能量值
Double energy = nuclideLines.venergy.get(j);
Double yield = nuclideLines.vyield.get(j);
//能量不为空
if (Objects.nonNull(energy) && Objects.nonNull(yield)) {
double paramA = Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1))));
double paramB = Math.exp(-1 * Math.pow((Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))) / energy), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3))))));
if (Double.isNaN(paramB)) {
paramB = 1;
}
double paramC = (1 - Math.exp(-1 * Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))) * Math.pow((1 / (energy - Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5)))))), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(6)))))));
if (Double.isNaN(paramC)) {
paramC = 1;
}
double paramD = (1 - Math.exp(-1 * Math.pow((2 * Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(7)))) / (energy - Double.valueOf(Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(7))))))), Double.valueOf(NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(8)))))));
if (Double.isNaN(paramD)) {
paramD = 1;
}
double eff = paramA * paramB * paramC * paramD;
if (Double.isFinite(eff)) {
double efficiency = eff * yield;
efficiencies.add(efficiency);
}
}
}
// equation += "Efficiency = "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(1)))+" * exp(-("+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(2)))+" / E)<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(3)))+"</sup>) * "+
// "(1 - exp(-"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(4)))+" * (1 / (E - "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(5)))+"))<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(6)))+"</sup>)) * "+
// "(1 - exp(-(2 * "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(7)))+" / (E - "+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(7)))+"))<sup style=\"vertical-align:super;\">"+NumberFormatUtil.numberFormat(String.valueOf(phd.getEfficiencyParam().get(8)))+"</sup>))";
}
break;
}
//遍历获取到主峰对应的信息
Double maxEff = efficiencies.stream().max(Comparator.comparing(Double::doubleValue)).get();
//获取主峰对应的下标
int maxIndex = efficiencies.indexOf(maxEff);
mdcInfo.setEnergy(nuclideLines.venergy.get(maxIndex));
mdcInfo.setEfficiency(efficiencies.get(maxIndex) * 100 / nuclideLines.vyield.get(maxIndex));
mdcInfo.setYield(nuclideLines.vyield.get(maxIndex));
}
}

View File

@ -130,6 +130,12 @@ public class GammaController {
return gammaService.fitPeak(left, right, fileName, request);
}
@GetMapping("getGammaSelPosNuclide")
@ApiOperation(value = "gamma主页面选择channel加载对应核素信息接口", notes = "gamma主页面选择channel加载对应核素信息接口")
public Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request) {
return gammaService.getGammaSelPosNuclide(sampleId, fileName, channel, request);
}
@GetMapping("getSelPosNuclide")
@ApiOperation(value = "InteractiveTool页面选择channel加载对应核素信息接口", notes = "InteractiveTool页面选择channel加载对应核素信息接口")
public Result getSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request) {
@ -321,7 +327,7 @@ public class GammaController {
@PostMapping("changeDataEfficiency")
@ApiOperation(value = "修改Efficiency Calibration数据", notes = "修改Efficiency Calibration数据")
public Result changeDataEfficiency(@RequestBody ChangeData changeData, HttpServletRequest request) {
return gammaService.changeDataEfficiency(changeData.getM_vCurEffi(), changeData.getM_vCurEnergy(), changeData.getM_vCurUncert(), changeData.getM_curParam(), changeData.getFuncId(), changeData.getSampleId(), changeData.getFileName(), changeData.getWidth(), request);
return gammaService.changeDataEfficiency(changeData.getM_vCurEffi(), changeData.getM_vCurEnergy(), changeData.getM_vCurUncert(), changeData.getM_curParam(), changeData.getFuncId(), changeData.getSampleId(), changeData.getFileName(), changeData.getWidth(), changeData.getCurRow(), request);
}
@PostMapping("applyDataEfficiency")

View File

@ -30,4 +30,6 @@ public class ChangeData implements Serializable {
private Double width;
private Integer curRow;
}

View File

@ -0,0 +1,7 @@
package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.base.entity.rnman.GardsMDC;
public interface GardsMDCSpectrumMapper extends BaseMapper<GardsMDC> {
}

View File

@ -0,0 +1,9 @@
package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.base.entity.configuration.GardsNuclCoincidenceSum;
@Mapper
public interface GardsNuclCoincidenceSumMapper extends BaseMapper<GardsNuclCoincidenceSum> {
}

View File

@ -51,6 +51,8 @@ public interface IGammaService{
Result fitPeak(int left, int right, String fileName, HttpServletRequest request);
Result getGammaSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request);
Result getSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request);
Result addNuclide(Integer curRow, String nuclideName, String fileName, List<String> list_identify, HttpServletRequest request);
@ -113,7 +115,7 @@ public interface IGammaService{
Result EfficiencyCalibration(Integer sampleId, String fileName, String currentText, Double width, HttpServletRequest request);
Result changeDataEfficiency(List<Double> m_vCurEffi, List<Double> m_vCurEnergy, List<Double> m_vCurUncert, ParameterInfo m_curParam, Integer funcId, Integer sampleId, String fileName, Double width, HttpServletRequest request);
Result changeDataEfficiency(List<Double> m_vCurEffi, List<Double> m_vCurEnergy, List<Double> m_vCurUncert, ParameterInfo m_curParam, Integer funcId, Integer sampleId, String fileName, Double width, Integer curRow, HttpServletRequest request);
Result applyDataEfficiency(List<Double> m_vCurEffi, List<Double> m_vCurEnergy, List<Double> m_vCurUncert, ParameterInfo m_curParam, String curCalName, Integer sampleId, String fileName, HttpServletRequest request);
@ -192,4 +194,6 @@ public interface IGammaService{
void SpcToIec(MultipartFile file, HttpServletResponse response);
void IecToSpc(MultipartFile file, HttpServletResponse response);
void readMDCParameter();
}

View File

@ -0,0 +1,11 @@
package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.entity.rnman.GardsMDC;
import org.jeecg.modules.entity.vo.PHDFile;
public interface IGardsMDCSpectrumService extends IService<GardsMDC> {
int saveMDCGamma(PHDFile phd, String idAnalysis);
}

View File

@ -0,0 +1,13 @@
package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.entity.configuration.GardsNuclCoincidenceSum;
import org.jeecg.modules.entity.vo.NuclideLines;
import java.util.Map;
public interface IGardsNuclCoincidenceSumSpectrumService extends IService<GardsNuclCoincidenceSum> {
void getNuclCoincidenceMap();
}

View File

@ -0,0 +1,49 @@
package org.jeecg.modules.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.base.entity.rnman.GardsMDC;
import org.jeecg.modules.entity.vo.CalMDCInfo;
import org.jeecg.modules.entity.vo.PHDFile;
import org.jeecg.modules.mapper.GardsMDCSpectrumMapper;
import org.jeecg.modules.service.IGardsMDCSpectrumService;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@Service("mdcSpectrumService")
@DS("ora")
public class GardsMDCSpectrumServiceImpl extends ServiceImpl<GardsMDCSpectrumMapper, GardsMDC> implements IGardsMDCSpectrumService {
@Override
public int saveMDCGamma(PHDFile phd, String idAnalysis) {
Date nowDate = new Date();
Map<String, CalMDCInfo> mdcInfoMap = phd.getMdcInfoMap();
List<GardsMDC> mdcList = new LinkedList<>();
if (CollectionUtils.isNotEmpty(mdcInfoMap)) {
for (CalMDCInfo mdcInfo :mdcInfoMap.values()) {
GardsMDC mdc = new GardsMDC();
mdc.setIdAnalysis(Integer.valueOf(idAnalysis));
mdc.setSampleId(Integer.valueOf(phd.getId_sample()));
mdc.setNuclideName(mdcInfo.getNuclideName());
mdc.setEnergy(mdcInfo.getEnergy());
mdc.setYield(mdcInfo.getYield());
mdc.setEfficiency(mdcInfo.getEfficiency());
mdc.setMdc(mdcInfo.getMdc());
mdc.setMdcErr(null);
mdc.setModdate(nowDate);
mdcList.add(mdc);
}
}
if (CollectionUtils.isNotEmpty(mdcList)) {
this.saveBatch(mdcList);
}
return mdcList.size();
}
}

View File

@ -0,0 +1,52 @@
package org.jeecg.modules.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.base.entity.configuration.GardsNuclCoincidenceSum;
import org.jeecg.modules.entity.vo.NuclideLines;
import org.jeecg.modules.mapper.GardsNuclCoincidenceSumMapper;
import org.jeecg.modules.service.IGardsNuclCoincidenceSumSpectrumService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service("nuclCoincidenceService")
@DS("ora")
public class GardsNuclCoincidenceSumSpectrumServiceImpl extends ServiceImpl<GardsNuclCoincidenceSumMapper, GardsNuclCoincidenceSum> implements IGardsNuclCoincidenceSumSpectrumService {
@Autowired
private RedisUtil redisUtil;
@Override
public void getNuclCoincidenceMap() {
Map<String, NuclideLines> nuclideLinesMap = new TreeMap<>();
//查询数据库中已有的加和核素信息
LambdaQueryWrapper<GardsNuclCoincidenceSum> queryWrapper = new LambdaQueryWrapper<>();
List<GardsNuclCoincidenceSum> nuclCoincidenceSumList = this.baseMapper.selectList(queryWrapper);
//将核素信息的名称取出去重后生成对应的数组
List<String> nuclideNames = nuclCoincidenceSumList.stream().map(GardsNuclCoincidenceSum::getName).distinct().collect(Collectors.toList());
//遍历核素名称
for (String nuclideName:nuclideNames) {
List<GardsNuclCoincidenceSum> sumList = nuclCoincidenceSumList.stream().filter(item -> item.getName().equals(nuclideName)).collect(Collectors.toList());
NuclideLines nuclideLines = new NuclideLines();
for (GardsNuclCoincidenceSum coincidenceSum:sumList) {
nuclideLines.venergy.add(coincidenceSum.getEnergy());
nuclideLines.vyield.add(coincidenceSum.getYield());
nuclideLines.fullNames.add(coincidenceSum.getFullName());
nuclideLines.vuncertE.add(coincidenceSum.getEnergyUncert());
nuclideLines.vuncertY.add(coincidenceSum.getYieldUncert());
}
nuclideLinesMap.put(nuclideName, nuclideLines);
}
redisUtil.set("nuclCoincidenceSumMap", nuclideLinesMap);
}
}

View File

@ -4,6 +4,8 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.cache.BetaCache;
import org.jeecg.common.cache.LocalCache;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.service.IGammaService;
import org.jeecg.modules.service.IGardsNuclCoincidenceSumSpectrumService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
@ -27,6 +29,10 @@ public class JeecgSpectrumAnalysisApplication extends SpringBootServletInitializ
private LocalCache localCache;
@Autowired
private BetaCache betaCache;
@Autowired
private IGammaService gammaService;
@Autowired
private IGardsNuclCoincidenceSumSpectrumService nuclCoincidenceSumSpectrumService;
@Override
@ -56,5 +62,7 @@ public class JeecgSpectrumAnalysisApplication extends SpringBootServletInitializ
//创建缓存
betaCache.initCache();
localCache.initCache();
gammaService.readMDCParameter();
nuclCoincidenceSumSpectrumService.getNuclCoincidenceMap();
}
}