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 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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue
Block a user