fix: 将新beta的自动处理和交互分析 beta分析方法整合

This commit is contained in:
xiaoguangbin 2024-12-04 17:04:57 +08:00
parent 3ea54ffec4
commit 561a7eb610
7 changed files with 43 additions and 105 deletions

View File

@ -2,7 +2,7 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
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 java.util.List;
@ -21,5 +21,5 @@ public interface GardsXeResultsService extends IService<GardsXeResults> {
*/
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);
}

View File

@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
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.native_jni.struct.BgAnalyseResult;
import org.jeecg.modules.service.BlockConstant;
@ -41,9 +41,9 @@ public class GardsXeResultsServiceImpl extends ServiceImpl<GardsXeResultsMapper,
}
@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();
for (SelfXeResults result : selfXeResults) {
for (GardsXeResultsSpectrum result : selfXeResults) {
GardsXeResults gardsXeResults = new GardsXeResults();
BeanUtil.copyProperties(result, gardsXeResults);
gardsXeResults.setSampleId(sampleId);

View File

@ -27,6 +27,7 @@ import org.jeecg.modules.base.entity.rnauto.*;
import org.jeecg.modules.base.enums.*;
import org.jeecg.modules.config.datasource.DataSourceSwitcher;
import org.jeecg.modules.eneity.event.SpectrumErrorEvent;
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
import org.jeecg.modules.entity.vo.*;
import org.jeecg.modules.enums.ErrorType;
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);
// 执行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);
analyseResult.setXeResults(selfXeResults);
boolean analyFlag = analyFlag1 && analyFlag2 && analyFlag3 && analyFlag4 && !selfXeResults.isEmpty();

View File

@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.base.abstracts.AbstractLogOrReport;
import org.jeecg.modules.base.enums.CalName;
import org.jeecg.modules.base.enums.SampleFileHeader;
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
import org.jeecg.modules.entity.vo.*;
import org.jeecg.modules.native_jni.CalValuesHandler;
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
@ -719,18 +720,16 @@ public class SelfBaseUtil extends AbstractLogOrReport {
/**
* beta分析
* @param selfParameter 自建台站参数
* @param nuclideMap 核素参数
* @param POI_G_y1 limit gamma
* @param POI_G_y2 limit gamma
* @param betaPhdFile betaPhd文件地址
* @param gammaPhdFiles gammaPHD
* @throws JsonProcessingException
*/
public static List<SelfXeResults> betaAnalyse(SelfParameter selfParameter, List<Double> POI_G_y1, List<Double> POI_G_y2,
String betaPhdFile, PHDFile ... gammaPhdFiles) {
List<SelfXeResults> xeDataList = Lists.newArrayList();
HashMap<String, NuclideLine> nuclideMap = selfParameter.getNuclideMap();
public static List<GardsXeResultsSpectrum> betaAnalyse(HashMap<String, NuclideLine> nuclideMap, List<Double> POI_G_y1, List<Double> POI_G_y2,
String betaPhdFile, PHDFile ... gammaPhdFiles) {
List<GardsXeResultsSpectrum> xeDataList = Lists.newArrayList();
// 获取峰面积半衰期发射几率
HashMap<String, Object> nuclideParam = getBetaAnalyseNuclideParam(nuclideMap, POI_G_y1, POI_G_y2, gammaPhdFiles);
@ -738,22 +737,27 @@ public class SelfBaseUtil extends AbstractLogOrReport {
// 调用beta分析算法
String resultStr = EnergySpectrumHandler.selfBgAnalyse(betaPhdFile, JSON.toJSONString(nuclideParam));
if (StrUtil.isNotBlank(resultStr)) {
xeDataList = JSON.parseArray(resultStr, SelfXeResults.class);
xeDataList.forEach(SelfXeResults::getMdc);
xeDataList = JSON.parseArray(resultStr, GardsXeResultsSpectrum.class);
xeDataList.forEach(GardsXeResultsSpectrum::getMdc);
if (CollectionUtils.isNotEmpty(xeDataList)){
for (SelfXeResults xeData:xeDataList) {
for (GardsXeResultsSpectrum xeData:xeDataList) {
Double conc = xeData.getConc();
Double mdc = xeData.getMdc();
if (conc <= 0){
// xeData.setColor("red");
xeData.setColor("red");
xeData.setNidFlag(0);
} else if (0<conc && conc < mdc) {
// xeData.setColor("#ffcc30");
xeData.setColor("#ffcc30");
xeData.setNidFlag(0);
} else if (conc > mdc) {
// xeData.setColor("green");
xeData.setColor("green");
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.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc()))));
xeData.setConcErr(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConcErr()))));
@ -814,7 +818,10 @@ public class SelfBaseUtil extends AbstractLogOrReport {
if (info.nuclides.contains(nuclideName)) {
// 峰面积
nuclideParam.put("area", area+"");
nuclideParam.put("exist", true);
break;
} else {
nuclideParam.put("exist", false);
}
}
}

View File

@ -1,36 +1,8 @@
package org.jeecg.modules.entity.vo;
import lombok.Data;
import org.jeecg.modules.base.entity.rnman.GardsXeResults;
@Data
public class SelfXeResults {
/**
* 核素名称
*/
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;
public class SelfXeResults extends GardsXeResults {
}

View File

@ -1,14 +1,14 @@
package org.jeecg.modules.native_jni.struct;
import lombok.Data;
import org.jeecg.modules.entity.vo.SelfXeResults;
import org.jeecg.modules.entity.GardsXeResultsSpectrum;
import java.util.List;
@Data
public class SelfBgAnalyseResult {
List<SelfXeResults> xeResults;
List<GardsXeResultsSpectrum> xeResults;
List<Double> s_b_fitting_e_c;
List<Double> s_g_fitting_e_c;

View File

@ -2637,15 +2637,23 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
sampleVueData.setMapResoPara(phdOne.getMapResoPara());
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);
List<GardsXeResults> xeResults = Lists.newArrayList(betaResult);
betaDataFile.setXeDataList(xeResults);
betaDataFile.setXeResultsSpectrumList(betaResult);
EnergySpectrumStruct struct = selfStationData.getSampleStruct();
//横坐标 beta-gamma
long bChannels = struct.b_channels;
//纵坐标 gamma
@ -2679,7 +2687,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
result.setSuccess(true);
result.setResult(resultMap);
selfStationData.setBAnalyed(true);
} catch (RuntimeException | AnalyseException e) {
} catch (RuntimeException e) {
Log.error("analyse error", e);
result.error500(StrUtil.replace(e.getMessage(), "%s", "ROI"));
} catch (Exception e) {
@ -2689,57 +2697,6 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
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
public Result InteractiveTool(Integer sampleId, String fileName, int gammaROINum, HttpServletRequest request) {
Result result = new Result();