fix: 将新beta的自动处理和交互分析 beta分析方法整合
This commit is contained in:
parent
3ea54ffec4
commit
561a7eb610
|
@ -2,7 +2,7 @@ package org.jeecg.modules.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
||||||
import org.jeecg.modules.entity.vo.SelfXeResults;
|
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
|
||||||
import org.jeecg.modules.native_jni.struct.BgAnalyseResult;
|
import org.jeecg.modules.native_jni.struct.BgAnalyseResult;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -21,5 +21,5 @@ public interface GardsXeResultsService extends IService<GardsXeResults> {
|
||||||
*/
|
*/
|
||||||
public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer idAnalysis);
|
public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer idAnalysis);
|
||||||
|
|
||||||
void create(List<SelfXeResults> selfXeResults, Integer sampleId, Integer idAnalysis);
|
void create(List<GardsXeResultsSpectrum> selfXeResults, Integer sampleId, Integer idAnalysis);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
||||||
import org.jeecg.modules.entity.vo.SelfXeResults;
|
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
|
||||||
import org.jeecg.modules.mapper.GardsXeResultsMapper;
|
import org.jeecg.modules.mapper.GardsXeResultsMapper;
|
||||||
import org.jeecg.modules.native_jni.struct.BgAnalyseResult;
|
import org.jeecg.modules.native_jni.struct.BgAnalyseResult;
|
||||||
import org.jeecg.modules.service.BlockConstant;
|
import org.jeecg.modules.service.BlockConstant;
|
||||||
|
@ -41,9 +41,9 @@ public class GardsXeResultsServiceImpl extends ServiceImpl<GardsXeResultsMapper,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void create(List<SelfXeResults> selfXeResults, Integer sampleId, Integer idAnalysis) {
|
public void create(List<GardsXeResultsSpectrum> selfXeResults, Integer sampleId, Integer idAnalysis) {
|
||||||
List<GardsXeResults> xeResultsList = Lists.newArrayList();
|
List<GardsXeResults> xeResultsList = Lists.newArrayList();
|
||||||
for (SelfXeResults result : selfXeResults) {
|
for (GardsXeResultsSpectrum result : selfXeResults) {
|
||||||
GardsXeResults gardsXeResults = new GardsXeResults();
|
GardsXeResults gardsXeResults = new GardsXeResults();
|
||||||
BeanUtil.copyProperties(result, gardsXeResults);
|
BeanUtil.copyProperties(result, gardsXeResults);
|
||||||
gardsXeResults.setSampleId(sampleId);
|
gardsXeResults.setSampleId(sampleId);
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.jeecg.modules.base.entity.rnauto.*;
|
||||||
import org.jeecg.modules.base.enums.*;
|
import org.jeecg.modules.base.enums.*;
|
||||||
import org.jeecg.modules.config.datasource.DataSourceSwitcher;
|
import org.jeecg.modules.config.datasource.DataSourceSwitcher;
|
||||||
import org.jeecg.modules.eneity.event.SpectrumErrorEvent;
|
import org.jeecg.modules.eneity.event.SpectrumErrorEvent;
|
||||||
|
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
|
||||||
import org.jeecg.modules.entity.vo.*;
|
import org.jeecg.modules.entity.vo.*;
|
||||||
import org.jeecg.modules.enums.ErrorType;
|
import org.jeecg.modules.enums.ErrorType;
|
||||||
import org.jeecg.modules.exception.AnalySpectrumException;
|
import org.jeecg.modules.exception.AnalySpectrumException;
|
||||||
|
@ -242,8 +243,9 @@ public class Sample_C_Analysis {
|
||||||
analyseResult.setS_g_fitting_e_c(s_g_fitting_e_c);
|
analyseResult.setS_g_fitting_e_c(s_g_fitting_e_c);
|
||||||
|
|
||||||
// 执行beta分析
|
// 执行beta分析
|
||||||
List<SelfXeResults> selfXeResults = SelfBaseUtil.betaAnalyse(selfParameter, sampleStruct.POI_G_y1,
|
List<GardsXeResultsSpectrum> selfXeResults = SelfBaseUtil.betaAnalyse(selfParameter.getNuclideMap(), sampleStruct.POI_G_y1,
|
||||||
sampleStruct.POI_G_y2, sampleFilePathName, phdFile1, phdFile2, phdFile3, phdFile4);
|
sampleStruct.POI_G_y2, sampleFilePathName, phdFile1, phdFile2, phdFile3, phdFile4);
|
||||||
|
|
||||||
analyseResult.setXeResults(selfXeResults);
|
analyseResult.setXeResults(selfXeResults);
|
||||||
|
|
||||||
boolean analyFlag = analyFlag1 && analyFlag2 && analyFlag3 && analyFlag4 && !selfXeResults.isEmpty();
|
boolean analyFlag = analyFlag1 && analyFlag2 && analyFlag3 && analyFlag4 && !selfXeResults.isEmpty();
|
||||||
|
|
|
@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.modules.base.abstracts.AbstractLogOrReport;
|
import org.jeecg.modules.base.abstracts.AbstractLogOrReport;
|
||||||
import org.jeecg.modules.base.enums.CalName;
|
import org.jeecg.modules.base.enums.CalName;
|
||||||
import org.jeecg.modules.base.enums.SampleFileHeader;
|
import org.jeecg.modules.base.enums.SampleFileHeader;
|
||||||
|
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
|
||||||
import org.jeecg.modules.entity.vo.*;
|
import org.jeecg.modules.entity.vo.*;
|
||||||
import org.jeecg.modules.native_jni.CalValuesHandler;
|
import org.jeecg.modules.native_jni.CalValuesHandler;
|
||||||
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
|
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
|
||||||
|
@ -719,18 +720,16 @@ public class SelfBaseUtil extends AbstractLogOrReport {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* beta分析
|
* beta分析
|
||||||
* @param selfParameter 自建台站参数
|
* @param nuclideMap 核素参数
|
||||||
* @param POI_G_y1 limit gamma
|
* @param POI_G_y1 limit gamma
|
||||||
* @param POI_G_y2 limit gamma
|
* @param POI_G_y2 limit gamma
|
||||||
* @param betaPhdFile betaPhd文件地址
|
* @param betaPhdFile betaPhd文件地址
|
||||||
* @param gammaPhdFiles gammaPHD
|
* @param gammaPhdFiles gammaPHD
|
||||||
* @throws JsonProcessingException
|
* @throws JsonProcessingException
|
||||||
*/
|
*/
|
||||||
public static List<SelfXeResults> betaAnalyse(SelfParameter selfParameter, List<Double> POI_G_y1, List<Double> POI_G_y2,
|
public static List<GardsXeResultsSpectrum> betaAnalyse(HashMap<String, NuclideLine> nuclideMap, List<Double> POI_G_y1, List<Double> POI_G_y2,
|
||||||
String betaPhdFile, PHDFile ... gammaPhdFiles) {
|
String betaPhdFile, PHDFile ... gammaPhdFiles) {
|
||||||
|
List<GardsXeResultsSpectrum> xeDataList = Lists.newArrayList();
|
||||||
List<SelfXeResults> xeDataList = Lists.newArrayList();
|
|
||||||
HashMap<String, NuclideLine> nuclideMap = selfParameter.getNuclideMap();
|
|
||||||
|
|
||||||
// 获取峰面积、半衰期、发射几率
|
// 获取峰面积、半衰期、发射几率
|
||||||
HashMap<String, Object> nuclideParam = getBetaAnalyseNuclideParam(nuclideMap, POI_G_y1, POI_G_y2, gammaPhdFiles);
|
HashMap<String, Object> nuclideParam = getBetaAnalyseNuclideParam(nuclideMap, POI_G_y1, POI_G_y2, gammaPhdFiles);
|
||||||
|
@ -738,22 +737,27 @@ public class SelfBaseUtil extends AbstractLogOrReport {
|
||||||
// 调用beta分析算法
|
// 调用beta分析算法
|
||||||
String resultStr = EnergySpectrumHandler.selfBgAnalyse(betaPhdFile, JSON.toJSONString(nuclideParam));
|
String resultStr = EnergySpectrumHandler.selfBgAnalyse(betaPhdFile, JSON.toJSONString(nuclideParam));
|
||||||
if (StrUtil.isNotBlank(resultStr)) {
|
if (StrUtil.isNotBlank(resultStr)) {
|
||||||
xeDataList = JSON.parseArray(resultStr, SelfXeResults.class);
|
xeDataList = JSON.parseArray(resultStr, GardsXeResultsSpectrum.class);
|
||||||
xeDataList.forEach(SelfXeResults::getMdc);
|
xeDataList.forEach(GardsXeResultsSpectrum::getMdc);
|
||||||
if (CollectionUtils.isNotEmpty(xeDataList)){
|
if (CollectionUtils.isNotEmpty(xeDataList)){
|
||||||
for (SelfXeResults xeData:xeDataList) {
|
for (GardsXeResultsSpectrum xeData:xeDataList) {
|
||||||
Double conc = xeData.getConc();
|
Double conc = xeData.getConc();
|
||||||
Double mdc = xeData.getMdc();
|
Double mdc = xeData.getMdc();
|
||||||
if (conc <= 0){
|
if (conc <= 0){
|
||||||
// xeData.setColor("red");
|
xeData.setColor("red");
|
||||||
xeData.setNidFlag(0);
|
xeData.setNidFlag(0);
|
||||||
} else if (0<conc && conc < mdc) {
|
} else if (0<conc && conc < mdc) {
|
||||||
// xeData.setColor("#ffcc30");
|
xeData.setColor("#ffcc30");
|
||||||
xeData.setNidFlag(0);
|
xeData.setNidFlag(0);
|
||||||
} else if (conc > mdc) {
|
} else if (conc > mdc) {
|
||||||
// xeData.setColor("green");
|
xeData.setColor("green");
|
||||||
xeData.setNidFlag(1);
|
xeData.setNidFlag(1);
|
||||||
}
|
}
|
||||||
|
// 如果gamma谱没有识别出对应的核素 nidFlag则置为0
|
||||||
|
if (xeData.getNidFlag() == 1) {
|
||||||
|
HashMap<String, Object> param = (HashMap<String, Object>) nuclideParam.get(xeData.getNuclideName());
|
||||||
|
xeData.setNidFlag((boolean) param.get("exist") ? 1 : 0);
|
||||||
|
}
|
||||||
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
|
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
|
||||||
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
|
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
|
||||||
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
|
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
|
||||||
|
@ -814,7 +818,10 @@ public class SelfBaseUtil extends AbstractLogOrReport {
|
||||||
if (info.nuclides.contains(nuclideName)) {
|
if (info.nuclides.contains(nuclideName)) {
|
||||||
// 峰面积
|
// 峰面积
|
||||||
nuclideParam.put("area", area+"");
|
nuclideParam.put("area", area+"");
|
||||||
|
nuclideParam.put("exist", true);
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
nuclideParam.put("exist", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,36 +1,8 @@
|
||||||
package org.jeecg.modules.entity.vo;
|
package org.jeecg.modules.entity.vo;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.jeecg.modules.base.entity.rnman.GardsXeResults;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class SelfXeResults {
|
public class SelfXeResults extends GardsXeResults {
|
||||||
/**
|
|
||||||
* 核素名称
|
|
||||||
*/
|
|
||||||
private String nuclideName;
|
|
||||||
/**
|
|
||||||
* 感兴趣区活度浓度
|
|
||||||
*/
|
|
||||||
private Double conc;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 感兴趣区活度浓度不确定度
|
|
||||||
*/
|
|
||||||
private Double concErr;
|
|
||||||
/**
|
|
||||||
* 感兴趣区MDC
|
|
||||||
*/
|
|
||||||
private Double mdc;
|
|
||||||
/**
|
|
||||||
* 感兴趣区MDC
|
|
||||||
*/
|
|
||||||
private Double mda;
|
|
||||||
/**
|
|
||||||
* 感兴趣区LC
|
|
||||||
*/
|
|
||||||
private Double lc;
|
|
||||||
/**
|
|
||||||
* 感兴趣区识别标示;1:识别到,0,未识别到
|
|
||||||
*/
|
|
||||||
private Integer nidFlag;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
package org.jeecg.modules.native_jni.struct;
|
package org.jeecg.modules.native_jni.struct;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.jeecg.modules.entity.vo.SelfXeResults;
|
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class SelfBgAnalyseResult {
|
public class SelfBgAnalyseResult {
|
||||||
|
|
||||||
List<SelfXeResults> xeResults;
|
List<GardsXeResultsSpectrum> xeResults;
|
||||||
|
|
||||||
List<Double> s_b_fitting_e_c;
|
List<Double> s_b_fitting_e_c;
|
||||||
List<Double> s_g_fitting_e_c;
|
List<Double> s_g_fitting_e_c;
|
||||||
|
|
|
@ -2637,15 +2637,23 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
||||||
sampleVueData.setMapResoPara(phdOne.getMapResoPara());
|
sampleVueData.setMapResoPara(phdOne.getMapResoPara());
|
||||||
sampleVueData.setMapEffiPara(phdOne.getMapEffiPara());
|
sampleVueData.setMapEffiPara(phdOne.getMapEffiPara());
|
||||||
|
|
||||||
// 调用beta分析
|
|
||||||
List<GardsXeResultsSpectrum> betaResult = this.betaAnalyse(selfStationData, nuclideLinesMap);
|
SelfStationVueData sampleData = selfStationData.getSampleVueData();
|
||||||
|
EnergySpectrumStruct struct = selfStationData.getSampleStruct();
|
||||||
|
// 获取自建台站参数
|
||||||
|
SelfParameter selfParameter = (SelfParameter) redisUtil.get(RedisConstant.SELF_PARAMETER);
|
||||||
|
HashMap<String, NuclideLine> nuclideMap = selfParameter.getNuclideMap();
|
||||||
|
|
||||||
|
// 执行Beta分析
|
||||||
|
List<GardsXeResultsSpectrum> betaResult = SelfBaseUtil.betaAnalyse(nuclideMap, struct.POI_G_y1,
|
||||||
|
struct.POI_G_y2, selfStationData.getSampleTmpPath(), sampleData.getROIOnePHDFile(), sampleData.getROITwoPHDFile(),
|
||||||
|
sampleData.getROIThreePHDFile(), sampleData.getROIFourPHDFile());
|
||||||
resultMap.put("XeData", betaResult);
|
resultMap.put("XeData", betaResult);
|
||||||
|
|
||||||
List<GardsXeResults> xeResults = Lists.newArrayList(betaResult);
|
List<GardsXeResults> xeResults = Lists.newArrayList(betaResult);
|
||||||
betaDataFile.setXeDataList(xeResults);
|
betaDataFile.setXeDataList(xeResults);
|
||||||
betaDataFile.setXeResultsSpectrumList(betaResult);
|
betaDataFile.setXeResultsSpectrumList(betaResult);
|
||||||
|
|
||||||
EnergySpectrumStruct struct = selfStationData.getSampleStruct();
|
|
||||||
//横坐标 beta-gamma
|
//横坐标 beta-gamma
|
||||||
long bChannels = struct.b_channels;
|
long bChannels = struct.b_channels;
|
||||||
//纵坐标 gamma
|
//纵坐标 gamma
|
||||||
|
@ -2679,7 +2687,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
result.setResult(resultMap);
|
result.setResult(resultMap);
|
||||||
selfStationData.setBAnalyed(true);
|
selfStationData.setBAnalyed(true);
|
||||||
} catch (RuntimeException | AnalyseException e) {
|
} catch (RuntimeException e) {
|
||||||
Log.error("analyse error:", e);
|
Log.error("analyse error:", e);
|
||||||
result.error500(StrUtil.replace(e.getMessage(), "%s", "ROI"));
|
result.error500(StrUtil.replace(e.getMessage(), "%s", "ROI"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -2689,57 +2697,6 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* beta分析
|
|
||||||
* @param selfStationData 自建台站缓存数据
|
|
||||||
* @param nuclideLinesMap 核素信息
|
|
||||||
* @throws JsonProcessingException
|
|
||||||
*/
|
|
||||||
private List<GardsXeResultsSpectrum> betaAnalyse(SelfStationData selfStationData, Map<String, NuclideLines> nuclideLinesMap) throws Exception {
|
|
||||||
SelfStationVueData sampleData = selfStationData.getSampleVueData();
|
|
||||||
EnergySpectrumStruct struct = selfStationData.getSampleStruct();
|
|
||||||
String phdPath = selfStationData.getSampleTmpPath();
|
|
||||||
// 获取自建台站参数
|
|
||||||
SelfParameter selfParameter = (SelfParameter) redisUtil.get(RedisConstant.SELF_PARAMETER);
|
|
||||||
HashMap<String, NuclideLine> nuclideMap = selfParameter.getNuclideMap();
|
|
||||||
|
|
||||||
// 获取峰面积、半衰期、发射几率
|
|
||||||
HashMap<String, Object> nuclideParam = selfStationUtil.getBetaAnalyseNuclideParam(nuclideMap, struct.POI_G_y1,
|
|
||||||
struct.POI_G_y2, sampleData.getROIOnePHDFile(), sampleData.getROITwoPHDFile(),
|
|
||||||
sampleData.getROIThreePHDFile(), sampleData.getROIFourPHDFile());
|
|
||||||
|
|
||||||
Console.log(JSON.toJSONString(nuclideParam));
|
|
||||||
// 调用beta分析算法
|
|
||||||
String resultStr = EnergySpectrumHandler.selfBgAnalyse(phdPath, JSON.toJSONString(nuclideParam));
|
|
||||||
List<GardsXeResultsSpectrum> xeDataList = new ArrayList<>();
|
|
||||||
if (StrUtil.isNotBlank(resultStr)) {
|
|
||||||
xeDataList = JSON.parseArray(resultStr,GardsXeResultsSpectrum.class);
|
|
||||||
xeDataList.forEach(GardsXeResultsSpectrum::getMdc);
|
|
||||||
if (CollectionUtils.isNotEmpty(xeDataList)){
|
|
||||||
for (GardsXeResultsSpectrum xeData:xeDataList) {
|
|
||||||
Double conc = xeData.getConc();
|
|
||||||
Double mdc = xeData.getMdc();
|
|
||||||
if (conc <= 0){
|
|
||||||
xeData.setColor("red");
|
|
||||||
xeData.setNidFlag(0);
|
|
||||||
} else if (0<conc && conc < mdc) {
|
|
||||||
xeData.setColor("#ffcc30");
|
|
||||||
xeData.setNidFlag(0);
|
|
||||||
} else if (conc > mdc) {
|
|
||||||
xeData.setColor("green");
|
|
||||||
xeData.setNidFlag(1);
|
|
||||||
}
|
|
||||||
xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc()))));
|
|
||||||
xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
|
|
||||||
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
|
|
||||||
xeData.setMda(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMda()))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Console.log(resultStr);
|
|
||||||
return xeDataList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result InteractiveTool(Integer sampleId, String fileName, int gammaROINum, HttpServletRequest request) {
|
public Result InteractiveTool(Integer sampleId, String fileName, int gammaROINum, HttpServletRequest request) {
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user