fix:将dll的h_counts去掉,java通过二维数组解析并存储来解决自建台站beta 加载慢问题
This commit is contained in:
parent
b4b2b38fa0
commit
a441eb6ad1
|
@ -17,6 +17,13 @@ public class EnergySpectrumHandler {
|
|||
*/
|
||||
public static native EnergySpectrumStruct getSourceData(String path);
|
||||
|
||||
/**
|
||||
* 获取能谱原始数据, 不解析histogram块
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
public static native EnergySpectrumStruct getSourceDataNotHis(String path);
|
||||
|
||||
/**
|
||||
* 根据不同的拟合方法计算边界值, 默认2次拟合 可以继承书写新的拟合
|
||||
* @param calcBgBoundaryParam
|
||||
|
|
|
@ -390,6 +390,8 @@ public class EnergySpectrumStruct {
|
|||
*/
|
||||
public List<Long> h_counts;
|
||||
|
||||
public long[][] h_count_arr;
|
||||
|
||||
/************************* Certificate_Block ******************/
|
||||
/**
|
||||
* total source activity (Bq)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package org.jeecg.common.util;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IORuntimeException;
|
||||
import cn.hutool.core.lang.Console;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
|
@ -15,6 +17,7 @@ import org.jeecg.common.properties.ParameterProperties;
|
|||
import org.jeecg.modules.base.abstracts.AbstractLogOrReport;
|
||||
import org.jeecg.modules.base.enums.CalName;
|
||||
import org.jeecg.modules.base.enums.DataTypeAbbr;
|
||||
import org.jeecg.modules.base.enums.SampleFileHeader;
|
||||
import org.jeecg.modules.entity.GardsCalibrationSpectrum;
|
||||
import org.jeecg.modules.entity.GardsROIChannelsSpectrum;
|
||||
import org.jeecg.modules.entity.GardsROIResultsSpectrum;
|
||||
|
@ -35,10 +38,7 @@ import org.xml.sax.SAXException;
|
|||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.*;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.*;
|
||||
|
@ -154,6 +154,207 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
List<Integer> roiBBoundaryStart = bgBoundary.ROI_B_Boundary_start;
|
||||
List<Integer> roiBBoundaryStop = bgBoundary.ROI_B_Boundary_stop;
|
||||
|
||||
//根据范围1划分 范围1对应的折线图
|
||||
Map<String, Object> gammaByROI = this.getGammaByROI(systemType, roiBBoundaryStart, roiBBoundaryStop, selfStationData);
|
||||
map.putAll(gammaByROI);
|
||||
//统计散点图
|
||||
//横坐标 beta-gamma
|
||||
long bChannels = struct.b_channels;
|
||||
//纵坐标 gamma
|
||||
long gChannels = struct.g_channels;
|
||||
//值
|
||||
long[][] h_count_arr = struct.h_count_arr;
|
||||
List<HistogramData> histogramDataList = new LinkedList<>();
|
||||
List<HistogramData> histogramDataDList = new LinkedList<>();
|
||||
for (int i=0; i<gChannels; i++){
|
||||
for (int j=0; j< bChannels; j++){
|
||||
Long index = i * bChannels + j;
|
||||
// Long count = hCounts.get(index.intValue());
|
||||
Long count = h_count_arr[i][j];
|
||||
if (count > 0){
|
||||
HistogramData his = new HistogramData();
|
||||
his.setG(i);
|
||||
his.setB(j);
|
||||
his.setC(count);
|
||||
histogramDataList.add(his);
|
||||
histogramDataDList.add(his);
|
||||
}else {
|
||||
HistogramData his = new HistogramData();
|
||||
his.setG(i);
|
||||
his.setB(j);
|
||||
his.setC(count);
|
||||
histogramDataDList.add(his);
|
||||
}
|
||||
}
|
||||
}
|
||||
map.put("histogramDataList", histogramDataList);
|
||||
// map.put("histogramDataDList", histogramDataDList);
|
||||
//调用算法 传入道值和道值对应的能量 得到计算gamma能量公式的参数
|
||||
List<Double> gammaParam = EnergySpectrumHandler.GetFileFittingPara(struct.g_centroid_channel, struct.g_energy);
|
||||
//存储需要计算gamma能量的道值
|
||||
List<Double> gchannels = new ArrayList<>();
|
||||
for (int i=0; i<gChannels; i++){
|
||||
gchannels.add(Double.valueOf(i));
|
||||
}
|
||||
//调用算法 传递gamma参与计算的道值以及计算公式参数 得到各道值对应的能量
|
||||
List<Double> gammaEnergyList = EnergySpectrumHandler.GetFileFittingData(gchannels, gammaParam);
|
||||
//将gamma能量折线图进行赋值返回
|
||||
map.put("gammaEnergyData", gammaEnergyList);
|
||||
//调用算法 传入道值和道值对应的能量 得到计算beta能量公式的参数
|
||||
List<Double> betaParam = EnergySpectrumHandler.GetFileFittingPara(struct.b_channel, struct.b_electron_energy);
|
||||
List<Double> bchannels = new ArrayList<>();
|
||||
for (int i=0; i<bChannels; i++){
|
||||
bchannels.add(Double.valueOf(i));
|
||||
}
|
||||
//传入道值和计算公式的参数计算出各道值对应的beta能量
|
||||
List<Double> betaEnergyList = EnergySpectrumHandler.GetFileFittingData(bchannels, betaParam);
|
||||
//将beta能量折线图进行赋值返回
|
||||
map.put("betaEnergyData", betaEnergyList);
|
||||
|
||||
//g_Energy
|
||||
if (CollectionUtils.isNotEmpty(struct.g_energy) && CollectionUtils.isNotEmpty(struct.g_centroid_channel) && CollectionUtils.isNotEmpty(struct.g_uncertainty) && Objects.nonNull(struct.g_record_count)) {
|
||||
if (systemType.equals("sample")) {
|
||||
GEnergyBlock gEnergyBlock = new GEnergyBlock();
|
||||
gEnergyBlock.setG_energy(struct.g_energy);
|
||||
gEnergyBlock.setCentroid_channel(struct.g_centroid_channel);
|
||||
gEnergyBlock.setUncertainty(struct.g_uncertainty);
|
||||
gEnergyBlock.setRecord_count(struct.g_record_count);
|
||||
sampleVueData.getMapEnerKD().put(CalName.CalPHD.getType(), gEnergyBlock);
|
||||
//计算得到公式的参数
|
||||
List<Double> calEnergyParam = CalValuesHandler.calFitPara("Cal_Energy", 2, struct.g_centroid_channel, struct.g_energy, struct.g_uncertainty);
|
||||
ParameterInfo parameterInfo = new ParameterInfo();
|
||||
parameterInfo.setP(calEnergyParam);
|
||||
sampleVueData.getMapEnerPara().put(CalName.CalPHD.getType(), parameterInfo);
|
||||
}
|
||||
}
|
||||
//g_Resolution
|
||||
if (CollectionUtils.isNotEmpty(struct.g_r_energy) && CollectionUtils.isNotEmpty(struct.g_r_FWHM) && CollectionUtils.isNotEmpty(struct.g_r_uncertainty) && Objects.nonNull(struct.g_r_record_count)) {
|
||||
if (systemType.equals("sample")) {
|
||||
GResolutionBlock gResolutionBlock = new GResolutionBlock();
|
||||
gResolutionBlock.setG_energy(struct.g_r_energy);
|
||||
gResolutionBlock.setFWHM(struct.g_r_FWHM);
|
||||
gResolutionBlock.setUncertainty(struct.g_r_uncertainty);
|
||||
gResolutionBlock.setRecord_count(struct.g_r_record_count);
|
||||
sampleVueData.getMapResoKD().put(CalName.CalPHD.getType(), gResolutionBlock);
|
||||
//计算得到公式的参数
|
||||
List<Double> calEnergyParam = CalValuesHandler.calFitPara("Cal_Resolution", 4, struct.g_r_energy, struct.g_r_FWHM, struct.g_r_uncertainty);
|
||||
ParameterInfo parameterInfo = new ParameterInfo();
|
||||
parameterInfo.setP(calEnergyParam);
|
||||
sampleVueData.getMapResoPara().put(CalName.CalPHD.getType(), parameterInfo);
|
||||
}
|
||||
}
|
||||
//g_Efficiency
|
||||
if (CollectionUtils.isNotEmpty(struct.g_e_energy) && CollectionUtils.isNotEmpty(struct.g_e_efficiency) && CollectionUtils.isNotEmpty(struct.g_e_uncertainty) && Objects.nonNull(struct.g_e_record_count)) {
|
||||
if (systemType.equals("sample")) {
|
||||
GEfficiencyBlock gEfficiencyBlock = new GEfficiencyBlock();
|
||||
gEfficiencyBlock.setG_energy(struct.g_e_energy);
|
||||
gEfficiencyBlock.setEfficiency(struct.g_e_efficiency);
|
||||
gEfficiencyBlock.setUncertainty(struct.g_e_uncertainty);
|
||||
gEfficiencyBlock.setRecord_count(struct.g_e_record_count);
|
||||
sampleVueData.getMapEffiKD().put(CalName.CalPHD.getType(), gEfficiencyBlock);
|
||||
//计算得到公式的参数
|
||||
List<Double> calEnergyParam = CalValuesHandler.calFitPara("Cal_Efficiency", 1, struct.g_e_energy, struct.g_e_efficiency, struct.g_e_uncertainty);
|
||||
ParameterInfo parameterInfo = new ParameterInfo();
|
||||
parameterInfo.setP(calEnergyParam);
|
||||
sampleVueData.getMapEffiPara().put(CalName.CalPHD.getType(), parameterInfo);
|
||||
}
|
||||
}
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
public void loadFile(EnergySpectrumStruct struct, SelfStationData selfStationData, Integer sampleId, String status, String systemType, Map<String, Object> map) {
|
||||
try {
|
||||
SelfStationVueData sampleVueData = selfStationData.getSampleVueData();
|
||||
SelfStationVueData detVueData = selfStationData.getDetVueData();
|
||||
|
||||
//封装散点图下的基础数据信息
|
||||
SpectrumData spectrumData = new SpectrumData();
|
||||
//Station Code
|
||||
String stationCode = struct.site_code;
|
||||
//Detector Code
|
||||
String detectorCode = struct.detector_code;
|
||||
//Data Type
|
||||
String dataType = struct.data_type;
|
||||
//Collection Start
|
||||
Date CollectionStart = null;
|
||||
if ( StringUtils.isNotBlank(struct.collection_start_date) && StringUtils.isNotBlank(struct.collection_start_time) ){
|
||||
CollectionStart = DateUtils.parseDate(struct.collection_start_date + StringPool.SPACE + struct.collection_start_time);
|
||||
}
|
||||
//Collection Stop
|
||||
Date CollectionStop = null;
|
||||
if ( StringUtils.isNotBlank(struct.collection_stop_date) && StringUtils.isNotBlank(struct.collection_stop_time) ){
|
||||
CollectionStop = DateUtils.parseDate(struct.collection_stop_date + StringPool.SPACE + struct.collection_stop_time);
|
||||
}
|
||||
//Collection Time
|
||||
String CollectionTime = "";
|
||||
if ( Objects.nonNull(CollectionStart) && Objects.nonNull(CollectionStop) ){
|
||||
CollectionTime = String.format ("%.2f",Double.valueOf((CollectionStop.getTime() - CollectionStart.getTime())/ 1000));
|
||||
}
|
||||
//Acquisition Start
|
||||
Date AcquisitionStart = null;
|
||||
if ( StringUtils.isNotBlank(struct.acquisition_start_date) && StringUtils.isNotBlank(struct.acquisition_start_time) ){
|
||||
AcquisitionStart = DateUtils.parseDate(struct.acquisition_start_date + StringPool.SPACE + struct.acquisition_start_time);
|
||||
}
|
||||
//Acq Real Time
|
||||
double AcquisitionRealTime = struct.acquisition_real_time;
|
||||
//Acq live Time
|
||||
double AcquisitionLiveTime = struct.acquisition_live_time;
|
||||
//Air Volume[m3]
|
||||
double airVolume = struct.air_volume;
|
||||
//Xe Volume[m3]
|
||||
double xeVolume = struct.sample_volume_of_Xe;
|
||||
//xeCollectionYield
|
||||
double xeCollectionYield = struct.Xe_collection_yield;
|
||||
//gasBkMeasurementId
|
||||
String gasBkMeasurementId = struct.gas_bk_measurement_id;
|
||||
//detectorBkMeasurementId
|
||||
String detectorBkMeasurementId = struct.detector_bk_measurement_id;
|
||||
//measurementId
|
||||
String measurementId = struct.measurement_id;
|
||||
spectrumData.setSampleId(sampleId);
|
||||
spectrumData.setStatus(status);
|
||||
spectrumData.setStationCode(stationCode);
|
||||
spectrumData.setDetectorCode(detectorCode);
|
||||
spectrumData.setDataType(dataType);
|
||||
spectrumData.setCollectionStart(CollectionStart);
|
||||
spectrumData.setCollectionStop(CollectionStop);
|
||||
spectrumData.setCollectionTime(CollectionTime);
|
||||
spectrumData.setAcquisitionStart(AcquisitionStart);
|
||||
spectrumData.setAcquisitionRealTime(String.format("%.2f", AcquisitionRealTime));
|
||||
spectrumData.setAcquisitionLiveTime(String.format("%.2f", AcquisitionLiveTime));
|
||||
spectrumData.setAirVolume(String.format("%.5f", airVolume));
|
||||
spectrumData.setXeVolume(String.format("%.5f", xeVolume));
|
||||
spectrumData.setYield(xeCollectionYield);
|
||||
spectrumData.setGasBkMeasurementId(gasBkMeasurementId);
|
||||
spectrumData.setDetectorBkMeasurementId(detectorBkMeasurementId);
|
||||
spectrumData.setMeasurementId(measurementId);
|
||||
map.put("spectrumData", spectrumData);
|
||||
|
||||
//gamma能量部分的计算参数 道值对应能量
|
||||
List<Double> gEnergy = struct.g_energy;
|
||||
//gamma能量部分的计算参数 道值
|
||||
List<Double> gCentroidChannel = struct.g_centroid_channel;
|
||||
//beta能量部分的计算参数 道值对应的能量
|
||||
List<Double> bElectronEnergy = struct.b_electron_energy;
|
||||
//beta能量部分的计算参数 道值
|
||||
List<Double> bChannel = struct.b_channel;
|
||||
CalcBgBoundaryParam calcBgBoundaryParam = new CalcBgBoundaryParam();
|
||||
calcBgBoundaryParam.g_e_cal = EnergySpectrumHandler.GetFileFittingPara(gEnergy, gCentroidChannel);
|
||||
calcBgBoundaryParam.b_e_cal = EnergySpectrumHandler.GetFileFittingPara(bElectronEnergy, bChannel);
|
||||
calcBgBoundaryParam.b_energy = struct.b_electron_energy;
|
||||
calcBgBoundaryParam.b_channel = struct.b_channel;
|
||||
calcBgBoundaryParam.g_channel = struct.g_centroid_channel;
|
||||
calcBgBoundaryParam.g_energy = struct.g_energy;
|
||||
calcBgBoundaryParam.ROI_B_start_x1 = struct.POI_B_x1;
|
||||
calcBgBoundaryParam.ROI_B_stop_x2 = struct.POI_B_x2;
|
||||
calcBgBoundaryParam.ROI_G_start_y1 = struct.POI_G_y1;
|
||||
calcBgBoundaryParam.ROI_G_stop_y2 = struct.POI_G_y2;
|
||||
BgBoundary bgBoundary = EnergySpectrumHandler.CalcBgBoundary(calcBgBoundaryParam);
|
||||
// 新beta谱:只取X轴数据从Y轴0的位置开始连成一条线,一直到顶画出矩形框 这个矩形框内的数据就是Gamma谱数据
|
||||
List<Integer> roiBBoundaryStart = bgBoundary.ROI_B_Boundary_start;
|
||||
List<Integer> roiBBoundaryStop = bgBoundary.ROI_B_Boundary_stop;
|
||||
|
||||
//根据范围1划分 范围1对应的折线图
|
||||
Map<String, Object> gammaByROI = this.getGammaByROI(systemType, roiBBoundaryStart, roiBBoundaryStop, selfStationData);
|
||||
map.putAll(gammaByROI);
|
||||
|
@ -293,6 +494,100 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
return struct;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用dll解析phd文件,dll不解析histogram块数据
|
||||
* @param filePathName 文件地址
|
||||
* @param sampleType 谱类型
|
||||
* @param selfStationData
|
||||
* @return
|
||||
*/
|
||||
public void getSourceDataNotHis(String filePathName, String sampleType, SelfStationData selfStationData) {
|
||||
EnergySpectrumStruct struct = null;
|
||||
File file = null;
|
||||
try {
|
||||
//根据完整的文件路径 获取临时文件
|
||||
file = ftpUtil.downloadFile(filePathName);
|
||||
if (Objects.nonNull(file)) {
|
||||
//解析文件内容
|
||||
struct = EnergySpectrumHandler.getSourceDataNotHis(file.getAbsolutePath());
|
||||
HashMap<String, Object> hisMap = this.readPHDFile(file.getAbsolutePath());
|
||||
struct.setH_count_arr((long[][]) hisMap.get("h_count"));
|
||||
struct.setG_channels((long) hisMap.get("g_channels"));
|
||||
struct.setB_channels((long) hisMap.get("b_channels"));
|
||||
struct.setG_energy_span((long) hisMap.get("g_energy_span"));
|
||||
struct.setB_energy_span((long) hisMap.get("b_energy_span"));
|
||||
|
||||
if (sampleType.equalsIgnoreCase("sample")) {
|
||||
selfStationData.setSampleStruct(struct);
|
||||
selfStationData.setSampleTmpPath(file.getAbsolutePath());
|
||||
} else if (sampleType.equalsIgnoreCase("det")) {
|
||||
selfStationData.setDetStruct(struct);
|
||||
selfStationData.setDetTmpPath(file.getAbsolutePath());
|
||||
} else if (sampleType.equalsIgnoreCase("qc")) {
|
||||
selfStationData.setQcStruct(struct);
|
||||
selfStationData.setQcTmpPath(file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析 #histogram块数据
|
||||
* @param phdPath 文件地址
|
||||
* @return
|
||||
*/
|
||||
public HashMap<String, Object> readPHDFile(String phdPath) {
|
||||
try {
|
||||
File file = new File(phdPath);
|
||||
HashMap<String, Object> result = Maps.newHashMap();
|
||||
BufferedReader reader = FileUtil.getReader(file, "utf8");
|
||||
List<Long> hCounts = Lists.newLinkedList();
|
||||
String currentName = "";
|
||||
long [][] hCountArr = null;
|
||||
int row = 0;
|
||||
String blockHis = SampleFileHeader.HISTOGRAM.getMessage();
|
||||
while (reader.ready()) {
|
||||
// 当前行
|
||||
String line = reader.readLine();
|
||||
if (line.equals(blockHis)) {
|
||||
currentName = line;
|
||||
// 首行
|
||||
String s = reader.readLine();
|
||||
String[] split = s.split(" ");
|
||||
hCountArr = new long[Integer.parseInt(split[0])][Integer.parseInt(split[1])];
|
||||
result.put("g_channels", Long.parseLong(split[0]));
|
||||
result.put("b_channels", Long.parseLong(split[1]));
|
||||
result.put("g_energy_span", Long.parseLong(split[2]));
|
||||
result.put("b_energy_span", Long.parseLong(split[3]));
|
||||
Console.log(s);
|
||||
continue;
|
||||
}
|
||||
if (!line.equals(blockHis) && !currentName.equals(blockHis)) {
|
||||
continue;
|
||||
}
|
||||
if (line.equals("STOP")) {
|
||||
break;
|
||||
}
|
||||
String[] split = line.split(" ");
|
||||
for (int i = 0; i < split.length; i++) {
|
||||
hCountArr[row][i] = Long.parseLong(split[i]);
|
||||
hCounts.add(Long.parseLong(split[i]));
|
||||
}
|
||||
row++;
|
||||
}
|
||||
result.put("h_count", hCountArr);
|
||||
Console.log("Size:{}",hCounts.size());
|
||||
return result;
|
||||
} catch (IORuntimeException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 统计道值范围内数量
|
||||
* @param startChannel 起始道值
|
||||
|
@ -341,11 +636,9 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
SelfStationData selfStationData) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
||||
|
||||
|
||||
EnergySpectrumStruct struct = selfStationData.getSampleStruct();
|
||||
long betaChannels = struct.b_channels, gammaChannels = struct.g_channels;
|
||||
List<Long> h_counts = struct.h_counts;
|
||||
long[][] h_count_arr = struct.h_count_arr;
|
||||
|
||||
SelfStationVueData sampleVueData = selfStationData.getSampleVueData();
|
||||
SelfStationVueData detVueData = selfStationData.getDetVueData();
|
||||
|
@ -369,13 +662,7 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
//根据起始道值和结束道值 获取这一列的所有对应道值的数据
|
||||
for (int j=startChannel; j <= endChannel; j++) {
|
||||
//列数 * 总行数 + 当前行下标 获取对应的数据数组下标
|
||||
int index = (int) (i * betaChannels + j);
|
||||
long count = 0;
|
||||
//判断下标是否在h_counts范围内
|
||||
if (index > 0 && index < h_counts.size()) {
|
||||
count = h_counts.get(index);
|
||||
}
|
||||
sum+=count;
|
||||
sum += h_count_arr[i][j];
|
||||
}
|
||||
seriseData.setY(sum);
|
||||
sumList.add(sum);
|
||||
|
@ -861,20 +1148,129 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
}
|
||||
|
||||
/**
|
||||
* 根据DLL解析GammaPHD内容 得到PHDFile实体
|
||||
* @param fileName
|
||||
* @param pathName
|
||||
* @return
|
||||
* 根据ROI卡出来的Gamma数据生成新的GammaPHD文件
|
||||
* @param pathName 文件存储路径
|
||||
* @param fileName GammaPHD名称
|
||||
* @param struct BetaPHD内容
|
||||
* @param g_counts ROI卡出来的Gamma数据
|
||||
*/
|
||||
public PHDFile getGammaPHD(String fileName, String pathName) {
|
||||
public void createGammaFile(String pathName,String fileName, EnergySpectrumStruct struct, List<Long> g_counts) {
|
||||
File file = new File(pathName + "\\" + fileName);
|
||||
// 创建PrintWriter对象
|
||||
PrintWriter out = null;
|
||||
DecimalFormat decimalFormat = new DecimalFormat("0.000000");
|
||||
try {
|
||||
out = new PrintWriter(file);
|
||||
out.println("BEGIN IMS2.0");
|
||||
out.println("MSG_TYPE DATA");
|
||||
// todo msg_type用的不对,dll没解析出这个字段
|
||||
out.println("MSG_ID " + struct.msg_id + " " + struct.msg_type + "\n" + "DATA_TYPE " + struct.data_type);
|
||||
out.println("#Header 3");
|
||||
// 解析出的Gamma谱 系统类型暂时使用G
|
||||
out.println(struct.site_code + " " + struct.detector_code + " C " +
|
||||
struct.sample_geometry + " " + struct.spectrum_quantity);
|
||||
out.println(struct.sample_ref_id);
|
||||
out.println(struct.measurement_id + " " + struct.detector_bk_measurement_id + " 0");
|
||||
out.println(struct.transmit_date + " " + struct.transmit_time);
|
||||
out.println("#Collection");
|
||||
out.println(struct.collection_start_date + " " + struct.collection_start_time + " " +
|
||||
struct.collection_stop_date + " " + struct.collection_stop_time + " "
|
||||
+ decimalFormat.format(struct.air_volume));
|
||||
out.println("#Acquisition");
|
||||
out.println(struct.acquisition_start_date + " " + struct.acquisition_start_time + " " +
|
||||
decimalFormat.format(struct.acquisition_real_time) + " " +
|
||||
decimalFormat.format(struct.acquisition_live_time));
|
||||
out.println("#g_Energy");
|
||||
|
||||
|
||||
format(struct.g_energy, struct.g_centroid_channel, struct.g_uncertainty, out);
|
||||
out.println("#g_Resolution");
|
||||
format(struct.g_r_energy, struct.g_r_FWHM, struct.g_r_uncertainty, out);
|
||||
out.println("#g_Efficiency");
|
||||
format(struct.g_e_energy, struct.g_e_efficiency, struct.g_e_uncertainty, out);
|
||||
out.println("#g_Spectrum");
|
||||
// num_g_channel 根据g_counts数量得来和PHD写的数字没有关系;g_energy_span是PHD写的值
|
||||
out.println(struct.num_g_channel + " " + struct.g_energy_span);
|
||||
// 存储前一个数字
|
||||
String beforeStr = "";
|
||||
for (int i = 0; i < g_counts.size(); i++) {
|
||||
String str = g_counts.get(i).toString();
|
||||
if(i % 5 == 0) {
|
||||
if (i == 0) {
|
||||
out.printf((i+1)+"");
|
||||
} else {
|
||||
out.printf("\n" + (i+1) );
|
||||
}
|
||||
beforeStr = i+"";
|
||||
}
|
||||
|
||||
if(StrUtil.isEmpty(beforeStr)){
|
||||
beforeStr = str;
|
||||
}
|
||||
// 根据前一个字符长度计算需要的空格
|
||||
out.printf("%" + (str.length() + (6 - beforeStr.length()))+ "s" , g_counts.get(i));
|
||||
if(i == g_counts.size() - 1) {
|
||||
out.println();
|
||||
}
|
||||
beforeStr = str;
|
||||
}
|
||||
out.print("STOP");
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (null != out) {
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 创建Gamma PHD文件并转换为数据存入SelfStationVueData
|
||||
* @param path PHD保存地址
|
||||
* @param sampleFileName beta样品谱名称
|
||||
* @param struct beta谱数据
|
||||
* @param sampleVueData 存储数据实体
|
||||
*/
|
||||
public void createGamma(String path, String sampleFileName, EnergySpectrumStruct struct, SelfStationVueData sampleVueData){
|
||||
// 根据ROI生成四个Gamma谱文件, 文件命名为Beta名称后面_ROI_x.PHD
|
||||
String gammaOneName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_1.PHD";
|
||||
// 创建Gamma文件
|
||||
this.createGammaFile(path, gammaOneName, struct, sampleVueData.getROIOneCounts());
|
||||
|
||||
String gammaTwoName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_2.PHD";
|
||||
this.createGammaFile(path, gammaTwoName, struct, sampleVueData.getROITwoCounts());
|
||||
|
||||
String gammaThreeName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_3.PHD";
|
||||
this.createGammaFile(path, gammaThreeName, struct, sampleVueData.getROIThreeCounts());
|
||||
|
||||
String gammaFourName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_4.PHD";
|
||||
this.createGammaFile(path, gammaFourName, struct, sampleVueData.getROIFourCounts());
|
||||
|
||||
// Gamma文件内容转换为PHD实体
|
||||
sampleVueData.setROIOneFileName(gammaOneName);
|
||||
sampleVueData.setROIOnePHDFile(this.createGammaPHD(struct, gammaOneName, path, sampleVueData.getROIOneCounts()));
|
||||
sampleVueData.setROITwoFileName(gammaTwoName);
|
||||
sampleVueData.setROITwoPHDFile(this.createGammaPHD(struct, gammaTwoName, path, sampleVueData.getROITwoCounts()));
|
||||
sampleVueData.setROIThreeFileName(gammaThreeName);
|
||||
sampleVueData.setROIThreePHDFile(this.createGammaPHD(struct, gammaThreeName, path, sampleVueData.getROIThreeCounts()));
|
||||
sampleVueData.setROIFourFileName(gammaFourName);
|
||||
sampleVueData.setROIFourPHDFile(this.createGammaPHD(struct, gammaFourName, path, sampleVueData.getROIFourCounts()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据DLL解析GammaPHD内容 得到PHDFile实体
|
||||
* @param struct dll解析后的实体
|
||||
* @param fileName 文件名称
|
||||
* @param pathName 路径
|
||||
* @param g_counts beta卡出来的gamma数据
|
||||
* @return PHDFile 实体
|
||||
*/
|
||||
public PHDFile createGammaPHD(EnergySpectrumStruct struct, String fileName, String pathName, List<Long> g_counts) {
|
||||
PHDFile phd = new PHDFile();
|
||||
phd.setFilepath(pathName);
|
||||
phd.setFilename(fileName);
|
||||
File file = new File(pathName + StringPool.SLASH + fileName);
|
||||
phd.setTmpFilePath(file.getAbsolutePath());
|
||||
try {
|
||||
//读取文件信息
|
||||
EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath());
|
||||
//MsgInfo
|
||||
phd.getMsgInfo().setMsg_id(struct.msg_id);
|
||||
phd.getMsgInfo().setMsg_type(struct.msg_type);
|
||||
|
@ -985,7 +1381,8 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
phd.getSpec().setNum_g_channel(struct.g_counts.size()); // todo 原Num_g_channel有误
|
||||
phd.getSpec().setG_energy_span(struct.g_energy_span);
|
||||
phd.getSpec().setBegin_channel(struct.g_begin_channel);
|
||||
phd.getSpec().setCounts(struct.g_counts);
|
||||
// 从 struct.g_counts 换成 beta 卡出来的gamma数据
|
||||
phd.getSpec().setCounts(g_counts);
|
||||
int i = 0;
|
||||
for (; i < phd.getSpec().getNum_g_channel(); i++) {
|
||||
if (phd.getSpec().getCounts().get(i) > 0) {
|
||||
|
@ -1064,115 +1461,6 @@ public class SelfStationUtil extends AbstractLogOrReport {
|
|||
return phd;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建Gamma PHD文件并转换为数据存入SelfStationVueData
|
||||
* @param path PHD保存地址
|
||||
* @param sampleFileName beta样品谱名称
|
||||
* @param struct beta谱数据
|
||||
* @param sampleVueData 存储数据实体
|
||||
*/
|
||||
public void createGamma(String path, String sampleFileName, EnergySpectrumStruct struct, SelfStationVueData sampleVueData){
|
||||
// 根据ROI生成四个Gamma谱文件, 文件命名为Beta名称后面_ROI_x.PHD
|
||||
String gammaOneName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_1.PHD";
|
||||
// 创建Gamma文件
|
||||
this.createGammaFile(path, gammaOneName, struct, sampleVueData.getROIOneCounts());
|
||||
|
||||
String gammaTwoName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_2.PHD";
|
||||
this.createGammaFile(path, gammaTwoName, struct, sampleVueData.getROITwoCounts());
|
||||
|
||||
String gammaThreeName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_3.PHD";
|
||||
this.createGammaFile(path, gammaThreeName, struct, sampleVueData.getROIThreeCounts());
|
||||
|
||||
String gammaFourName = StrUtil.subBefore(sampleFileName, ".PHD", true) + "_ROI_4.PHD";
|
||||
this.createGammaFile(path, gammaFourName, struct, sampleVueData.getROIFourCounts());
|
||||
|
||||
// Gamma文件内容转换为PHD实体
|
||||
sampleVueData.setROIOneFileName(gammaOneName);
|
||||
sampleVueData.setROIOnePHDFile(this.getGammaPHD(gammaOneName, path));
|
||||
sampleVueData.setROITwoFileName(gammaTwoName);
|
||||
sampleVueData.setROITwoPHDFile(this.getGammaPHD(gammaTwoName, path));
|
||||
sampleVueData.setROIThreeFileName(gammaThreeName);
|
||||
sampleVueData.setROIThreePHDFile(this.getGammaPHD(gammaThreeName, path));
|
||||
sampleVueData.setROIFourFileName(gammaFourName);
|
||||
sampleVueData.setROIFourPHDFile(this.getGammaPHD(gammaFourName, path));
|
||||
}
|
||||
/**
|
||||
* 根据ROI卡出来的Gamma数据生成新的GammaPHD文件
|
||||
* @param pathName 文件存储路径
|
||||
* @param fileName GammaPHD名称
|
||||
* @param struct BetaPHD内容
|
||||
* @param g_counts ROI卡出来的Gamma数据
|
||||
*/
|
||||
public void createGammaFile(String pathName,String fileName, EnergySpectrumStruct struct, List<Long> g_counts) {
|
||||
File file = new File(pathName + "\\" + fileName);
|
||||
// 创建PrintWriter对象
|
||||
PrintWriter out = null;
|
||||
DecimalFormat decimalFormat = new DecimalFormat("0.000000");
|
||||
try {
|
||||
out = new PrintWriter(file);
|
||||
out.println("BEGIN IMS2.0");
|
||||
out.println("MSG_TYPE DATA");
|
||||
// todo msg_type用的不对,dll没解析出这个字段
|
||||
out.println("MSG_ID " + struct.msg_id + " " + struct.msg_type + "\n" + "DATA_TYPE " + struct.data_type);
|
||||
out.println("#Header 3");
|
||||
// 解析出的Gamma谱 系统类型暂时使用G
|
||||
out.println(struct.site_code + " " + struct.detector_code + " C " +
|
||||
struct.sample_geometry + " " + struct.spectrum_quantity);
|
||||
out.println(struct.sample_ref_id);
|
||||
out.println(struct.measurement_id + " " + struct.detector_bk_measurement_id + " 0");
|
||||
out.println(struct.transmit_date + " " + struct.transmit_time);
|
||||
out.println("#Collection");
|
||||
out.println(struct.collection_start_date + " " + struct.collection_start_time + " " +
|
||||
struct.collection_stop_date + " " + struct.collection_stop_time + " "
|
||||
+ decimalFormat.format(struct.air_volume));
|
||||
out.println("#Acquisition");
|
||||
out.println(struct.acquisition_start_date + " " + struct.acquisition_start_time + " " +
|
||||
decimalFormat.format(struct.acquisition_real_time) + " " +
|
||||
decimalFormat.format(struct.acquisition_live_time));
|
||||
out.println("#g_Energy");
|
||||
|
||||
|
||||
format(struct.g_energy, struct.g_centroid_channel, struct.g_uncertainty, out);
|
||||
out.println("#g_Resolution");
|
||||
format(struct.g_r_energy, struct.g_r_FWHM, struct.g_r_uncertainty, out);
|
||||
out.println("#g_Efficiency");
|
||||
format(struct.g_e_energy, struct.g_e_efficiency, struct.g_e_uncertainty, out);
|
||||
out.println("#g_Spectrum");
|
||||
// num_g_channel 根据g_counts数量得来和PHD写的数字没有关系;g_energy_span是PHD写的值
|
||||
out.println(struct.num_g_channel + " " + struct.g_energy_span);
|
||||
// 存储前一个数字
|
||||
String beforeStr = "";
|
||||
for (int i = 0; i < g_counts.size(); i++) {
|
||||
String str = g_counts.get(i).toString();
|
||||
if(i % 5 == 0) {
|
||||
if (i == 0) {
|
||||
out.printf((i+1)+"");
|
||||
} else {
|
||||
out.printf("\n" + (i+1) );
|
||||
}
|
||||
beforeStr = i+"";
|
||||
}
|
||||
|
||||
if(StrUtil.isEmpty(beforeStr)){
|
||||
beforeStr = str;
|
||||
}
|
||||
// 根据前一个字符长度计算需要的空格
|
||||
out.printf("%" + (str.length() + (6 - beforeStr.length()))+ "s" , g_counts.get(i));
|
||||
if(i == g_counts.size() - 1) {
|
||||
out.println();
|
||||
}
|
||||
beforeStr = str;
|
||||
}
|
||||
out.print("STOP");
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (null != out) {
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据格式化
|
||||
* @param aList 第一列数据
|
||||
|
|
|
@ -281,10 +281,10 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
|||
|
||||
String path = fullPath1.substring(0, fullPath1.lastIndexOf(StrUtil.SLASH));
|
||||
|
||||
PHDFile phd1 = selfStationUtil.getGammaPHD(name1, path);
|
||||
PHDFile phd2 = selfStationUtil.getGammaPHD(name2, path);
|
||||
PHDFile phd3 = selfStationUtil.getGammaPHD(name3, path);
|
||||
PHDFile phd4 = selfStationUtil.getGammaPHD(name4, path);
|
||||
PHDFile phd1 = selfStationUtil.createGammaPHD(struct, name1, path, sampleVueData.getROIOneCounts());
|
||||
PHDFile phd2 = selfStationUtil.createGammaPHD(struct, name2, path, sampleVueData.getROITwoCounts());
|
||||
PHDFile phd3 = selfStationUtil.createGammaPHD(struct, name3, path, sampleVueData.getROIThreeCounts());
|
||||
PHDFile phd4 = selfStationUtil.createGammaPHD(struct, name4, path, sampleVueData.getROIFourCounts());
|
||||
|
||||
// 从数据库加载 ROI信息
|
||||
List<PHDFile> phdFiles = ListUtil.toList(phd1, phd2, phd3, phd4);
|
||||
|
@ -462,24 +462,23 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
|||
//返回结果map
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
//获取sample分析后的对象
|
||||
EnergySpectrumStruct struct = selfStationUtil.getSourceData(sampleFilePath, "sample", selfStationData);
|
||||
if (Objects.nonNull(struct)) {
|
||||
selfStationData.setSampleStruct(struct);
|
||||
// 获取PHD数据
|
||||
selfStationUtil.getSourceDataNotHis(sampleFilePath, "sample", selfStationData);
|
||||
EnergySpectrumStruct sampleStruct = selfStationData.getSampleStruct();
|
||||
if (Objects.nonNull(sampleStruct)) {
|
||||
selfStationData.setSampleFileName(sampleFileName);
|
||||
selfStationData.setSampleFilePathName(sampleFilePath);
|
||||
selfStationUtil.loadFile(selfStationData, null, null, "sample", map);
|
||||
|
||||
SelfStationVueData sampleVueData = selfStationData.getSampleVueData();
|
||||
|
||||
selfStationUtil.createGamma(path, sampleFileName, struct, sampleVueData);
|
||||
selfStationUtil.createGamma(path, sampleFileName, sampleStruct, sampleVueData);
|
||||
|
||||
resultMap.put("sample", map);
|
||||
|
||||
// 初始化Configure
|
||||
initConfigure(struct, selfStationData);
|
||||
|
||||
initConfigure(sampleStruct, selfStationData);
|
||||
// 返回Beta和Gamma的数据
|
||||
bGSpectrum(struct, map);
|
||||
bGSpectrum(sampleStruct, map);
|
||||
}
|
||||
}
|
||||
//判断det文件名是否为空
|
||||
|
@ -489,16 +488,15 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
|||
//返回结果map
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
//获取det分析后的对象
|
||||
EnergySpectrumStruct struct = selfStationUtil.getSourceData(detFilePath, "det", selfStationData);
|
||||
if (Objects.nonNull(struct)) {
|
||||
selfStationData.setDetStruct(struct);
|
||||
selfStationUtil.getSourceDataNotHis(detFilePath, "det", selfStationData);
|
||||
if (Objects.nonNull(selfStationData.getDetStruct())) {
|
||||
selfStationData.setDetFilePathName(detFilePath);
|
||||
selfStationData.setDetFileName(detFileName);
|
||||
selfStationUtil.loadFile(selfStationData, null, null, "det", map);
|
||||
resultMap.put("det", map);
|
||||
|
||||
// 返回Beta和Gamma的数据
|
||||
bGSpectrum(struct, map);
|
||||
bGSpectrum(selfStationData.getDetStruct(), map);
|
||||
}
|
||||
}
|
||||
//判断qc文件名是否为空
|
||||
|
@ -508,16 +506,15 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
|||
//返回结果map
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
//获取QC分析后的对象
|
||||
EnergySpectrumStruct struct = selfStationUtil.getSourceData(qcFilePath, "qc", selfStationData);
|
||||
if (Objects.nonNull(struct)) {
|
||||
selfStationData.setQcStruct(struct);
|
||||
selfStationUtil.getSourceDataNotHis(qcFilePath, "qc", selfStationData);
|
||||
if (Objects.nonNull(selfStationData.getQcStruct())) {
|
||||
selfStationData.setQcFilePathName(qcFilePath);
|
||||
selfStationData.setQcFileName(qcFileName);
|
||||
selfStationUtil.loadFile(selfStationData, null, null, "qc", map);
|
||||
resultMap.put("qc", map);
|
||||
|
||||
// 返回Beta和Gamma的数据
|
||||
bGSpectrum(struct, map);
|
||||
bGSpectrum(selfStationData.getQcStruct(), map);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -543,9 +540,14 @@ public class SelfStationServiceImpl extends AbstractLogOrReport implements ISelf
|
|||
if (StringUtils.isNotBlank(sampleFileName)) {
|
||||
//返回结果map
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
//拼接sample文件路径
|
||||
String sampleFilePath = path + StringPool.SLASH + sampleFileName;
|
||||
selfStationData.setSampleFileName(sampleFileName);
|
||||
selfStationData.setSampleFilePathName(sampleFilePath);
|
||||
|
||||
selfStationUtil.loadFile(selfStationData, null, null, "sample", map);
|
||||
resultMap.put("sample", map);
|
||||
|
||||
selfStationUtil.createGamma(path, sampleFileName, selfStationData.getSampleStruct(), selfStationData.getSampleVueData());
|
||||
// 返回Beta和Gamma的数据
|
||||
bGSpectrum(selfStationData.getSampleStruct(), map);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user