fix:解决新beta谱 beta数据存储代码优化

This commit is contained in:
xiaoguangbin 2024-09-04 10:37:48 +08:00
parent 3287e26a6b
commit 544747a400
3 changed files with 116 additions and 184 deletions

View File

@ -1896,6 +1896,7 @@ public class SelfStationUtil extends AbstractLogOrReport {
// 通过energy带入到FHWM公式中将结果energy转化channel加减1.25之后取这个范围之内的baseline进行加和
List<Double> energyList = Lists.newLinkedList();
energyList.add(energy - (fwhm - 1.25));
// 使用gamma公式将能量转换为道址
CalValuesOut energyToChannel = CalValuesHandler.energyToChannel(energyList, phd.getUsedEnerPara().getP());
long begin = Math.round(energyToChannel.counts.get(0));
Console.log("nuclide:{},energy:{},fwhmL:{},beginChannel:{}",nuclideName, energy, (fwhm - 1.25), begin);

View File

@ -77,10 +77,6 @@ public class SelfStationData implements Serializable {
private BetaDataFile betaDataFile;
private List<List<Double>> gammaNewEnergyListNow;
private List<List<Double>> betaNewEnergyListNow;
/**
* roi limit beta start
*/
@ -101,31 +97,6 @@ public class SelfStationData implements Serializable {
//分析用到的信息
private BgCalibratePara bgPara;
private List<SeriseData> betaList;
private List<String> betaFittingPara;
private List<String> betaFittingParaToUi;
private List<SeriseData> gammaList;
private List<String> gammaFittingPara;
private List<String> gammaFittingParaToUi;
private List<SeriseData> betaListNow;
private List<String> betaFittingParaNow;
private List<String> betaFittingParaToUiNow;
private List<SeriseData> gammaListNow;
private List<String> gammaFittingParaNow;
private List<String> gammaFittingParaToUiNow;
/**
* 是否点击过Energy Calibration页面下Gamma Detector Calibration的fitting按钮
@ -166,20 +137,6 @@ public class SelfStationData implements Serializable {
sampleVueData = new SelfStationVueData();
detVueData = new SelfStationVueData();
betaList = new LinkedList<>();
betaFittingPara = new LinkedList<>();
betaFittingParaToUi = new LinkedList<>();
gammaList = new LinkedList<>();
gammaFittingPara = new LinkedList<>();
gammaFittingParaToUi = new LinkedList<>();
betaListNow = new LinkedList<>();
betaFittingParaNow = new LinkedList<>();
betaFittingParaToUiNow = new LinkedList<>();
gammaListNow = new LinkedList<>();
gammaFittingParaNow = new LinkedList<>();
gammaFittingParaToUiNow = new LinkedList<>();
bGammaEnergyValidSample = false;
bBetaEnergyValidSample = false;
bGammaEnergyValidGas = false;
@ -188,8 +145,7 @@ public class SelfStationData implements Serializable {
bBetaEnergyValidDet = false;
bAnalyed = false;
gammaNewEnergyListNow = new LinkedList<>();
betaNewEnergyListNow = new LinkedList<>();
betaDataFile = new BetaDataFile();
}

View File

@ -2032,11 +2032,12 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
String userName = JwtUtil.getUserNameByToken(request);
//获取beta的缓存数据
Cache<String, SelfStationData> cache = selfStationCache.getSelfCache();
SelfStationData betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName);
if (Objects.isNull(betaDataFile)) {
SelfStationData selfStationData = cache.getIfPresent(sampleFileName + "-" + userName);
if (Objects.isNull(selfStationData)) {
result.error500("Load basic file information first!");
return result;
}
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
//如果gamma的计算标识是false 则将gamma当前缓存数据进行重置
if (!fittingBtn) {
betaDataFile.setGammaListNow(Collections.EMPTY_LIST);
@ -2045,11 +2046,12 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
betaDataFile.setGammaNewEnergyListNow(Collections.EMPTY_LIST);
}
//获取qc的分析结果数据
EnergySpectrumStruct struct = betaDataFile.getQcStruct();
EnergySpectrumStruct struct = selfStationData.getQcStruct();
//判断qc文件的解析结果是否为空
if (Objects.nonNull(struct)){
//读取Gamma Detector Calibration所需要的参数
long numGChannel = struct.num_g_channel;
long numBChannel = struct.getNum_b_channel();
List<Double> gCentroidChannel = struct.g_centroid_channel;
List<Double> gEnergy = struct.g_energy;
int gRecordCount = struct.g_record_count;
@ -2074,7 +2076,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
}
map.put("CToE", fittingParaStr);
List<Double> channel = new LinkedList<>();
for (int i=0; i<255; ++i) {
for (int i=0; i< numGChannel - 1 ; ++i) {
channel.add(Double.valueOf(i));
}
//计算出新的道值对应能量值
@ -2167,7 +2169,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
}
map.put("newCToE", newFittingParaStr);
//填充道值数组的数据
for (int i=0; i<255; i++) {
for (int i=0; i< numBChannel -1; i++) {
channels.add(Double.valueOf(i));
}
//计算道值的能量
@ -2250,11 +2252,12 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
String userName = JwtUtil.getUserNameByToken(request);
//获取本地缓存
Cache<String, SelfStationData> cache = selfStationCache.getSelfCache();
SelfStationData betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName);
if (Objects.isNull(betaDataFile)) {
SelfStationData selfStationData = cache.getIfPresent(sampleFileName + "-" + userName);
if (Objects.isNull(selfStationData)) {
result.error500("Load basic file information first!");
return result;
}
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
//判断是否进行过计算标识为false时 清空当前beta对应的缓存数据
if (!fittingBtn) {
betaDataFile.setBetaListNow(Collections.EMPTY_LIST);
@ -2263,7 +2266,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
betaDataFile.setBetaNewEnergyListNow(Collections.EMPTY_LIST);
}
//判断qc的分析结果是否为空
EnergySpectrumStruct struct = betaDataFile.getQcStruct();
EnergySpectrumStruct struct = selfStationData.getQcStruct();
if (Objects.nonNull(struct)){
//Figure of Beta Detector Calibration
long numBChannel = struct.num_b_channel;
@ -2307,10 +2310,11 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
for (int row=0; row < gChannels; row++) {
for (int col=0; col < bChannels; col++) {
long count = hCounts[row][col];
if (count>0) {
if (count > 0) {
HistogramData histogramData = new HistogramData();
histogramData.setB(col);
histogramData.setG(row);
histogramData.setC(count);
histogramDataList.add(histogramData);
}
}
@ -2335,7 +2339,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
}
map.put("CToE", fittingParaStr);
List<Double> channel = new LinkedList<>();
for (int i=0; i<511; ++i) {
for (int i = 0; i < numBChannel - 1 ; ++i) {
channel.add(Double.valueOf(i));
}
List<Double> energy = EnergySpectrumHandler.GetFileFittingData(channel, fittingPara);
@ -2374,7 +2378,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
// gamma energy 转化 channel
Double gc = gFittingPara.get(0) + gFittingPara.get(1) * ge + gFittingPara.get(2) * Math.sqrt(ge);
// 通过gamma channel获取gammaGate数据
List<SeriseData> seriseDatas = this.getGammaGated(4096, 5, gc.intValue(), betaDataFile.getQcStruct());
List<SeriseData> seriseDatas = this.getGammaGated((int) numGChannel, 5, gc.intValue(), selfStationData.getQcStruct());
// 开始计算中心道址 范围[C_β-3(C_β ), C_β+3(C_β )]
WeightedObservedPoints points = new WeightedObservedPoints();
double left = bc - Math.cbrt(bc);
@ -2432,7 +2436,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
}
map.put("newCToE", newFittingParaStr);
//填充道值数组的数据
for (int i=0; i<255; i++) {
for (int i=0; i< numBChannel -1; i++) {
channels.add(Double.valueOf(i));
}
//计算道值的能量
@ -4024,26 +4028,6 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
xeMap.put("sampleBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isGasBgData()) {
betaDataFile.setBBetaEnergyValidGas(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setGasBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("gasBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isDetBgData()) {
betaDataFile.setBBetaEnergyValidDet(true);
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setDetBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("detBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
if (analyseData.isQcData()) {
if (CollectionUtils.isNotEmpty(betaDataFile.getBetaNewEnergyList())) {
betaDataFile.setQcBetaEnergyList(betaDataFile.getBetaNewEnergyList());
xeMap.put("qcBetaEnergyData", betaDataFile.getBetaNewEnergyList());
}
}
}
//判断是否对gamma页面进行过分析
if (analyseData.isGammaEnergyValid()) {
@ -4098,96 +4082,88 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
//判断是否勾选了sample
spectrum_group.BgCalPara.bApplyNewCalicSample = analyseData.isSampleData();
File sampleTmp = null;
File gasTmp = null;
File detTmp = null;
if (StringUtils.isNotBlank(betaDataFile.getSampleTmpPath())) {
sampleTmp = new File(betaDataFile.getSampleTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getGasTmpPath())) {
gasTmp = new File(betaDataFile.getGasTmpPath());
}
if (StringUtils.isNotBlank(betaDataFile.getDetTmpPath())) {
detTmp = new File(betaDataFile.getDetTmpPath());
}
if (Objects.nonNull(sampleTmp) && Objects.nonNull(gasTmp) && Objects.nonNull(detTmp)) {
//调用分析方法进行分析操作
boolean bRet = phdFileUtil.analyzeSpectrum(sampleTmp, gasTmp, detTmp, spectrum_group.BgCalPara, xeMap, betaDataFile);
if (analyseData.isQcData()) {
if (StringUtils.isNotBlank(betaDataFile.getQcFilePathName())) {
EnergySpectrumStruct struct = betaDataFile.getQcStruct();
if (Objects.nonNull(struct)) {
phdFileUtil.CalQCBoundary(betaList, gammaList, betaFittingParaToUi, gammaFittingParaToUi, struct, xeMap, betaDataFile);
}
}
}
if (bRet) {
List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
List<GardsXeResultsSpectrum> xeResultsSpectrumList = (List<GardsXeResultsSpectrum>) xeMap.get("XeData");
if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)){
for (GardsXeResultsSpectrum xeData: xeResultsSpectrumList) {
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()))));
}
betaDataFile.setXeResultsSpectrumList(xeResultsSpectrumList);
betaDataFile.setBProcessed(true);
betaDataFile.setSaveAnalysisResult(true);
betaDataFile.setBgPara(spectrum_group.BgCalPara);
}
xeMap.put("bProcessed", true);
xeMap.put("savedAnalysisResult", true);
} else {
List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
if(CollectionUtils.isNotEmpty(sampleBoundary)) {
betaDataFile.setSampleBoundary(sampleBoundary);
}
List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
if(CollectionUtils.isNotEmpty(gasBoundary)) {
betaDataFile.setGasBoundary(gasBoundary);
}
List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
if(CollectionUtils.isNotEmpty(detBoundary)) {
betaDataFile.setDetBoundary(detBoundary);
}
List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
if(CollectionUtils.isNotEmpty(qcBoundary)) {
betaDataFile.setQcBoundary(qcBoundary);
}
betaDataFile.setBProcessed(false);
betaDataFile.setSaveAnalysisResult(false);
betaDataFile.setXeResultsSpectrumList(Collections.EMPTY_LIST);
xeMap.put("XeData", Collections.EMPTY_LIST);
xeMap.put("bProcessed", false);
xeMap.put("savedAnalysisResult", false);
}
}
// if (Objects.nonNull(sampleTmp) && Objects.nonNull(gasTmp) && Objects.nonNull(detTmp)) {
// //调用分析方法进行分析操作
// boolean bRet = phdFileUtil.analyzeSpectrum(sampleTmp, gasTmp, detTmp, spectrum_group.BgCalPara, xeMap, betaDataFile);
// if (analyseData.isQcData()) {
// if (StringUtils.isNotBlank(betaDataFile.getQcFilePathName())) {
// EnergySpectrumStruct struct = betaDataFile.getQcStruct();
// if (Objects.nonNull(struct)) {
// phdFileUtil.CalQCBoundary(betaList, gammaList, betaFittingParaToUi, gammaFittingParaToUi, struct, xeMap, betaDataFile);
// }
// }
// }
// if (bRet) {
// List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
// if(CollectionUtils.isNotEmpty(sampleBoundary)) {
// betaDataFile.setSampleBoundary(sampleBoundary);
// }
// List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
// if(CollectionUtils.isNotEmpty(gasBoundary)) {
// betaDataFile.setGasBoundary(gasBoundary);
// }
// List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
// if(CollectionUtils.isNotEmpty(detBoundary)) {
// betaDataFile.setDetBoundary(detBoundary);
// }
// List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
// if(CollectionUtils.isNotEmpty(qcBoundary)) {
// betaDataFile.setQcBoundary(qcBoundary);
// }
// List<GardsXeResultsSpectrum> xeResultsSpectrumList = (List<GardsXeResultsSpectrum>) xeMap.get("XeData");
// if (CollectionUtils.isNotEmpty(xeResultsSpectrumList)){
// for (GardsXeResultsSpectrum xeData: xeResultsSpectrumList) {
// 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()))));
// }
// betaDataFile.setXeResultsSpectrumList(xeResultsSpectrumList);
// betaDataFile.setBProcessed(true);
// betaDataFile.setSaveAnalysisResult(true);
// betaDataFile.setBgPara(spectrum_group.BgCalPara);
// }
// xeMap.put("bProcessed", true);
// xeMap.put("savedAnalysisResult", true);
// } else {
// List<Boundary> sampleBoundary = (List<Boundary>) xeMap.get("SampleBoundary");
// if(CollectionUtils.isNotEmpty(sampleBoundary)) {
// betaDataFile.setSampleBoundary(sampleBoundary);
// }
// List<Boundary> gasBoundary = (List<Boundary>) xeMap.get("GasBoundary");
// if(CollectionUtils.isNotEmpty(gasBoundary)) {
// betaDataFile.setGasBoundary(gasBoundary);
// }
// List<Boundary> detBoundary = (List<Boundary>) xeMap.get("DetBoundary");
// if(CollectionUtils.isNotEmpty(detBoundary)) {
// betaDataFile.setDetBoundary(detBoundary);
// }
// List<Boundary> qcBoundary = (List<Boundary>) xeMap.get("QCBoundary");
// if(CollectionUtils.isNotEmpty(qcBoundary)) {
// betaDataFile.setQcBoundary(qcBoundary);
// }
// betaDataFile.setBProcessed(false);
// betaDataFile.setSaveAnalysisResult(false);
// betaDataFile.setXeResultsSpectrumList(Collections.EMPTY_LIST);
// xeMap.put("XeData", Collections.EMPTY_LIST);
// xeMap.put("bProcessed", false);
// xeMap.put("savedAnalysisResult", false);
// }
// }
} catch (Exception e) {
e.printStackTrace();
}
@ -4727,6 +4703,9 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
result.error500("Load basic file information first!");
return result;
}
EnergySpectrumStruct struct = selfStationData.getQcStruct();
long numBChannel = struct.getNum_b_channel();
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
Map<String, Object> map = new HashMap<>();
//记录点位的x轴数据
List<Double> xs = new LinkedList<>();
@ -4857,7 +4836,7 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
map.put("tableWidgets", tableWidgets);
map.put("newScatterSeriesData", seriseDataList);
//填充道值数组的数据
for (int i=0; i<255; i++) {
for (int i=0; i< numBChannel -1; i++) {
channels.add(Double.valueOf(i));
}
//根据道值和公式参数计算新的能量数据
@ -4883,20 +4862,20 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
map.put("EToC", fittingParaToUiStr);
}
if (tabName.equalsIgnoreCase("beta")) {
selfStationData.setBetaListNow(tempPoints);
selfStationData.setBetaFittingParaNow(fittingParaStr);
selfStationData.setBetaFittingParaToUiNow(fittingParaToUiStr);
selfStationData.setBetaNewEnergyListNow(energyList);
betaDataFile.setBetaListNow(tempPoints);
betaDataFile.setBetaFittingParaNow(fittingParaStr);
betaDataFile.setBetaFittingParaToUiNow(fittingParaToUiStr);
betaDataFile.setBetaNewEnergyListNow(energyList);
} else if (tabName.equalsIgnoreCase("gamma")) {
selfStationData.setGammaListNow(tempPoints);
selfStationData.setGammaFittingParaNow(fittingParaStr);
selfStationData.setGammaFittingParaToUiNow(fittingParaToUiStr);
selfStationData.setGammaNewEnergyListNow(energyList);
betaDataFile.setGammaListNow(tempPoints);
betaDataFile.setGammaFittingParaNow(fittingParaStr);
betaDataFile.setGammaFittingParaToUiNow(fittingParaToUiStr);
betaDataFile.setGammaNewEnergyListNow(energyList);
//gamma的进行计算后将当前的beta缓存的数据进行重置
selfStationData.setBetaListNow(Collections.EMPTY_LIST);
selfStationData.setBetaFittingParaNow(Collections.EMPTY_LIST);
selfStationData.setBetaFittingParaToUiNow(Collections.EMPTY_LIST);
selfStationData.setBetaNewEnergyListNow(Collections.EMPTY_LIST);
betaDataFile.setBetaListNow(Collections.EMPTY_LIST);
betaDataFile.setBetaFittingParaNow(Collections.EMPTY_LIST);
betaDataFile.setBetaFittingParaToUiNow(Collections.EMPTY_LIST);
betaDataFile.setBetaNewEnergyListNow(Collections.EMPTY_LIST);
}
result.setSuccess(true);
result.setResult(map);
@ -4970,11 +4949,9 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
String userName = JwtUtil.getUserNameByToken(request);
//获取自建台站缓存信息
Cache<String, SelfStationData> selfCache = selfStationCache.getSelfCache();
SelfStationData betaDataFile = selfCache.getIfPresent(sampleFileName + StringPool.DASH + userName);
//获取缓存信息
// Cache<String, BetaDataFile> cache = betaCache.getBetaCache();
// BetaDataFile betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName);
if (Objects.nonNull(betaDataFile)) {
SelfStationData selfStationData = selfCache.getIfPresent(sampleFileName + StringPool.DASH + userName);
if (Objects.nonNull(selfStationData)) {
BetaDataFile betaDataFile = selfStationData.getBetaDataFile();
//判断需要重置的tab页
if (tabName.equalsIgnoreCase("gamma")) {
betaDataFile.setGammaListNow(Collections.EMPTY_LIST);
@ -4994,8 +4971,6 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
}
}
@Override
public Result NuclideLibrary(Integer sampleId, String fileName, String editEnergy, double err, String libraryName, String nuclideName, HttpServletRequest request) {
Result result = new Result();