fix:自建台站beta分析

This commit is contained in:
xiaoguangbin 2024-08-22 11:19:29 +08:00
parent 356bd94a26
commit 5719c210ca
4 changed files with 57 additions and 21 deletions

View File

@ -27,8 +27,6 @@ public class CalValuesHandler {
public static native String analyseSpectrum(String phd, String mapLines, String phdFilePath, AnalysisProcess process);
public static native String selfBgAnalyse(String PHDPath, String param);
public static native String fitPeakFull(String phd, List<Integer> Af, List<Integer> Cf, List<Integer> Ff);
}

View File

@ -84,4 +84,5 @@ public class EnergySpectrumHandler {
public static native List<Double> GetFittingData(List<Double> data, String fitType, List<Double> fittingPara);
public static native String selfBgAnalyse(String PHDPath, String param);
}

View File

@ -38,6 +38,10 @@ public class GardsXeResultsSpectrum implements Serializable {
* 感兴趣区MDC
*/
private Double mdc;
/**
* 感兴趣区MDC
*/
private Double mda;
/**
* 感兴趣区LC
*/

View File

@ -487,7 +487,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
String detFilePath = path + StringPool.SLASH + detFileName;
//返回结果map
Map<String, Object> map = new HashMap<>();
//获取sample分析后的对象
//获取det分析后的对象
EnergySpectrumStruct struct = selfStationUtil.getSourceData(detFilePath, "det", selfStationData);
if (Objects.nonNull(struct)) {
selfStationData.setDetStruct(struct);
@ -506,7 +506,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
String qcFilePath = path + StringPool.SLASH + qcFileName;
//返回结果map
Map<String, Object> map = new HashMap<>();
//获取sample分析后的对象
//获取QC分析后的对象
EnergySpectrumStruct struct = selfStationUtil.getSourceData(qcFilePath, "qc", selfStationData);
if (Objects.nonNull(struct)) {
selfStationData.setQcStruct(struct);
@ -2547,7 +2547,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
PHDFile phdFour = sampleVueData.getROIFourPHDFile();
Map<String, NuclideLines> nuclideLinesMap = (Map<String, NuclideLines>) redisUtil.get(userName+StringPool.DASH+phdOne.getHeader().getSystem_type()+"-self");
Map<String, Object> roiMap = new HashMap<>();
Map<String, Object> resultMap = new HashMap<>();
try {
boolean bROI1 = selfStationUtil.checkROIRenew(sampleVueData, SelfStationConstant.ROI1);
boolean bROI2 = selfStationUtil.checkROIRenew(sampleVueData, SelfStationConstant.ROI2);
@ -2564,20 +2564,17 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
}
// 如果参数修改 或者 修改某个ROI 只重新分析某个gamma
if (flag != 0 || bROI1) {
roiMap.put(SelfStationConstant.ROI1, this.gammaAnalyse(processKey, phdOne, nuclideLinesMap, colorMap, flag));
resultMap.put(SelfStationConstant.ROI1, this.gammaAnalyse(processKey, phdOne, nuclideLinesMap, colorMap, flag));
}
if (flag != 0 || bROI2) {
roiMap.put(SelfStationConstant.ROI2, this.gammaAnalyse(processKey, phdTwo, nuclideLinesMap, colorMap, flag));
resultMap.put(SelfStationConstant.ROI2, this.gammaAnalyse(processKey, phdTwo, nuclideLinesMap, colorMap, flag));
}
if (flag != 0 || bROI3) {
roiMap.put(SelfStationConstant.ROI3, this.gammaAnalyse(processKey, phdThree, nuclideLinesMap, colorMap, flag));
resultMap.put(SelfStationConstant.ROI3, this.gammaAnalyse(processKey, phdThree, nuclideLinesMap, colorMap, flag));
}
if (flag != 0 || bROI4) {
roiMap.put(SelfStationConstant.ROI4, this.gammaAnalyse(processKey, phdFour, nuclideLinesMap, colorMap, flag));
resultMap.put(SelfStationConstant.ROI4, this.gammaAnalyse(processKey, phdFour, nuclideLinesMap, colorMap, flag));
}
// roiMap.put(SelfStationConstant.ROI2, this.gammaAnalyse(processKey, phdTwo, nuclideLinesMap, colorMap, bROI2));
// roiMap.put(SelfStationConstant.ROI3, this.gammaAnalyse(processKey, phdThree, nuclideLinesMap, colorMap, bROI3));
// roiMap.put(SelfStationConstant.ROI4, this.gammaAnalyse(processKey, phdFour, nuclideLinesMap, colorMap, bROI4));
// 用于下次分析判断是否更新
sampleVueData.setUsedROIOneBetaStart(sampleVueData.getROIOneBetaStart());
sampleVueData.setUsedROIOneBetaStop(sampleVueData.getROIOneBetaStop());
@ -2602,11 +2599,12 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
sampleVueData.setMapResoPara(phdOne.getMapResoPara());
sampleVueData.setMapEffiPara(phdOne.getMapEffiPara());
// todo 调用beta分析
this.betaAnalyse(selfStationData.getSampleFilePathName(), selfStationData, nuclideLinesMap);
// 调用beta分析
List<GardsXeResultsSpectrum> betaResult = this.betaAnalyse(selfStationData, nuclideLinesMap);
resultMap.put("XeData", betaResult);
result.setSuccess(true);
result.setResult(roiMap);
result.setResult(resultMap);
selfStationData.setBAnalyed(true);
} catch (RuntimeException e) {
Log.error("analyse error", e);
@ -2617,10 +2615,16 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
return result;
}
private void betaAnalyse(String phdPath, SelfStationData selfStationData, Map<String, NuclideLines> nuclideLinesMap) throws JsonProcessingException {
/**
* beta分析
* @param selfStationData 自建台站缓存数据
* @param nuclideLinesMap 核素信息
* @throws JsonProcessingException
*/
private List<GardsXeResultsSpectrum> betaAnalyse(SelfStationData selfStationData, Map<String, NuclideLines> nuclideLinesMap) throws JsonProcessingException {
SelfStationVueData sampleData = selfStationData.getSampleVueData();
EnergySpectrumStruct struct = selfStationData.getSampleStruct();
String phdPath = selfStationData.getSampleFilePathName();
// 获取自建台站参数
SelfParameter selfParameter = (SelfParameter) redisUtil.get(RedisConstant.SELF_PARAMETER);
HashMap<String, NuclideLine> nuclideMap = selfParameter.getNuclideMap();
@ -2629,9 +2633,32 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
HashMap<String, Object> nuclideParam = this.getBetaAnalyseNuclideParam(sampleData, nuclideMap, struct.POI_G_y1, struct.POI_G_y2, nuclideLinesMap);
Console.log(JSON.toJSONString(nuclideParam));
// 调用beta分析算法
ObjectMapper mapper = new ObjectMapper();
String result = CalValuesHandler.selfBgAnalyse(phdPath, JSON.toJSONString(mapper.writeValueAsString(nuclideParam)));
Console.log(result);
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()))));
}
}
}
Console.log(resultStr);
return xeDataList;
}
/**
@ -2701,8 +2728,14 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
return param;
}
/**
* 得到 baseline计数
* @param sampleData 谱数据
* @param nuclideName 核素名称
* @param energy 能量
* @return
*/
private double getBetaAnalyseBaseLineCount(SelfStationVueData sampleData,String nuclideName, Double energy) {
HashMap<String, Object> nuclideParam = Maps.newHashMap();
double baseLineCount = 0;
String currentText = null;
List<Double> vBase = null;