人工交互分析模块增加启动时读取mdc参数文件内容缓存方法
人工交互分析模块增加启动时读取加和核素信息内容方法 人工交互分析模块gamma分析部分新增主页面查询附近峰核素信息接口 人工交互分析模块gamma分析部分新增分析时计算部分特殊核素的mdc值方法 人工交互分析模块gamma分析部分存储数据库方法增加存储mdc计算结果相关代码 人工交互分析模块gamma分析部分增加新实体类自动处理GardsMDC表,人工交互GardsMDC表,记录计算结果CalMDCInfo表 人工交互分析模块gamma分析部分Efficiency切换方法接口重新计算公式代码修改 人工交互分析模块gamma分析部分PHDFile实体类增加字段记录重新获取计算公式时使用的参数内容,缓存mdc计算结果的参数字段
This commit is contained in:
parent
e15047e259
commit
4b6b3046c4
|
@ -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;
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -30,4 +30,6 @@ public class ChangeData implements Serializable {
|
|||
|
||||
private Double width;
|
||||
|
||||
private Integer curRow;
|
||||
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
}
|
|
@ -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> {
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user