Merge remote-tracking branch 'origin/station' into station
This commit is contained in:
commit
8718aeed1c
|
@ -1,14 +1,14 @@
|
|||
package org.jeecg.common.util;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jeecg.common.constant.DateConstant;
|
||||
import org.jeecg.common.enums.FtransitEnum;
|
||||
import org.jeecg.modules.entity.vo.FileData;
|
||||
import org.jeecg.modules.entity.vo.SpcHead1;
|
||||
import org.jeecg.modules.entity.vo.SpcHead2;
|
||||
import org.jeecg.modules.entity.vo.*;
|
||||
import org.jeecg.modules.native_jni.CalValuesHandler;
|
||||
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
|
||||
import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -166,7 +166,7 @@ public class FileFtransitUtil {
|
|||
i1 = 0;
|
||||
i2 = num - 1;
|
||||
}
|
||||
datas.setEner_slope((float) ((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))));
|
||||
datas.setEner_slope(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))))));
|
||||
}
|
||||
|
||||
// Read Resolution Calibration
|
||||
|
@ -319,8 +319,8 @@ public class FileFtransitUtil {
|
|||
i1 = 0;
|
||||
i2 = num - 1;
|
||||
}
|
||||
datas.setEner_slope((float) ((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))));
|
||||
datas.setEner_intercept((float) ((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))));
|
||||
datas.setEner_slope(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))))));
|
||||
datas.setEner_intercept(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))))));
|
||||
}
|
||||
out.append(String.format("%-10s %-13s %-13s %-13s %-13s", FtransitEnum.IecLineNo.getCode(), String.format("%.6f", datas.getEner_intercept()), String.format("%.6f", datas.getEner_slope()), "0", "0"));
|
||||
//换行
|
||||
|
@ -546,8 +546,8 @@ public class FileFtransitUtil {
|
|||
i1 = 0;
|
||||
i2 = num - 1;
|
||||
}
|
||||
datas.setEner_slope((float) ((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))));
|
||||
datas.setEner_intercept((float) ((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))));
|
||||
datas.setEner_slope( Float.valueOf(String.valueOf((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))) );
|
||||
datas.setEner_intercept(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))))));
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(struct.g_r_energy)) {
|
||||
|
@ -714,53 +714,53 @@ public class FileFtransitUtil {
|
|||
byte[] headByte1 = new byte[80];
|
||||
SpcFile.read(headByte1);
|
||||
//读取后赋值
|
||||
head1.setInftyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short")));
|
||||
head1.setFiltyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short")));
|
||||
head1.setReserved1(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short")));
|
||||
head1.setReserved2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short")) );
|
||||
head1.setAcqInfRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short")) );
|
||||
head1.setSamDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short")) );
|
||||
head1.setDetDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short")) );
|
||||
head1.setEbrDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short")) );
|
||||
head1.setAnaRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short")) );
|
||||
head1.setAnaRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short")) );
|
||||
head1.setAnaRP3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short")) );
|
||||
head1.setAnaRP4( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short")) );
|
||||
head1.setSrpDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short")) );
|
||||
head1.setIeqDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short")) );
|
||||
head1.setGeoDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short")) );
|
||||
head1.setMpcDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short")) );
|
||||
head1.setCalDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short")) );
|
||||
head1.setCalRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short")) );
|
||||
head1.setCalRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short")) );
|
||||
head1.setEffRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short")) );
|
||||
head1.setROI1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short")) );
|
||||
head1.setEngPrRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short")) );
|
||||
head1.setEngPrNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short")) );
|
||||
head1.setReserved3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short")) );
|
||||
head1.setDDP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short")) );
|
||||
head1.setActUnit( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short")) );
|
||||
head1.setLabPerRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short")) );
|
||||
head1.setMaxNumE( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short")) );
|
||||
head1.setMaxNumU( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short")) );
|
||||
head1.setEffNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short")) );
|
||||
head1.setSpcFirstRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short")) );
|
||||
head1.setSpcRecNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short")) );
|
||||
head1.setSpcChnNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short")) );
|
||||
head1.setAbstch( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short")) );
|
||||
head1.setAcqTime( Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float")));
|
||||
head1.setAcqTime8( Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double")));
|
||||
head1.Inftyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short"));
|
||||
head1.Filtyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short"));
|
||||
head1.Reserved1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short"));
|
||||
head1.Reserved2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short"));
|
||||
head1.AcqInfRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short"));
|
||||
head1.SamDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short"));
|
||||
head1.DetDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short"));
|
||||
head1.EbrDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short"));
|
||||
head1.AnaRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short"));
|
||||
head1.AnaRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short"));
|
||||
head1.AnaRP3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short"));
|
||||
head1.AnaRP4 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short"));
|
||||
head1.SrpDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short"));
|
||||
head1.IeqDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short"));
|
||||
head1.GeoDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short"));
|
||||
head1.MpcDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short"));
|
||||
head1.CalDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short"));
|
||||
head1.CalRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short"));
|
||||
head1.CalRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short"));
|
||||
head1.EffRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short"));
|
||||
head1.ROI1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short"));
|
||||
head1.EngPrRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short"));
|
||||
head1.EngPrNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short"));
|
||||
head1.Reserved3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short"));
|
||||
head1.DDP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short"));
|
||||
head1.ActUnit = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short"));
|
||||
head1.LabPerRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short"));
|
||||
head1.MaxNumE = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short"));
|
||||
head1.MaxNumU = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short"));
|
||||
head1.EffNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short"));
|
||||
head1.SpcFirstRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short"));
|
||||
head1.SpcRecNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short"));
|
||||
head1.SpcChnNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short"));
|
||||
head1.Abstch = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short"));
|
||||
head1.AcqTime = Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float"));
|
||||
head1.AcqTime8 = Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double"));
|
||||
SpcFile.seek(78);
|
||||
byte[] headByte2 = new byte[20];
|
||||
SpcFile.read(headByte2);
|
||||
head2.setAddRAM( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short")) );
|
||||
head2.setSeqnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short")) );
|
||||
head2.setMcanu( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short")) );
|
||||
head2.setSegnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short")) );
|
||||
head2.setMcadvt( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short")) );
|
||||
head2.setChnsrt( Short.valueOf( convert(Arrays.copyOfRange(headByte2, 10, 12), "short")) );
|
||||
head2.setRealTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float") ) );
|
||||
head2.setLiveTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float")) );
|
||||
head2.AddRAM = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short"));
|
||||
head2.Seqnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short"));
|
||||
head2.Mcanu = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short"));
|
||||
head2.Segnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short"));
|
||||
head2.Mcadvt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short"));
|
||||
head2.Chnsrt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 10, 12), "short"));
|
||||
head2.RealTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float"));
|
||||
head2.LiveTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float"));
|
||||
|
||||
// Acquisition
|
||||
//从intspc能谱中读取能谱开测时间
|
||||
|
@ -1016,7 +1016,7 @@ public class FileFtransitUtil {
|
|||
i2 = EngNum - 1;
|
||||
}
|
||||
datas.setEner_slope(Float.valueOf(Eng[i2]-Eng[i1])/(Cer[i2]-Cer[i1]));
|
||||
datas.setEner_intercept((float) ((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))));
|
||||
datas.setEner_intercept(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1))))));
|
||||
}
|
||||
|
||||
for(int i=0; i<EngNum; i++) {
|
||||
|
@ -1112,148 +1112,256 @@ public class FileFtransitUtil {
|
|||
return true;
|
||||
}
|
||||
|
||||
// bool Ftranslt::WriteSPC(QString name, FileData datas)
|
||||
// {
|
||||
// if(m_totalContents.isEmpty() && !AnalyseSPC())
|
||||
// {
|
||||
// MyMessageBox::Warning("The file standard.spc isn't exist or it's format is invalid.", this);
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// QFile SpcFile(name);
|
||||
// if(!SpcFile.open(QIODevice::WriteOnly))
|
||||
// {
|
||||
// qDebug() << QString("Open %1 failed when reading!").arg(name);
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// SpcFile.write(m_totalContents);
|
||||
//
|
||||
// // 写第1个128字节————头部指针信息
|
||||
// {
|
||||
// MakeSpcHead(datas);
|
||||
// SpcFile.seek(0);
|
||||
// SpcFile.write((char*)&m_head1, sizeof(SpcHead1));
|
||||
// SpcFile.seek(Seek_SPCHead2);
|
||||
// SpcFile.write((char*)&m_head2, sizeof(SpcHead2));
|
||||
// }
|
||||
//
|
||||
// // 写第2个128字节————Acquisition信息
|
||||
// {
|
||||
// char acq_info[128] = {' '};
|
||||
//
|
||||
// int offset = 16; // 16 Bytes Spectrum file name
|
||||
// QString temp = GetDate(datas.acq_date);
|
||||
// for(int i=0; i<temp.size(); ++i)
|
||||
// {
|
||||
// acq_info[i+offset] = temp.toStdString().at(i);
|
||||
// }
|
||||
//
|
||||
// offset += 12; // 12 Bytes Acq_Date
|
||||
// temp = datas.acq_time.left(8); // HH:mm:ss
|
||||
// for(int i=0; i<temp.length(); ++i)
|
||||
// {
|
||||
// acq_info[i+offset] = temp.toStdString().at(i);
|
||||
// }
|
||||
//
|
||||
// offset += 10; // 10 Bytes Acq_Time
|
||||
// temp = QString("%1").arg(datas.acq_live, 10, 'f', 0);
|
||||
// int size = temp.length() > 10 ? 10 : temp.length();
|
||||
// for(int i=0; i<size; ++i)
|
||||
// {
|
||||
// acq_info[offset+i] = temp.toStdString().at(i);
|
||||
// }
|
||||
//
|
||||
// offset += 10;
|
||||
// temp = QString("%1").arg(datas.acq_real, 10, 'f', 0);
|
||||
// size = temp.length() > 10 ? 10 : temp.length();
|
||||
// for(int i=0; i<size; ++i)
|
||||
// {
|
||||
// acq_info[offset+i] = temp.toStdString().at(i);
|
||||
// }
|
||||
// SpcFile.seek((m_head1.AcqInfRP - 1) * 128);
|
||||
// qDebug() << "第2个128字节: " << SpcFile.write(acq_info, 128);
|
||||
// }
|
||||
//
|
||||
// // 写第5个128字节————Germanium Calibration
|
||||
// {
|
||||
// MakeCalibParam(datas);
|
||||
// SpcFile.seek((m_head1.CalRP1-1)*128);
|
||||
// SpcFile.write((char*)&m_calibParam, sizeof(GermaniumCalib));
|
||||
// }
|
||||
//
|
||||
// // 写第7个128字节————Calibration DateTime
|
||||
// {
|
||||
// char cal_info[128] = {'0'};
|
||||
//
|
||||
// int offset = 32; // 32 Bytes Calibration file name
|
||||
// QString temp = GetDate(datas.calibra_time.left(10));
|
||||
// for(int i=0; i<temp.size(); ++i)
|
||||
// {
|
||||
// cal_info[i+offset] = temp.toStdString().at(i);
|
||||
// }
|
||||
//
|
||||
// offset += 10; // 10 Bytes Cal_Date
|
||||
// QString str = datas.calibra_time.right(10).left(8);
|
||||
// for(int i=0; i<str.length(); ++i)
|
||||
// {
|
||||
// cal_info[i+offset] = str.toStdString().at(i);
|
||||
// }
|
||||
// SpcFile.seek((m_head1.CalRP2 - 1) * 128);
|
||||
// qDebug() << "第7个128字节: " << SpcFile.write(cal_info, 128);
|
||||
// }
|
||||
//
|
||||
// // 写第11—13个128字节————能量、半高宽刻度数据
|
||||
// {
|
||||
// const int pairs_num = 96*CalibPairs_Byte128;
|
||||
// float pairs[pairs_num];
|
||||
// memset(pairs, 0.0, pairs_num);
|
||||
//
|
||||
// int size = m_calibParam.EngPairs, adjust;
|
||||
// qDebug() << "Slope:" << datas.ener_slope;
|
||||
// for(int i=0; i<size; ++i)
|
||||
// {
|
||||
// adjust = i / 32 * 96 + i % 32;
|
||||
// pairs[adjust] = datas.vvEner.at(1).at(i);
|
||||
// pairs[adjust+32] = datas.vvEner.at(0).at(i);
|
||||
// //pairs[adjust+64] = datas.vvReso.at(1).at(i);
|
||||
// pairs[adjust+64] = datas.vvReso.at(1).at(i)/datas.ener_slope;
|
||||
// }
|
||||
// SpcFile.seek((m_head1.EngPrRP-1)*128);
|
||||
// SpcFile.write((char*)pairs, pairs_num*sizeof(float));
|
||||
// }
|
||||
//
|
||||
// // 写第14个128字节————效率刻度数据
|
||||
// {
|
||||
// int size = m_calibParam.EffPairs;
|
||||
// float *Efficiency = (float *)malloc(sizeof(float)*size*2);
|
||||
// for(int i=0; i<size; ++i)
|
||||
// {
|
||||
// Efficiency[i*2] = datas.vvEffi.at(0).at(i);
|
||||
// Efficiency[i*2+1] = datas.vvEffi.at(1).at(i);
|
||||
// }
|
||||
// SpcFile.seek((m_head1.EffRP - 1) * 128);
|
||||
// qDebug() << "第14个128字节: " << SpcFile.write((char*)Efficiency, sizeof(float)*size*2);
|
||||
// free(Efficiency);
|
||||
// }
|
||||
//
|
||||
// // 写第68—?个128字节————Spectrum
|
||||
// {
|
||||
// int count_size = datas.num_count;
|
||||
// DWORD *SpcData = (DWORD*)malloc(count_size*sizeof(DWORD));
|
||||
// for(int i=0; i<count_size; ++i)
|
||||
// {
|
||||
// SpcData[i] = datas.vCounts[i];
|
||||
// }
|
||||
// SpcFile.seek((m_head1.SpcFirstRP-1)*128);
|
||||
// SpcFile.write((char*)SpcData, count_size*sizeof(DWORD));
|
||||
// free(SpcData);
|
||||
// }
|
||||
//
|
||||
// SpcFile.close();
|
||||
//
|
||||
// return true;
|
||||
// }
|
||||
public static void WriteSPC(File tmpFile, FileData datas) {
|
||||
// r:只读 rw:读写
|
||||
RandomAccessFile SpcFile = null;
|
||||
try {
|
||||
SpcFile = new RandomAccessFile(tmpFile.getAbsolutePath(), "rw");
|
||||
//分析SPC文件并创建所需要的spc文件的基础内容
|
||||
SpcHead1 m_head1 = new SpcHead1();
|
||||
SpcHead2 m_head2 = new SpcHead2();
|
||||
GermaniumCalib m_calibParam = new GermaniumCalib();
|
||||
byte[] m_totalContents = AnalyseSPC(m_head1, m_head2, m_calibParam);
|
||||
if(m_totalContents.length<=0) {
|
||||
String Warning = "The file standard.spc isn't exist or it's format is invalid.";
|
||||
}
|
||||
//SpcFile写入内容
|
||||
SpcFile.write(m_totalContents);
|
||||
|
||||
// 写第1个128字节————头部指针信息
|
||||
{
|
||||
MakeSpcHead(datas, m_head1, m_head2);
|
||||
SpcFile.seek(0);
|
||||
byte[] head1 = new byte[80];
|
||||
//使用系统的赋值数组 来源数组 开始下标 目标数组 开始下标 长度
|
||||
System.arraycopy(writeShort(m_head1.Inftyp), 0, head1, 0, 2);
|
||||
System.arraycopy(writeShort(m_head1.Filtyp), 0, head1, 2, 2);
|
||||
System.arraycopy(writeShort(m_head1.Reserved1), 0, head1, 4, 2);
|
||||
System.arraycopy(writeShort(m_head1.Reserved2), 0, head1, 6, 2);
|
||||
System.arraycopy(writeShort(m_head1.AcqInfRP), 0, head1, 8, 2);
|
||||
System.arraycopy(writeShort(m_head1.SamDesRP), 0, head1, 10, 2);
|
||||
System.arraycopy(writeShort(m_head1.DetDesRP), 0, head1, 12, 2);
|
||||
System.arraycopy(writeShort(m_head1.EbrDesRP), 0, head1, 14, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP1), 0, head1, 16, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP2), 0, head1, 18, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP3), 0, head1, 20, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP4), 0, head1, 22, 2);
|
||||
System.arraycopy(writeShort(m_head1.SrpDesRP), 0, head1, 24, 2);
|
||||
System.arraycopy(writeShort(m_head1.IeqDesRP), 0, head1, 26, 2);
|
||||
System.arraycopy(writeShort(m_head1.GeoDesRP), 0, head1, 28, 2);
|
||||
System.arraycopy(writeShort(m_head1.MpcDesRP), 0, head1, 30, 2);
|
||||
System.arraycopy(writeShort(m_head1.CalDesRP), 0, head1, 32, 2);
|
||||
System.arraycopy(writeShort(m_head1.CalRP1), 0, head1, 34, 2);
|
||||
System.arraycopy(writeShort(m_head1.CalRP2), 0, head1, 36, 2);
|
||||
System.arraycopy(writeShort(m_head1.EffRP), 0, head1, 38, 2);
|
||||
System.arraycopy(writeShort(m_head1.ROI1), 0, head1, 40, 2);
|
||||
System.arraycopy(writeShort(m_head1.EngPrRP), 0, head1, 42, 2);
|
||||
System.arraycopy(writeShort(m_head1.EngPrNum), 0, head1, 44, 2);
|
||||
System.arraycopy(writeShort(m_head1.Reserved3), 0, head1, 46, 2);
|
||||
System.arraycopy(writeShort(m_head1.DDP), 0, head1, 48, 2);
|
||||
System.arraycopy(writeShort(m_head1.ActUnit), 0, head1, 50, 2);
|
||||
System.arraycopy(writeShort(m_head1.LabPerRP), 0, head1, 52, 2);
|
||||
System.arraycopy(writeShort(m_head1.MaxNumE), 0, head1, 54, 2);
|
||||
System.arraycopy(writeShort(m_head1.MaxNumU), 0, head1, 56, 2);
|
||||
System.arraycopy(writeShort(m_head1.EffNum), 0, head1, 58, 2);
|
||||
System.arraycopy(writeShort(m_head1.SpcFirstRP), 0, head1, 60, 2);
|
||||
System.arraycopy(writeShort(m_head1.SpcRecNum), 0, head1, 62, 2);
|
||||
System.arraycopy(writeShort(m_head1.SpcChnNum), 0, head1, 64, 2);
|
||||
System.arraycopy(writeShort(m_head1.Abstch), 0, head1, 66, 2);
|
||||
System.arraycopy(writeFloat(m_head1.AcqTime), 0, head1, 68, 4);
|
||||
System.arraycopy(writeDouble(m_head1.AcqTime8), 0, head1, 72, 8);
|
||||
SpcFile.write(head1);
|
||||
SpcFile.seek(78);
|
||||
byte[] head2 = new byte[20];
|
||||
System.arraycopy(writeShort(m_head2.AddRAM), 0, head2, 0, 2);
|
||||
System.arraycopy(writeShort(m_head2.Seqnum), 0, head2, 2, 2);
|
||||
System.arraycopy(writeShort(m_head2.Mcanu), 0, head2, 4, 2);
|
||||
System.arraycopy(writeShort(m_head2.Segnum), 0, head2, 6, 2);
|
||||
System.arraycopy(writeShort(m_head2.Mcadvt), 0, head2, 8, 2);
|
||||
System.arraycopy(writeShort(m_head2.Chnsrt), 0, head2, 10, 2);
|
||||
System.arraycopy(writeFloat(m_head2.RealTime), 0, head2, 12, 4);
|
||||
System.arraycopy(writeFloat(m_head2.LiveTime), 0, head2, 16, 4);
|
||||
SpcFile.write(head2);
|
||||
}
|
||||
|
||||
// 写第2个128字节————Acquisition信息
|
||||
{
|
||||
char[] acq_info = new char[128];
|
||||
acq_info[0] = ' ';
|
||||
int offset = 16; // 16 Bytes Spectrum file name
|
||||
String temp = GetDate(datas.getAcq_date());
|
||||
for(int i=0; i<temp.length(); i++) {
|
||||
acq_info[i+offset] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 12; // 12 Bytes Acq_Date
|
||||
temp = datas.getAcq_time().substring(0, 8); // HH:mm:ss
|
||||
for(int i=0; i<temp.length(); i++) {
|
||||
acq_info[i+offset] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 10; // 10 Bytes Acq_Time
|
||||
temp = String.format("%10.0f", datas.getAcq_live());
|
||||
int size = temp.length() > 10 ? 10 : temp.length();
|
||||
for(int i=0; i<size; i++) {
|
||||
acq_info[offset+i] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 10;
|
||||
temp = String.format("%10.0f", datas.getAcq_real());
|
||||
size = temp.length() > 10 ? 10 : temp.length();
|
||||
for(int i=0; i<size; i++) {
|
||||
acq_info[offset+i] = temp.charAt(i);
|
||||
}
|
||||
byte[] acqInfo = new byte[128];
|
||||
for (int i=0; i<acq_info.length; i++) {
|
||||
System.arraycopy(writeChar(acq_info[i]), 0, acqInfo, i, 1);
|
||||
}
|
||||
SpcFile.seek((m_head1.AcqInfRP - 1) * 128);
|
||||
SpcFile.write(acqInfo);
|
||||
}
|
||||
|
||||
// 写第5个128字节————Germanium Calibration
|
||||
{
|
||||
MakeCalibParam(datas, m_calibParam);
|
||||
SpcFile.seek((m_head1.CalRP1-1)*128);
|
||||
byte[] calByte = new byte[128];
|
||||
System.arraycopy(writeShort(m_calibParam.Afit), 0, calByte, 0, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.Bfit), 0, calByte, 2, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.EffPairs), 0, calByte, 4, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.NumOfChan), 0, calByte, 6, 2);
|
||||
System.arraycopy(writeFloat(m_calibParam.Knee), 0, calByte, 8, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.Asig), 0, calByte, 12, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.Bsig), 0, calByte, 16, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.EnerCoefA), 0, calByte, 20, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.EnerCoefB), 0, calByte, 24, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.EnerCoefC), 0, calByte, 28, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.FwhmCoefA), 0, calByte, 32, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.FwhmCoefB), 0, calByte, 36, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.FwhmCoefC), 0, calByte, 40, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.AboveEffiCoefA), 0, calByte, 44, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.AboveEffiCoefB), 0, calByte, 48, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.AboveEffiCoefC), 0, calByte, 52, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.BelowEffiCoefA), 0, calByte, 56, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.BelowEffiCoefB), 0, calByte, 60, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.BelowEffiCoefC), 0, calByte, 64, 4);
|
||||
System.arraycopy(writeShort(m_calibParam.FwhmTyp), 0, calByte, 68, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.PeType), 0, calByte, 70, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.MaestroPSS), 0 ,calByte, 72, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.EngPairs), 0, calByte, 74, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.DetectorNum), 0, calByte, 76, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.NumBelowKnee), 0, calByte, 78, 2);
|
||||
System.arraycopy(writeFloat(m_calibParam.ENA2), 0, calByte, 80, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.ENB2), 0, calByte, 84, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.ENC2), 0, calByte, 88, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.CalUncert), 0, calByte, 92, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.CalDif), 0, calByte, 96, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef7), 0, calByte, 100, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef8), 0, calByte, 104, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef9), 0, calByte, 108, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef10), 0, calByte, 112, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.LowChanFwhmErr), 0, calByte, 116, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.HighChanFwhmErr), 0, calByte, 120, 4);
|
||||
System.arraycopy(writeShort(m_calibParam.CalibLimit), 0, calByte, 124, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.STypeFlag), 0, calByte, 126, 2);
|
||||
SpcFile.write(calByte);
|
||||
}
|
||||
|
||||
// 写第7个128字节————Calibration DateTime
|
||||
{
|
||||
char[] cal_info = new char[128];
|
||||
cal_info[0] = '0';
|
||||
int offset = 32; // 32 Bytes Calibration file name
|
||||
String temp = GetDate(datas.getCalibra_time().substring(0, 10));
|
||||
for(int i=0; i<temp.length(); ++i) {
|
||||
cal_info[i+offset] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 10; // 10 Bytes Cal_Date
|
||||
String str = datas.getCalibra_time().substring(datas.getCalibra_time().length()-10).substring(0, 8);
|
||||
for(int i=0; i<str.length(); ++i) {
|
||||
cal_info[i+offset] = str.charAt(i);
|
||||
}
|
||||
byte[] calInfo = new byte[128];
|
||||
for (int i=0; i<cal_info.length; i++) {
|
||||
System.arraycopy(writeChar(cal_info[i]), 0, calInfo, i, 1);
|
||||
}
|
||||
SpcFile.seek((m_head1.CalRP2 - 1) * 128);
|
||||
SpcFile.write(calInfo);
|
||||
}
|
||||
|
||||
// 写第11—13个128字节————能量、半高宽刻度数据
|
||||
{
|
||||
int pairs_num = 96*1;
|
||||
float[] pairs = new float[pairs_num];
|
||||
Arrays.fill(pairs, 0.0f);
|
||||
|
||||
int size = m_calibParam.EngPairs;
|
||||
int adjust = 0;
|
||||
for(int i=0; i<size; ++i) {
|
||||
adjust = i / 32 * 96 + i % 32;
|
||||
pairs[adjust] = Float.valueOf(String.valueOf(datas.getVvEner().get(1).get(i)));
|
||||
pairs[adjust+32] = Float.valueOf(String.valueOf(datas.getVvEner().get(0).get(i)));
|
||||
pairs[adjust+64] = Float.valueOf(String.valueOf(datas.getVvReso().get(1).get(i)/datas.getEner_slope()));
|
||||
}
|
||||
byte[] pairInfo = new byte[pairs_num*4];
|
||||
int j=0;
|
||||
for (int i=0; i<pairs.length; i++) {
|
||||
System.arraycopy(writeFloat(pairs[i]), 0, pairInfo, j, 4);
|
||||
j+=4;
|
||||
}
|
||||
SpcFile.seek((m_head1.EngPrRP-1)*128);
|
||||
SpcFile.write(pairInfo);
|
||||
}
|
||||
|
||||
// 写第14个128字节————效率刻度数据
|
||||
{
|
||||
int size = m_calibParam.EffPairs;
|
||||
float[] Efficiency = new float[4*size*2];
|
||||
for(int i=0; i<size; ++i) {
|
||||
Efficiency[i*2] = Float.valueOf(String.valueOf(datas.getVvEffi().get(0).get(i)));
|
||||
Efficiency[i*2+1] = Float.valueOf(String.valueOf(datas.getVvEffi().get(1).get(i)));
|
||||
}
|
||||
byte[] effInfo = new byte[4*4*size*2];
|
||||
int j=0;
|
||||
for (int i=0; i<Efficiency.length; i++) {
|
||||
System.arraycopy(writeFloat(Efficiency[i]), 0, effInfo, j, 4);
|
||||
j+=4;
|
||||
}
|
||||
SpcFile.seek((m_head1.EffRP - 1) * 128);
|
||||
SpcFile.write(effInfo);
|
||||
}
|
||||
|
||||
//写第68—?个128字节————Spectrum
|
||||
{
|
||||
int count_size = datas.getNum_count();
|
||||
int[] SpcData = new int[count_size];
|
||||
for(int i=0; i<count_size; ++i) {
|
||||
SpcData[i] = Integer.valueOf(String.valueOf(datas.getVCounts().get(i)));
|
||||
}
|
||||
byte[] spcDataInfo = new byte[count_size*4];
|
||||
int j=0;
|
||||
for (int i=0; i<SpcData.length; i++) {
|
||||
System.arraycopy(writeInt(SpcData[i]), 0, spcDataInfo, j, 4);
|
||||
j+=4;
|
||||
}
|
||||
SpcFile.seek((m_head1.SpcFirstRP-1)*128);
|
||||
SpcFile.write(spcDataInfo);
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
try {
|
||||
if (Objects.nonNull(SpcFile)) {
|
||||
SpcFile.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String convert(byte[] bytes, String type) {
|
||||
List<String> values = new LinkedList<>();
|
||||
|
@ -1291,4 +1399,276 @@ public class FileFtransitUtil {
|
|||
return "";
|
||||
}
|
||||
|
||||
public static byte[] AnalyseSPC(SpcHead1 m_head1, SpcHead2 m_head2, GermaniumCalib m_calibParam) {
|
||||
String standard_spc = "D:\\ARMD\\材料\\spc-ims\\standard.SPC";
|
||||
File standardSpc = new File(standard_spc);
|
||||
if(!standardSpc.exists()) {
|
||||
String Warning = standard_spc + " isn't exist.";
|
||||
return new byte[0];
|
||||
}
|
||||
RandomAccessFile SpcFile = null;
|
||||
try {
|
||||
SpcFile = new RandomAccessFile(standard_spc, "r");
|
||||
short Inftyp = 0;
|
||||
short Filtyp = 0;
|
||||
//读取第一个数据
|
||||
byte[] first = new byte[2];
|
||||
SpcFile.read(first);
|
||||
Inftyp = Short.valueOf(convert(first, "short"));
|
||||
//读取第二个数据
|
||||
byte[] second = new byte[2];
|
||||
SpcFile.read(second);
|
||||
Filtyp = Short.valueOf(convert(second, "short"));
|
||||
if(Inftyp != 1 || Filtyp != 1) {
|
||||
String Warning = "The Format of "+standardSpc+" is Error!";
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
int length = (int) SpcFile.length();
|
||||
byte[] m_totalContents = new byte[length];
|
||||
SpcFile.seek(0);
|
||||
SpcFile.read(m_totalContents);
|
||||
|
||||
// 读入整形spc文件的头记录(第一个记录)-128字节
|
||||
SpcFile.seek(0);
|
||||
//头部信息需要读取的字节数
|
||||
byte[] headByte1 = new byte[80];
|
||||
SpcFile.read(headByte1);
|
||||
//读取后赋值
|
||||
m_head1.Inftyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short"));
|
||||
m_head1.Filtyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short"));
|
||||
m_head1.Reserved1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short"));
|
||||
m_head1.Reserved2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short"));
|
||||
m_head1.AcqInfRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short"));
|
||||
m_head1.SamDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short"));
|
||||
m_head1.DetDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short"));
|
||||
m_head1.EbrDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short"));
|
||||
m_head1.AnaRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short"));
|
||||
m_head1.AnaRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short"));
|
||||
m_head1.AnaRP3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short"));
|
||||
m_head1.AnaRP4 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short"));
|
||||
m_head1.SrpDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short"));
|
||||
m_head1.IeqDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short"));
|
||||
m_head1.GeoDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short"));
|
||||
m_head1.MpcDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short"));
|
||||
m_head1.CalDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short"));
|
||||
m_head1.CalRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short"));
|
||||
m_head1.CalRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short"));
|
||||
m_head1.EffRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short"));
|
||||
m_head1.ROI1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short"));
|
||||
m_head1.EngPrRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short"));
|
||||
m_head1.EngPrNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short"));
|
||||
m_head1.Reserved3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short"));
|
||||
m_head1.DDP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short"));
|
||||
m_head1.ActUnit = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short"));
|
||||
m_head1.LabPerRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short"));
|
||||
m_head1.MaxNumE = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short"));
|
||||
m_head1.MaxNumU = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short"));
|
||||
m_head1.EffNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short"));
|
||||
m_head1.SpcFirstRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short"));
|
||||
m_head1.SpcRecNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short"));
|
||||
m_head1.SpcChnNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short"));
|
||||
m_head1.Abstch = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short"));
|
||||
m_head1.AcqTime = Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float"));
|
||||
m_head1.AcqTime8 = Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double"));
|
||||
SpcFile.seek(78);
|
||||
byte[] headByte2 = new byte[20];
|
||||
SpcFile.read(headByte2);
|
||||
m_head2.AddRAM = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short"));
|
||||
m_head2.Seqnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short"));
|
||||
m_head2.Mcanu = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short"));
|
||||
m_head2.Segnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short"));
|
||||
m_head2.Mcadvt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short"));
|
||||
m_head2.Chnsrt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 10, 12), "short"));
|
||||
m_head2.RealTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float"));
|
||||
m_head2.LiveTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float"));
|
||||
|
||||
// Germanium Calibration
|
||||
SpcFile.seek((m_head1.CalRP1-1)*128);
|
||||
byte[] charByte = new byte[128];
|
||||
SpcFile.read(charByte);
|
||||
|
||||
m_calibParam.Afit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 0, 2) , "short"));
|
||||
m_calibParam.Bfit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 2, 4), "short"));
|
||||
m_calibParam.EffPairs = Short.valueOf(convert(Arrays.copyOfRange(charByte, 4, 6), "short"));
|
||||
m_calibParam.NumOfChan = Short.valueOf(convert(Arrays.copyOfRange(charByte, 6, 8), "short"));
|
||||
m_calibParam.Knee = Float.valueOf(convert(Arrays.copyOfRange(charByte, 8, 12), "float"));
|
||||
m_calibParam.Asig = Float.valueOf(convert(Arrays.copyOfRange(charByte, 12, 16), "float"));
|
||||
m_calibParam.Bsig = Float.valueOf(convert(Arrays.copyOfRange(charByte, 16, 20), "float"));
|
||||
m_calibParam.EnerCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 20, 24), "float"));
|
||||
m_calibParam.EnerCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 24, 28), "float"));
|
||||
m_calibParam.EnerCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 28, 32), "float"));
|
||||
m_calibParam.FwhmCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 32, 36), "float"));
|
||||
m_calibParam.FwhmCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 36, 40), "float"));
|
||||
m_calibParam.FwhmCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 40, 44), "float"));
|
||||
m_calibParam.AboveEffiCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 44, 48), "float"));
|
||||
m_calibParam.AboveEffiCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 48, 52), "float"));
|
||||
m_calibParam.AboveEffiCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 52, 56), "float"));
|
||||
m_calibParam.BelowEffiCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 56, 60), "float"));
|
||||
m_calibParam.BelowEffiCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 60, 64), "float"));
|
||||
m_calibParam.BelowEffiCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 64, 68), "float"));
|
||||
m_calibParam.FwhmTyp = Short.valueOf(convert(Arrays.copyOfRange(charByte, 68, 70), "short"));
|
||||
m_calibParam.PeType = Short.valueOf(convert(Arrays.copyOfRange(charByte, 70, 72), "short"));
|
||||
m_calibParam.MaestroPSS = Short.valueOf(convert(Arrays.copyOfRange(charByte, 72, 74), "short"));
|
||||
m_calibParam.EngPairs = Short.valueOf(convert(Arrays.copyOfRange(charByte, 74, 76), "short"));
|
||||
m_calibParam.DetectorNum = Short.valueOf(convert(Arrays.copyOfRange(charByte, 76, 78), "short"));
|
||||
m_calibParam.NumBelowKnee = Short.valueOf(convert(Arrays.copyOfRange(charByte, 78, 80), "short"));
|
||||
m_calibParam.ENA2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 80, 84), "float"));
|
||||
m_calibParam.ENB2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 84, 88), "float"));
|
||||
m_calibParam.ENC2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 88, 92), "float"));
|
||||
m_calibParam.CalUncert = Float.valueOf(convert(Arrays.copyOfRange(charByte, 92, 96), "float"));
|
||||
m_calibParam.CalDif = Float.valueOf(convert(Arrays.copyOfRange(charByte, 96, 100), "float"));
|
||||
m_calibParam.PolyCoef7 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 100, 104), "float"));
|
||||
m_calibParam.PolyCoef8 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 104, 108), "float"));
|
||||
m_calibParam.PolyCoef9 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 108, 112), "float"));
|
||||
m_calibParam.PolyCoef10 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 112, 116), "float"));
|
||||
m_calibParam.LowChanFwhmErr = Float.valueOf(convert(Arrays.copyOfRange(charByte, 116, 120), "float"));
|
||||
m_calibParam.HighChanFwhmErr = Float.valueOf(convert(Arrays.copyOfRange(charByte, 120, 124), "float"));
|
||||
m_calibParam.CalibLimit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 124, 126), "short"));
|
||||
m_calibParam.STypeFlag = Short.valueOf(convert(Arrays.copyOfRange(charByte, 126, 128), "short"));
|
||||
|
||||
SpcFile.close();
|
||||
return m_totalContents;
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void MakeSpcHead(FileData datas, SpcHead1 m_head1, SpcHead2 m_head2) {
|
||||
m_head1.Inftyp = 1;
|
||||
m_head1.Filtyp = 1;
|
||||
if(datas.getVvEner().size() > 0 && datas.getVvReso().size() > 0) {
|
||||
int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size());
|
||||
if(size > 32*1) {
|
||||
size = 32*1;
|
||||
}
|
||||
m_head1.EngPrNum = (short) size;
|
||||
}
|
||||
if(datas.getVvEffi().size() > 0) {
|
||||
m_head1.EffNum = (short) datas.getVvEffi().get(0).size();
|
||||
}
|
||||
m_head1.SpcRecNum = (short) (datas.getNum_count()/32);
|
||||
m_head1.SpcChnNum = (short) datas.getNum_count();
|
||||
m_head1.AcqTime = 12631.7f;
|
||||
m_head1.AcqTime8 = 12631.7;
|
||||
|
||||
m_head2.Chnsrt = (short) datas.getStart_chan();
|
||||
m_head2.RealTime = datas.getAcq_real();
|
||||
m_head2.LiveTime = datas.getAcq_live();
|
||||
}
|
||||
|
||||
public static void MakeCalibParam(FileData datas, GermaniumCalib m_calibParam) {
|
||||
if(datas.getVvEffi().size() < 3 || datas.getVvEner().size() < 3 || datas.getVvReso().size() < 3) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_calibParam.NumOfChan = (short) datas.getNum_count();
|
||||
if(datas.getVvEner().size() > 0 && datas.getVvReso().size() > 0) {
|
||||
int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size());
|
||||
if(size > 32*1) {
|
||||
size = 32*1;
|
||||
}
|
||||
m_calibParam.EngPairs = (short) size;
|
||||
}
|
||||
if(datas.getVvEffi().size() > 0) {
|
||||
m_calibParam.EffPairs = (short) datas.getVvEffi().get(0).size();
|
||||
}
|
||||
ParameterInfo ener_para = new ParameterInfo();
|
||||
ener_para.setP(CalValuesHandler.calFitPara("Cal_Energy", 2, datas.getVvEner().get(1), datas.getVvEner().get(0), datas.getVvEner().get(2)));
|
||||
ParameterInfo reso_para = new ParameterInfo();
|
||||
reso_para.setP(CalValuesHandler.calFitPara("Cal_Resolution", 2, datas.getVvReso().get(0), datas.getVvReso().get(1), datas.getVvReso().get(2)));
|
||||
if(ener_para.getP().size() < 3) {
|
||||
return;
|
||||
} else if(ener_para.getP().size() == 3) {
|
||||
ener_para.getP().add(0.0);
|
||||
}
|
||||
if(reso_para.getP().size() < 3) {
|
||||
return;
|
||||
} else if(reso_para.getP().size() == 3) {
|
||||
reso_para.getP().add(0.0);
|
||||
}
|
||||
m_calibParam.EnerCoefA = Float.valueOf(String.valueOf(ener_para.getP().get(1)));
|
||||
m_calibParam.EnerCoefB = Float.valueOf(String.valueOf(ener_para.getP().get(2)));
|
||||
m_calibParam.EnerCoefC = Float.valueOf(String.valueOf(ener_para.getP().get(3)));
|
||||
m_calibParam.FwhmCoefA = Float.valueOf(String.valueOf(reso_para.getP().get(1)));
|
||||
m_calibParam.FwhmCoefB = Float.valueOf(String.valueOf(reso_para.getP().get(2)));
|
||||
m_calibParam.FwhmCoefC = Float.valueOf(String.valueOf(reso_para.getP().get(3)));
|
||||
}
|
||||
|
||||
public static String GetDate(String str) {
|
||||
str = str.substring(0, 10); // YYYY/MM/DD
|
||||
String temp = str.substring(str.length()-2)+ StringPool.DASH; // DD-
|
||||
int month = Integer.valueOf(str.substring(5, 7));
|
||||
switch(month) { // DD-MMM
|
||||
case 1: temp+="Jan"; break;
|
||||
case 2: temp+="Feb"; break;
|
||||
case 3: temp+="Mar"; break;
|
||||
case 4: temp+="Apr"; break;
|
||||
case 5: temp+="May"; break;
|
||||
case 6: temp+="Jun"; break;
|
||||
case 7: temp+="Jul"; break;
|
||||
case 8: temp+="Aug"; break;
|
||||
case 9: temp+="Sep"; break;
|
||||
case 10: temp+="Oct"; break;
|
||||
case 11: temp+="Nov"; break;
|
||||
case 12: temp+="Dec"; break;
|
||||
default: temp+="Jan"; break;
|
||||
}
|
||||
temp+=String.format("-%s", str.substring(2, 4)); // DD-MMM-YY
|
||||
if(str.substring(0, 2) == "20") { // DD-MMM-YY*
|
||||
temp+="1";
|
||||
} else {
|
||||
temp+="0";
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
|
||||
public static byte[] writeShort(int v) {
|
||||
byte[] byteArr = new byte[2];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static byte[] writeChar(int v) {
|
||||
byte[] byteArr = new byte[2];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static byte[] writeInt(int v) {
|
||||
byte[] byteArr = new byte[4];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
byteArr[2] = (byte) ((v >>> 16) & 0xFF);
|
||||
byteArr[3] = (byte) ((v >>> 24) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static byte[] writeLong(long v) {
|
||||
byte[] byteArr = new byte[8];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
byteArr[2] = (byte) ((v >>> 16) & 0xFF);
|
||||
byteArr[3] = (byte) ((v >>> 24) & 0xFF);
|
||||
byteArr[4] = (byte) ((v >>> 32) & 0xFF);
|
||||
byteArr[5] = (byte) ((v >>> 40) & 0xFF);
|
||||
byteArr[6] = (byte) ((v >>> 48) & 0xFF);
|
||||
byteArr[7] = (byte) ((v >>> 56) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static byte[] writeFloat(float v) {
|
||||
byte[] byteArr = writeInt(Float.floatToIntBits(v));
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static byte[] writeDouble(double v) {
|
||||
byte[] byteArr = writeLong(Double.doubleToLongBits(v));
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
package org.jeecg.modules.entity.vo;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class GermaniumCalib implements Serializable {
|
||||
|
||||
public short Afit;
|
||||
public short Bfit;
|
||||
public short EffPairs;
|
||||
public short NumOfChan;
|
||||
public float Knee;
|
||||
public float Asig;
|
||||
public float Bsig;
|
||||
public float EnerCoefA;
|
||||
public float EnerCoefB;
|
||||
public float EnerCoefC;
|
||||
public float FwhmCoefA;
|
||||
public float FwhmCoefB;
|
||||
public float FwhmCoefC;
|
||||
public float AboveEffiCoefA;
|
||||
public float AboveEffiCoefB;
|
||||
public float AboveEffiCoefC;
|
||||
public float BelowEffiCoefA;
|
||||
public float BelowEffiCoefB;
|
||||
public float BelowEffiCoefC;
|
||||
public short FwhmTyp;
|
||||
public short PeType;
|
||||
public short MaestroPSS;
|
||||
public short EngPairs;
|
||||
public short DetectorNum;
|
||||
public short NumBelowKnee;
|
||||
public float ENA2;
|
||||
public float ENB2;
|
||||
public float ENC2;
|
||||
public float CalUncert;
|
||||
public float CalDif;
|
||||
public float PolyCoef7;
|
||||
public float PolyCoef8;
|
||||
public float PolyCoef9;
|
||||
public float PolyCoef10;
|
||||
public float LowChanFwhmErr;
|
||||
public float HighChanFwhmErr;
|
||||
public short CalibLimit;
|
||||
public short STypeFlag;
|
||||
|
||||
public GermaniumCalib() {
|
||||
Afit = 0;
|
||||
Bfit = 0;
|
||||
EffPairs = 0; // Number of efficiency pairs
|
||||
NumOfChan = 0; // Number of channels in spectrum
|
||||
Knee = 0.0f;
|
||||
Asig = 0.0f;
|
||||
Bsig = 0.0f;
|
||||
EnerCoefA = 0.0f;
|
||||
EnerCoefB = 0.0f;
|
||||
EnerCoefC = 0.0f;
|
||||
FwhmCoefA = 0.0f;
|
||||
FwhmCoefB = 0.0f;
|
||||
FwhmCoefC = 0.0f;
|
||||
AboveEffiCoefA = 0.0f;
|
||||
AboveEffiCoefB = 0.0f;
|
||||
AboveEffiCoefC = 0.0f;
|
||||
BelowEffiCoefA = 0.0f;
|
||||
BelowEffiCoefB = 0.0f;
|
||||
BelowEffiCoefC = 0.0f;
|
||||
FwhmTyp = 0;
|
||||
PeType = 0;
|
||||
MaestroPSS = 0;
|
||||
EngPairs = 0; // Number of energy pairs
|
||||
DetectorNum = 0;
|
||||
NumBelowKnee = 0;
|
||||
ENA2 = 0.0f;
|
||||
ENB2 = 0.0f;
|
||||
ENC2 = 0.0f;
|
||||
CalUncert = 0.0f;
|
||||
CalDif = 0.0f;
|
||||
PolyCoef7 = 0.0f;
|
||||
PolyCoef8 = 0.0f;
|
||||
PolyCoef9 = 0.0f;
|
||||
PolyCoef10 = 0.0f;
|
||||
LowChanFwhmErr = 0.0f;
|
||||
HighChanFwhmErr = 0.0f;
|
||||
CalibLimit = 0;
|
||||
STypeFlag = 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -5,6 +5,47 @@ import lombok.Data;
|
|||
@Data
|
||||
public class SpcHead1 {
|
||||
|
||||
public short Inftyp; //1:整形SPC文件的标志 必须为“1”
|
||||
public short Filtyp; //2:整形SPC文件的标志 必须为“1”
|
||||
public short Reserved1; //3:Reserved
|
||||
public short Reserved2; //4:Reserved
|
||||
public short AcqInfRP; //5:Acquisition Information Record pointer
|
||||
public short SamDesRP; //6:Sample Description Record pointer
|
||||
public short DetDesRP; //7:Detector Description Record pointer
|
||||
public short EbrDesRP; //8:EBAR Description Record
|
||||
|
||||
public short AnaRP1; //9:First Analysis Parameters Record pointer
|
||||
public short AnaRP2; //10:Second Analysis Parameters Record pointer
|
||||
public short AnaRP3; //11:Third Analysis Parameters Record pointer
|
||||
public short AnaRP4; //12:Fourth Analysis Parameters Record pointer
|
||||
public short SrpDesRP; //13:Absorption Correction Description Record pointer
|
||||
public short IeqDesRP; //14:IEQ Description Record pointer
|
||||
public short GeoDesRP; //15:Geometry Correction Description Record pointer
|
||||
public short MpcDesRP; //16:MPC Description Record pointer
|
||||
|
||||
public short CalDesRP; //17:Calibration Description Record pointer
|
||||
public short CalRP1; //18:First Calibration Data Record pointer
|
||||
public short CalRP2; //19:Second Calibration Data Record pointer
|
||||
public short EffRP; //20:Efficiency Pairs Record pointer(first record)
|
||||
public short ROI1; //21:Record Number of the first of the two ROI records
|
||||
public short EngPrRP; //22:Energe pairs record pointer
|
||||
public short EngPrNum; //23:Number of energy pair records
|
||||
public short Reserved3; //24:Reserved
|
||||
|
||||
public short DDP; //25:Disable deconvolution of unknown peaks
|
||||
public short ActUnit; //26:True=microCuries,false=becquerels
|
||||
public short LabPerRP; //27:Laboratory and operator name record pointer
|
||||
public short MaxNumE; //28:Maximum Record Number Ever Used
|
||||
public short MaxNumU; //29:Maximum Record Number In Use
|
||||
public short EffNum; //30:Number of Efficiency Pairs Records(See public short 20)
|
||||
public short SpcFirstRP; //31:Spectrum Record pointer (pointer to first record)
|
||||
public short SpcRecNum; //32:Number of records in the spectrum
|
||||
|
||||
public short SpcChnNum; //33:Number of channels in spectrum
|
||||
public short Abstch; //34:Physical start channel for data
|
||||
public float AcqTime; //35,36:Date and Time of acquisition start in DECDAY format
|
||||
public double AcqTime8; //37,40:Date and Time as double precision DECDAY
|
||||
|
||||
public SpcHead1() {
|
||||
// 需根据谱改变
|
||||
EngPrNum = 3;
|
||||
|
@ -48,45 +89,4 @@ public class SpcHead1 {
|
|||
AcqTime8 = 12631.7;
|
||||
}
|
||||
|
||||
public short Inftyp; //1:整形SPC文件的标志 必须为“1”
|
||||
public short Filtyp; //2:整形SPC文件的标志 必须为“1”
|
||||
public short Reserved1; //3:Reserved
|
||||
public short Reserved2; //4:Reserved
|
||||
public short AcqInfRP; //5:Acquisition Information Record pointer
|
||||
public short SamDesRP; //6:Sample Description Record pointer
|
||||
public short DetDesRP; //7:Detector Description Record pointer
|
||||
public short EbrDesRP; //8:EBAR Description Record
|
||||
|
||||
public short AnaRP1; //9:First Analysis Parameters Record pointer
|
||||
public short AnaRP2; //10:Second Analysis Parameters Record pointer
|
||||
public short AnaRP3; //11:Third Analysis Parameters Record pointer
|
||||
public short AnaRP4; //12:Fourth Analysis Parameters Record pointer
|
||||
public short SrpDesRP; //13:Absorption Correction Description Record pointer
|
||||
public short IeqDesRP; //14:IEQ Description Record pointer
|
||||
public short GeoDesRP; //15:Geometry Correction Description Record pointer
|
||||
public short MpcDesRP; //16:MPC Description Record pointer
|
||||
|
||||
public short CalDesRP; //17:Calibration Description Record pointer
|
||||
public short CalRP1; //18:First Calibration Data Record pointer
|
||||
public short CalRP2; //19:Second Calibration Data Record pointer
|
||||
public short EffRP; //20:Efficiency Pairs Record pointer(first record)
|
||||
public short ROI1; //21:Record Number of the first of the two ROI records
|
||||
public short EngPrRP; //22:Energe pairs record pointer
|
||||
public short EngPrNum; //23:Number of energy pair records
|
||||
public short Reserved3; //24:Reserved
|
||||
|
||||
public short DDP; //25:Disable deconvolution of unknown peaks
|
||||
public short ActUnit; //26:True=microCuries,false=becquerels
|
||||
public short LabPerRP; //27:Laboratory and operator name record pointer
|
||||
public short MaxNumE; //28:Maximum Record Number Ever Used
|
||||
public short MaxNumU; //29:Maximum Record Number In Use
|
||||
public short EffNum; //30:Number of Efficiency Pairs Records(See public short 20)
|
||||
public short SpcFirstRP; //31:Spectrum Record pointer (pointer to first record)
|
||||
public short SpcRecNum; //32:Number of records in the spectrum
|
||||
|
||||
public short SpcChnNum; //33:Number of channels in spectrum
|
||||
public short Abstch; //34:Physical start channel for data
|
||||
public float AcqTime; //35,36:Date and Time of acquisition start in DECDAY format
|
||||
public double AcqTime8; //37,40:Date and Time as double precision DECDAY
|
||||
|
||||
}
|
||||
|
|
|
@ -5,6 +5,17 @@ import lombok.Data;
|
|||
@Data
|
||||
public class SpcHead2 {
|
||||
|
||||
public short AddRAM; //40:用于补足内存
|
||||
public short Seqnum; //41:Sequence number
|
||||
public short Mcanu; //42:MCA number as two ASCII characters(old) or Detector
|
||||
// number as integer for systems with Connections
|
||||
public short Segnum; //43:Segment number as two ASCII characters(old)
|
||||
// or as integer value 1 for systems with Connections
|
||||
public short Mcadvt; //44:MCA device type
|
||||
public short Chnsrt; //45:Start channel number
|
||||
public float RealTime; //46,47:Real Time in seconds
|
||||
public float LiveTime; //48,49:Live time in seconds
|
||||
|
||||
public SpcHead2() {
|
||||
// 需根据谱改变
|
||||
Chnsrt = 0;
|
||||
|
@ -17,14 +28,4 @@ public class SpcHead2 {
|
|||
Mcadvt = 0;
|
||||
}
|
||||
|
||||
public short AddRAM; //40:用于补足内存
|
||||
public short Seqnum; //41:Sequence number
|
||||
public short Mcanu; //42:MCA number as two ASCII characters(old) or Detector
|
||||
// number as integer for systems with Connections
|
||||
public short Segnum; //43:Segment number as two ASCII characters(old)
|
||||
// or as integer value 1 for systems with Connections
|
||||
public short Mcadvt; //44:MCA device type
|
||||
public short Chnsrt; //45:Start channel number
|
||||
public float RealTime; //46,47:Real Time in seconds
|
||||
public float LiveTime; //48,49:Live time in seconds
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import com.google.common.cache.CacheBuilder;
|
|||
import org.jeecg.modules.entity.vo.PHDFile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Component
|
||||
|
@ -30,4 +31,7 @@ public class LocalCache {
|
|||
this.phdCache = phdCache;
|
||||
}
|
||||
|
||||
public void deletePHDCache(String key){
|
||||
this.phdCache.invalidate(key);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
package org.jeecg.modules.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.jeecg.common.constant.DateConstant;
|
||||
import org.jeecg.modules.entity.vo.SpcHead1;
|
||||
import org.jeecg.modules.entity.vo.SpcHead2;
|
||||
import org.jeecg.modules.entity.vo.FileData;
|
||||
import org.jeecg.common.util.FileFtransitUtil;
|
||||
import org.jeecg.modules.entity.vo.*;
|
||||
import org.jeecg.modules.native_jni.CalValuesHandler;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Array;
|
||||
|
@ -17,422 +18,478 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class Demo {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
FileData fileData = new FileData();
|
||||
String filePath = "D:\\ARMD\\材料\\201809160001P.SPC";
|
||||
System.loadLibrary("ReadPHDFile");
|
||||
System.loadLibrary("GammaAnaly");
|
||||
FileData datas = new FileData();
|
||||
File imsFile = new File("D:\\ARMD\\材料\\spc-ims\\201809160001P.Ims");
|
||||
FileFtransitUtil.ReadIMS(imsFile, datas);
|
||||
File spcFile = new File("D:\\ARMD\\材料\\spc-ims\\test.SPC");
|
||||
// r:只读 rw:读写
|
||||
RandomAccessFile SpcFile = new RandomAccessFile(filePath, "r");
|
||||
//读取第一个数据
|
||||
byte[] first = new byte[2];
|
||||
SpcFile.read(first);
|
||||
short Inftyp = Short.valueOf(convert(first, "short"));
|
||||
//读取第二个数据
|
||||
byte[] second = new byte[2];
|
||||
SpcFile.read(second);
|
||||
short Filtyp = Short.valueOf(convert(second, "short"));
|
||||
if (Inftyp != 1 || Filtyp != 1) {
|
||||
RandomAccessFile SpcFile = new RandomAccessFile(spcFile.getAbsolutePath(), "rw");
|
||||
//分析SPC文件并创建所需要的spc文件的基础内容
|
||||
SpcHead1 m_head1 = new SpcHead1();
|
||||
SpcHead2 m_head2 = new SpcHead2();
|
||||
GermaniumCalib m_calibParam = new GermaniumCalib();
|
||||
byte[] m_totalContents = AnalyseSPC(m_head1, m_head2, m_calibParam);
|
||||
if(m_totalContents.length<=0) {
|
||||
String Warning = "The file standard.spc isn't exist or it's format is invalid.";
|
||||
}
|
||||
//SpcFile写入内容
|
||||
SpcFile.write(m_totalContents);
|
||||
|
||||
// 写第1个128字节————头部指针信息
|
||||
{
|
||||
MakeSpcHead(datas, m_head1, m_head2);
|
||||
SpcFile.seek(0);
|
||||
byte[] head1 = new byte[80];
|
||||
//使用系统的赋值数组 来源数组 开始下标 目标数组 开始下标 长度
|
||||
System.arraycopy(writeShort(m_head1.Inftyp), 0, head1, 0, 2);
|
||||
System.arraycopy(writeShort(m_head1.Filtyp), 0, head1, 2, 2);
|
||||
System.arraycopy(writeShort(m_head1.Reserved1), 0, head1, 4, 2);
|
||||
System.arraycopy(writeShort(m_head1.Reserved2), 0, head1, 6, 2);
|
||||
System.arraycopy(writeShort(m_head1.AcqInfRP), 0, head1, 8, 2);
|
||||
System.arraycopy(writeShort(m_head1.SamDesRP), 0, head1, 10, 2);
|
||||
System.arraycopy(writeShort(m_head1.DetDesRP), 0, head1, 12, 2);
|
||||
System.arraycopy(writeShort(m_head1.EbrDesRP), 0, head1, 14, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP1), 0, head1, 16, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP2), 0, head1, 18, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP3), 0, head1, 20, 2);
|
||||
System.arraycopy(writeShort(m_head1.AnaRP4), 0, head1, 22, 2);
|
||||
System.arraycopy(writeShort(m_head1.SrpDesRP), 0, head1, 24, 2);
|
||||
System.arraycopy(writeShort(m_head1.IeqDesRP), 0, head1, 26, 2);
|
||||
System.arraycopy(writeShort(m_head1.GeoDesRP), 0, head1, 28, 2);
|
||||
System.arraycopy(writeShort(m_head1.MpcDesRP), 0, head1, 30, 2);
|
||||
System.arraycopy(writeShort(m_head1.CalDesRP), 0, head1, 32, 2);
|
||||
System.arraycopy(writeShort(m_head1.CalRP1), 0, head1, 34, 2);
|
||||
System.arraycopy(writeShort(m_head1.CalRP2), 0, head1, 36, 2);
|
||||
System.arraycopy(writeShort(m_head1.EffRP), 0, head1, 38, 2);
|
||||
System.arraycopy(writeShort(m_head1.ROI1), 0, head1, 40, 2);
|
||||
System.arraycopy(writeShort(m_head1.EngPrRP), 0, head1, 42, 2);
|
||||
System.arraycopy(writeShort(m_head1.EngPrNum), 0, head1, 44, 2);
|
||||
System.arraycopy(writeShort(m_head1.Reserved3), 0, head1, 46, 2);
|
||||
System.arraycopy(writeShort(m_head1.DDP), 0, head1, 48, 2);
|
||||
System.arraycopy(writeShort(m_head1.ActUnit), 0, head1, 50, 2);
|
||||
System.arraycopy(writeShort(m_head1.LabPerRP), 0, head1, 52, 2);
|
||||
System.arraycopy(writeShort(m_head1.MaxNumE), 0, head1, 54, 2);
|
||||
System.arraycopy(writeShort(m_head1.MaxNumU), 0, head1, 56, 2);
|
||||
System.arraycopy(writeShort(m_head1.EffNum), 0, head1, 58, 2);
|
||||
System.arraycopy(writeShort(m_head1.SpcFirstRP), 0, head1, 60, 2);
|
||||
System.arraycopy(writeShort(m_head1.SpcRecNum), 0, head1, 62, 2);
|
||||
System.arraycopy(writeShort(m_head1.SpcChnNum), 0, head1, 64, 2);
|
||||
System.arraycopy(writeShort(m_head1.Abstch), 0, head1, 66, 2);
|
||||
System.arraycopy(writeFloat(m_head1.AcqTime), 0, head1, 68, 4);
|
||||
System.arraycopy(writeDouble(m_head1.AcqTime8), 0, head1, 72, 8);
|
||||
SpcFile.write(head1);
|
||||
SpcFile.seek(78);
|
||||
byte[] head2 = new byte[20];
|
||||
System.arraycopy(writeShort(m_head2.AddRAM), 0, head2, 0, 2);
|
||||
System.arraycopy(writeShort(m_head2.Seqnum), 0, head2, 2, 2);
|
||||
System.arraycopy(writeShort(m_head2.Mcanu), 0, head2, 4, 2);
|
||||
System.arraycopy(writeShort(m_head2.Segnum), 0, head2, 6, 2);
|
||||
System.arraycopy(writeShort(m_head2.Mcadvt), 0, head2, 8, 2);
|
||||
System.arraycopy(writeShort(m_head2.Chnsrt), 0, head2, 10, 2);
|
||||
System.arraycopy(writeFloat(m_head2.RealTime), 0, head2, 12, 4);
|
||||
System.arraycopy(writeFloat(m_head2.LiveTime), 0, head2, 16, 4);
|
||||
SpcFile.write(head2);
|
||||
}
|
||||
|
||||
// 写第2个128字节————Acquisition信息
|
||||
{
|
||||
char[] acq_info = new char[128];
|
||||
acq_info[0] = ' ';
|
||||
int offset = 16; // 16 Bytes Spectrum file name
|
||||
String temp = GetDate(datas.getAcq_date());
|
||||
for(int i=0; i<temp.length(); i++) {
|
||||
acq_info[i+offset] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 12; // 12 Bytes Acq_Date
|
||||
temp = datas.getAcq_time().substring(0, 8); // HH:mm:ss
|
||||
for(int i=0; i<temp.length(); i++) {
|
||||
acq_info[i+offset] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 10; // 10 Bytes Acq_Time
|
||||
temp = String.format("%10.0f", datas.getAcq_live());
|
||||
int size = temp.length() > 10 ? 10 : temp.length();
|
||||
for(int i=0; i<size; i++) {
|
||||
acq_info[offset+i] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 10;
|
||||
temp = String.format("%10.0f", datas.getAcq_real());
|
||||
size = temp.length() > 10 ? 10 : temp.length();
|
||||
for(int i=0; i<size; i++) {
|
||||
acq_info[offset+i] = temp.charAt(i);
|
||||
}
|
||||
byte[] acqInfo = new byte[128];
|
||||
for (int i=0; i<acq_info.length; i++) {
|
||||
System.arraycopy(writeChar(acq_info[i]), 0, acqInfo, i, 1);
|
||||
}
|
||||
SpcFile.seek((m_head1.AcqInfRP - 1) * 128);
|
||||
SpcFile.write(acqInfo);
|
||||
}
|
||||
|
||||
// 写第5个128字节————Germanium Calibration
|
||||
{
|
||||
MakeCalibParam(datas, m_calibParam);
|
||||
SpcFile.seek((m_head1.CalRP1-1)*128);
|
||||
byte[] calByte = new byte[128];
|
||||
System.arraycopy(writeShort(m_calibParam.Afit), 0, calByte, 0, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.Bfit), 0, calByte, 2, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.EffPairs), 0, calByte, 4, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.NumOfChan), 0, calByte, 6, 2);
|
||||
System.arraycopy(writeFloat(m_calibParam.Knee), 0, calByte, 8, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.Asig), 0, calByte, 12, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.Bsig), 0, calByte, 16, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.EnerCoefA), 0, calByte, 20, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.EnerCoefB), 0, calByte, 24, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.EnerCoefC), 0, calByte, 28, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.FwhmCoefA), 0, calByte, 32, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.FwhmCoefB), 0, calByte, 36, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.FwhmCoefC), 0, calByte, 40, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.AboveEffiCoefA), 0, calByte, 44, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.AboveEffiCoefB), 0, calByte, 48, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.AboveEffiCoefC), 0, calByte, 52, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.BelowEffiCoefA), 0, calByte, 56, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.BelowEffiCoefB), 0, calByte, 60, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.BelowEffiCoefC), 0, calByte, 64, 4);
|
||||
System.arraycopy(writeShort(m_calibParam.FwhmTyp), 0, calByte, 68, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.PeType), 0, calByte, 70, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.MaestroPSS), 0 ,calByte, 72, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.EngPairs), 0, calByte, 74, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.DetectorNum), 0, calByte, 76, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.NumBelowKnee), 0, calByte, 78, 2);
|
||||
System.arraycopy(writeFloat(m_calibParam.ENA2), 0, calByte, 80, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.ENB2), 0, calByte, 84, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.ENC2), 0, calByte, 88, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.CalUncert), 0, calByte, 92, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.CalDif), 0, calByte, 96, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef7), 0, calByte, 100, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef8), 0, calByte, 104, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef9), 0, calByte, 108, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.PolyCoef10), 0, calByte, 112, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.LowChanFwhmErr), 0, calByte, 116, 4);
|
||||
System.arraycopy(writeFloat(m_calibParam.HighChanFwhmErr), 0, calByte, 120, 4);
|
||||
System.arraycopy(writeShort(m_calibParam.CalibLimit), 0, calByte, 124, 2);
|
||||
System.arraycopy(writeShort(m_calibParam.STypeFlag), 0, calByte, 126, 2);
|
||||
SpcFile.write(calByte);
|
||||
}
|
||||
|
||||
// 写第7个128字节————Calibration DateTime
|
||||
{
|
||||
char[] cal_info = new char[128];
|
||||
cal_info[0] = '0';
|
||||
int offset = 32; // 32 Bytes Calibration file name
|
||||
String temp = GetDate(datas.getCalibra_time().substring(0, 10));
|
||||
for(int i=0; i<temp.length(); ++i) {
|
||||
cal_info[i+offset] = temp.charAt(i);
|
||||
}
|
||||
|
||||
offset += 10; // 10 Bytes Cal_Date
|
||||
String str = datas.getCalibra_time().substring(datas.getCalibra_time().length()-10).substring(0, 8);
|
||||
for(int i=0; i<str.length(); ++i) {
|
||||
cal_info[i+offset] = str.charAt(i);
|
||||
}
|
||||
byte[] calInfo = new byte[128];
|
||||
for (int i=0; i<cal_info.length; i++) {
|
||||
System.arraycopy(writeChar(cal_info[i]), 0, calInfo, i, 1);
|
||||
}
|
||||
SpcFile.seek((m_head1.CalRP2 - 1) * 128);
|
||||
SpcFile.write(calInfo);
|
||||
}
|
||||
|
||||
// 写第11—13个128字节————能量、半高宽刻度数据
|
||||
{
|
||||
int pairs_num = 96*1;
|
||||
float[] pairs = new float[pairs_num];
|
||||
Arrays.fill(pairs, 0.0f);
|
||||
|
||||
int size = m_calibParam.EngPairs;
|
||||
int adjust = 0;
|
||||
for(int i=0; i<size; ++i) {
|
||||
adjust = i / 32 * 96 + i % 32;
|
||||
pairs[adjust] = Float.valueOf(String.valueOf(datas.getVvEner().get(1).get(i)));
|
||||
pairs[adjust+32] = Float.valueOf(String.valueOf(datas.getVvEner().get(0).get(i)));
|
||||
pairs[adjust+64] = Float.valueOf(String.valueOf(datas.getVvReso().get(1).get(i)/datas.getEner_slope()));
|
||||
}
|
||||
byte[] pairInfo = new byte[pairs_num*4];
|
||||
int j=0;
|
||||
for (int i=0; i<pairs.length; i++) {
|
||||
System.arraycopy(writeFloat(pairs[i]), 0, pairInfo, j, 4);
|
||||
j+=4;
|
||||
}
|
||||
SpcFile.seek((m_head1.EngPrRP-1)*128);
|
||||
SpcFile.write(pairInfo);
|
||||
}
|
||||
|
||||
// 写第14个128字节————效率刻度数据
|
||||
{
|
||||
int size = m_calibParam.EffPairs;
|
||||
float[] Efficiency = new float[4*size*2];
|
||||
for(int i=0; i<size; ++i) {
|
||||
Efficiency[i*2] = Float.valueOf(String.valueOf(datas.getVvEffi().get(0).get(i)));
|
||||
Efficiency[i*2+1] = Float.valueOf(String.valueOf(datas.getVvEffi().get(1).get(i)));
|
||||
}
|
||||
byte[] effInfo = new byte[4*4*size*2];
|
||||
int j=0;
|
||||
for (int i=0; i<Efficiency.length; i++) {
|
||||
System.arraycopy(writeFloat(Efficiency[i]), 0, effInfo, j, 4);
|
||||
j+=4;
|
||||
}
|
||||
SpcFile.seek((m_head1.EffRP - 1) * 128);
|
||||
SpcFile.write(effInfo);
|
||||
}
|
||||
|
||||
//写第68—?个128字节————Spectrum
|
||||
{
|
||||
int count_size = datas.getNum_count();
|
||||
int[] SpcData = new int[count_size];
|
||||
for(int i=0; i<count_size; ++i) {
|
||||
SpcData[i] = Integer.valueOf(String.valueOf(datas.getVCounts().get(i)));
|
||||
}
|
||||
byte[] spcDataInfo = new byte[count_size*4];
|
||||
int j=0;
|
||||
for (int i=0; i<SpcData.length; i++) {
|
||||
System.arraycopy(writeInt(SpcData[i]), 0, spcDataInfo, j, 4);
|
||||
j+=4;
|
||||
}
|
||||
SpcFile.seek((m_head1.SpcFirstRP-1)*128);
|
||||
SpcFile.write(spcDataInfo);
|
||||
}
|
||||
SpcFile.close();
|
||||
}
|
||||
|
||||
public static byte[] AnalyseSPC(SpcHead1 m_head1, SpcHead2 m_head2, GermaniumCalib m_calibParam) {
|
||||
String standard_spc = "D:\\ARMD\\材料\\spc-ims\\standard.SPC";
|
||||
File standardSpc = new File(standard_spc);
|
||||
if(!standardSpc.exists()) {
|
||||
String Warning = standard_spc + " isn't exist.";
|
||||
return new byte[0];
|
||||
}
|
||||
RandomAccessFile SpcFile = null;
|
||||
try {
|
||||
SpcFile = new RandomAccessFile(standard_spc, "r");
|
||||
short Inftyp = 0;
|
||||
short Filtyp = 0;
|
||||
//读取第一个数据
|
||||
byte[] first = new byte[2];
|
||||
SpcFile.read(first);
|
||||
Inftyp = Short.valueOf(convert(first, "short"));
|
||||
//读取第二个数据
|
||||
byte[] second = new byte[2];
|
||||
SpcFile.read(second);
|
||||
Filtyp = Short.valueOf(convert(second, "short"));
|
||||
if(Inftyp != 1 || Filtyp != 1) {
|
||||
String Warning = "The Format of "+standardSpc+" is Error!";
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
int length = (int) SpcFile.length();
|
||||
byte[] m_totalContents = new byte[length];
|
||||
SpcFile.seek(0);
|
||||
SpcFile.read(m_totalContents);
|
||||
|
||||
// 读入整形spc文件的头记录(第一个记录)-128字节
|
||||
SpcFile.seek(0);
|
||||
//头部信息需要读取的字节数
|
||||
byte[] headByte1 = new byte[80];
|
||||
SpcFile.read(headByte1);
|
||||
//读取后赋值
|
||||
m_head1.Inftyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short"));
|
||||
m_head1.Filtyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short"));
|
||||
m_head1.Reserved1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short"));
|
||||
m_head1.Reserved2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short"));
|
||||
m_head1.AcqInfRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short"));
|
||||
m_head1.SamDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short"));
|
||||
m_head1.DetDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short"));
|
||||
m_head1.EbrDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short"));
|
||||
m_head1.AnaRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short"));
|
||||
m_head1.AnaRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short"));
|
||||
m_head1.AnaRP3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short"));
|
||||
m_head1.AnaRP4 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short"));
|
||||
m_head1.SrpDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short"));
|
||||
m_head1.IeqDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short"));
|
||||
m_head1.GeoDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short"));
|
||||
m_head1.MpcDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short"));
|
||||
m_head1.CalDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short"));
|
||||
m_head1.CalRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short"));
|
||||
m_head1.CalRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short"));
|
||||
m_head1.EffRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short"));
|
||||
m_head1.ROI1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short"));
|
||||
m_head1.EngPrRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short"));
|
||||
m_head1.EngPrNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short"));
|
||||
m_head1.Reserved3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short"));
|
||||
m_head1.DDP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short"));
|
||||
m_head1.ActUnit = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short"));
|
||||
m_head1.LabPerRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short"));
|
||||
m_head1.MaxNumE = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short"));
|
||||
m_head1.MaxNumU = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short"));
|
||||
m_head1.EffNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short"));
|
||||
m_head1.SpcFirstRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short"));
|
||||
m_head1.SpcRecNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short"));
|
||||
m_head1.SpcChnNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short"));
|
||||
m_head1.Abstch = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short"));
|
||||
m_head1.AcqTime = Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float"));
|
||||
m_head1.AcqTime8 = Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double"));
|
||||
SpcFile.seek(78);
|
||||
byte[] headByte2 = new byte[20];
|
||||
SpcFile.read(headByte2);
|
||||
m_head2.AddRAM = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short"));
|
||||
m_head2.Seqnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short"));
|
||||
m_head2.Mcanu = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short"));
|
||||
m_head2.Segnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short"));
|
||||
m_head2.Mcadvt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short"));
|
||||
m_head2.Chnsrt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 10, 12), "short"));
|
||||
m_head2.RealTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float"));
|
||||
m_head2.LiveTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float"));
|
||||
|
||||
// Germanium Calibration
|
||||
SpcFile.seek((m_head1.CalRP1-1)*128);
|
||||
byte[] charByte = new byte[128];
|
||||
SpcFile.read(charByte);
|
||||
|
||||
m_calibParam.Afit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 0, 2) , "short"));
|
||||
m_calibParam.Bfit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 2, 4), "short"));
|
||||
m_calibParam.EffPairs = Short.valueOf(convert(Arrays.copyOfRange(charByte, 4, 6), "short"));
|
||||
m_calibParam.NumOfChan = Short.valueOf(convert(Arrays.copyOfRange(charByte, 6, 8), "short"));
|
||||
m_calibParam.Knee = Float.valueOf(convert(Arrays.copyOfRange(charByte, 8, 12), "float"));
|
||||
m_calibParam.Asig = Float.valueOf(convert(Arrays.copyOfRange(charByte, 12, 16), "float"));
|
||||
m_calibParam.Bsig = Float.valueOf(convert(Arrays.copyOfRange(charByte, 16, 20), "float"));
|
||||
m_calibParam.EnerCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 20, 24), "float"));
|
||||
m_calibParam.EnerCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 24, 28), "float"));
|
||||
m_calibParam.EnerCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 28, 32), "float"));
|
||||
m_calibParam.FwhmCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 32, 36), "float"));
|
||||
m_calibParam.FwhmCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 36, 40), "float"));
|
||||
m_calibParam.FwhmCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 40, 44), "float"));
|
||||
m_calibParam.AboveEffiCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 44, 48), "float"));
|
||||
m_calibParam.AboveEffiCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 48, 52), "float"));
|
||||
m_calibParam.AboveEffiCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 52, 56), "float"));
|
||||
m_calibParam.BelowEffiCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 56, 60), "float"));
|
||||
m_calibParam.BelowEffiCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 60, 64), "float"));
|
||||
m_calibParam.BelowEffiCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 64, 68), "float"));
|
||||
m_calibParam.FwhmTyp = Short.valueOf(convert(Arrays.copyOfRange(charByte, 68, 70), "short"));
|
||||
m_calibParam.PeType = Short.valueOf(convert(Arrays.copyOfRange(charByte, 70, 72), "short"));
|
||||
m_calibParam.MaestroPSS = Short.valueOf(convert(Arrays.copyOfRange(charByte, 72, 74), "short"));
|
||||
m_calibParam.EngPairs = Short.valueOf(convert(Arrays.copyOfRange(charByte, 74, 76), "short"));
|
||||
m_calibParam.DetectorNum = Short.valueOf(convert(Arrays.copyOfRange(charByte, 76, 78), "short"));
|
||||
m_calibParam.NumBelowKnee = Short.valueOf(convert(Arrays.copyOfRange(charByte, 78, 80), "short"));
|
||||
m_calibParam.ENA2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 80, 84), "float"));
|
||||
m_calibParam.ENB2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 84, 88), "float"));
|
||||
m_calibParam.ENC2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 88, 92), "float"));
|
||||
m_calibParam.CalUncert = Float.valueOf(convert(Arrays.copyOfRange(charByte, 92, 96), "float"));
|
||||
m_calibParam.CalDif = Float.valueOf(convert(Arrays.copyOfRange(charByte, 96, 100), "float"));
|
||||
m_calibParam.PolyCoef7 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 100, 104), "float"));
|
||||
m_calibParam.PolyCoef8 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 104, 108), "float"));
|
||||
m_calibParam.PolyCoef9 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 108, 112), "float"));
|
||||
m_calibParam.PolyCoef10 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 112, 116), "float"));
|
||||
m_calibParam.LowChanFwhmErr = Float.valueOf(convert(Arrays.copyOfRange(charByte, 116, 120), "float"));
|
||||
m_calibParam.HighChanFwhmErr = Float.valueOf(convert(Arrays.copyOfRange(charByte, 120, 124), "float"));
|
||||
m_calibParam.CalibLimit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 124, 126), "short"));
|
||||
m_calibParam.STypeFlag = Short.valueOf(convert(Arrays.copyOfRange(charByte, 126, 128), "short"));
|
||||
|
||||
SpcFile.close();
|
||||
return m_totalContents;
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void MakeSpcHead(FileData datas, SpcHead1 m_head1, SpcHead2 m_head2) {
|
||||
m_head1.Inftyp = 1;
|
||||
m_head1.Filtyp = 1;
|
||||
if(datas.getVvEner().size() > 0 && datas.getVvReso().size() > 0) {
|
||||
int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size());
|
||||
if(size > 32*1) {
|
||||
size = 32*1;
|
||||
}
|
||||
m_head1.EngPrNum = (short) size;
|
||||
}
|
||||
if(datas.getVvEffi().size() > 0) {
|
||||
m_head1.EffNum = (short) datas.getVvEffi().get(0).size();
|
||||
}
|
||||
m_head1.SpcRecNum = (short) (datas.getNum_count()/32);
|
||||
m_head1.SpcChnNum = (short) datas.getNum_count();
|
||||
m_head1.AcqTime = 12631.7f;
|
||||
m_head1.AcqTime8 = 12631.7;
|
||||
|
||||
m_head2.Chnsrt = (short) datas.getStart_chan();
|
||||
m_head2.RealTime = datas.getAcq_real();
|
||||
m_head2.LiveTime = datas.getAcq_live();
|
||||
}
|
||||
|
||||
public static void MakeCalibParam(FileData datas, GermaniumCalib m_calibParam) {
|
||||
if(datas.getVvEffi().size() < 3 || datas.getVvEner().size() < 3 || datas.getVvReso().size() < 3) {
|
||||
return;
|
||||
}
|
||||
// 读入整形spc文件的头记录(第一个记录)-128字节
|
||||
SpcHead1 head1 = new SpcHead1();
|
||||
SpcHead2 head2 = new SpcHead2();
|
||||
SpcFile.seek(0);
|
||||
//头部信息需要读取的字节数
|
||||
byte[] headByte1 = new byte[80];
|
||||
SpcFile.read(headByte1);
|
||||
//读取后赋值
|
||||
head1.setInftyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short")));
|
||||
head1.setFiltyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short")));
|
||||
head1.setReserved1(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short")));
|
||||
head1.setReserved2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short")) );
|
||||
head1.setAcqInfRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short")) );
|
||||
head1.setSamDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short")) );
|
||||
head1.setDetDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short")) );
|
||||
head1.setEbrDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short")) );
|
||||
head1.setAnaRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short")) );
|
||||
head1.setAnaRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short")) );
|
||||
head1.setAnaRP3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short")) );
|
||||
head1.setAnaRP4( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short")) );
|
||||
head1.setSrpDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short")) );
|
||||
head1.setIeqDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short")) );
|
||||
head1.setGeoDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short")) );
|
||||
head1.setMpcDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short")) );
|
||||
head1.setCalDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short")) );
|
||||
head1.setCalRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short")) );
|
||||
head1.setCalRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short")) );
|
||||
head1.setEffRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short")) );
|
||||
head1.setROI1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short")) );
|
||||
head1.setEngPrRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short")) );
|
||||
head1.setEngPrNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short")) );
|
||||
head1.setReserved3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short")) );
|
||||
head1.setDDP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short")) );
|
||||
head1.setActUnit( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short")) );
|
||||
head1.setLabPerRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short")) );
|
||||
head1.setMaxNumE( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short")) );
|
||||
head1.setMaxNumU( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short")) );
|
||||
head1.setEffNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short")) );
|
||||
head1.setSpcFirstRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short")) );
|
||||
head1.setSpcRecNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short")) );
|
||||
head1.setSpcChnNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short")) );
|
||||
head1.setAbstch( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short")) );
|
||||
head1.setAcqTime( Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float")));
|
||||
head1.setAcqTime8( Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double")));
|
||||
SpcFile.seek(78);
|
||||
byte[] headByte2 = new byte[20];
|
||||
SpcFile.read(headByte2);
|
||||
head2.setAddRAM( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short")) );
|
||||
head2.setSeqnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short")) );
|
||||
head2.setMcanu( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short")) );
|
||||
head2.setSegnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short")) );
|
||||
head2.setMcadvt( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short")) );
|
||||
head2.setChnsrt( Short.valueOf( convert(Arrays.copyOfRange(headByte2, 10, 12), "short")) );
|
||||
head2.setRealTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float") ) );
|
||||
head2.setLiveTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float")) );
|
||||
|
||||
// Acquisition
|
||||
//从intspc能谱中读取能谱开测时间
|
||||
int AcqY,AcqM,AcqD,AcqH,AcqMin;
|
||||
float AcqS,AcqRT,AcqLT;
|
||||
char[] temchar = new char[200];
|
||||
int lOffset;
|
||||
|
||||
lOffset=(head1.AcqInfRP-1)*128;
|
||||
SpcFile.seek(lOffset+16);
|
||||
byte[] charByte1 = new byte[12];
|
||||
SpcFile.read(charByte1);
|
||||
for (int i=0; i<charByte1.length; i++) {
|
||||
char charAt = convert(Arrays.copyOfRange(charByte1, i, i + 1), "char").charAt(0);
|
||||
temchar[i] = charAt;
|
||||
m_calibParam.NumOfChan = (short) datas.getNum_count();
|
||||
if(datas.getVvEner().size() > 0 && datas.getVvReso().size() > 0) {
|
||||
int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size());
|
||||
if(size > 32*1) {
|
||||
size = 32*1;
|
||||
}
|
||||
m_calibParam.EngPairs = (short) size;
|
||||
}
|
||||
char char1,char2;
|
||||
char1=temchar[7];
|
||||
char2=temchar[8];
|
||||
if('0'==temchar[9]) {
|
||||
temchar[7]='1'; //19xx<EFBFBD><EFBFBD>
|
||||
temchar[8]='9';
|
||||
if(datas.getVvEffi().size() > 0) {
|
||||
m_calibParam.EffPairs = (short) datas.getVvEffi().get(0).size();
|
||||
}
|
||||
ParameterInfo ener_para = new ParameterInfo();
|
||||
ener_para.setP(CalValuesHandler.calFitPara("Cal_Energy", 2, datas.getVvEner().get(1), datas.getVvEner().get(0), datas.getVvEner().get(2)));
|
||||
ParameterInfo reso_para = new ParameterInfo();
|
||||
reso_para.setP(CalValuesHandler.calFitPara("Cal_Resolution", 2, datas.getVvReso().get(0), datas.getVvReso().get(1), datas.getVvReso().get(2)));
|
||||
if(ener_para.getP().size() < 3) {
|
||||
return;
|
||||
} else if(ener_para.getP().size() == 3) {
|
||||
ener_para.getP().add(0.0);
|
||||
}
|
||||
if(reso_para.getP().size() < 3) {
|
||||
return;
|
||||
} else if(reso_para.getP().size() == 3) {
|
||||
reso_para.getP().add(0.0);
|
||||
}
|
||||
m_calibParam.EnerCoefA = Float.valueOf(String.valueOf(ener_para.getP().get(1)));
|
||||
m_calibParam.EnerCoefB = Float.valueOf(String.valueOf(ener_para.getP().get(2)));
|
||||
m_calibParam.EnerCoefC = Float.valueOf(String.valueOf(ener_para.getP().get(3)));
|
||||
m_calibParam.FwhmCoefA = Float.valueOf(String.valueOf(reso_para.getP().get(1)));
|
||||
m_calibParam.FwhmCoefB = Float.valueOf(String.valueOf(reso_para.getP().get(2)));
|
||||
m_calibParam.FwhmCoefC = Float.valueOf(String.valueOf(reso_para.getP().get(3)));
|
||||
}
|
||||
|
||||
public static String GetDate(String str) {
|
||||
str = str.substring(0, 10); // YYYY/MM/DD
|
||||
String temp = str.substring(str.length()-2)+ StringPool.DASH; // DD-
|
||||
int month = Integer.valueOf(str.substring(5, 7));
|
||||
switch(month) { // DD-MMM
|
||||
case 1: temp+="Jan"; break;
|
||||
case 2: temp+="Feb"; break;
|
||||
case 3: temp+="Mar"; break;
|
||||
case 4: temp+="Apr"; break;
|
||||
case 5: temp+="May"; break;
|
||||
case 6: temp+="Jun"; break;
|
||||
case 7: temp+="Jul"; break;
|
||||
case 8: temp+="Aug"; break;
|
||||
case 9: temp+="Sep"; break;
|
||||
case 10: temp+="Oct"; break;
|
||||
case 11: temp+="Nov"; break;
|
||||
case 12: temp+="Dec"; break;
|
||||
default: temp+="Jan"; break;
|
||||
}
|
||||
temp+=String.format("-%s", str.substring(2, 4)); // DD-MMM-YY
|
||||
if(str.substring(0, 2) == "20") { // DD-MMM-YY*
|
||||
temp+="1";
|
||||
} else {
|
||||
temchar[7]='2'; //20xx<EFBFBD><EFBFBD>
|
||||
temchar[8]='0';
|
||||
temp+="0";
|
||||
}
|
||||
temchar[9]=char1;
|
||||
temchar[10]=char2;
|
||||
temchar[11]='\0';
|
||||
|
||||
AcqY=0;
|
||||
for(int i=7;i<11;i++) {
|
||||
temchar[i]= (char) (temchar[i]-48);
|
||||
AcqY= (int) (AcqY+temchar[i]*Math.pow(10,10-i));
|
||||
}
|
||||
|
||||
AcqM = 0;
|
||||
if (temchar[3] == 'J' && temchar[4] == 'a' && temchar[5] == 'n') AcqM = 1;
|
||||
if (temchar[3] == 'F' && temchar[4] == 'e' && temchar[5] == 'b') AcqM = 2;
|
||||
if (temchar[3] == 'M' && temchar[4] == 'a' && temchar[5] == 'r') AcqM = 3;
|
||||
if (temchar[3] == 'A' && temchar[4] == 'p' && temchar[5] == 'r') AcqM = 4;
|
||||
if (temchar[3] == 'M' && temchar[4] == 'a' && temchar[5] == 'y') AcqM = 5;
|
||||
if (temchar[3] == 'J' && temchar[4] == 'u' && temchar[5] == 'n') AcqM = 6;
|
||||
if (temchar[3] == 'J' && temchar[4] == 'u' && temchar[5] == 'l') AcqM = 7;
|
||||
if (temchar[3] == 'A' && temchar[4] == 'u' && temchar[5] == 'g') AcqM = 8;
|
||||
if (temchar[3] == 'S' && temchar[4] == 'e' && temchar[5] == 'p') AcqM = 9;
|
||||
if (temchar[3] == 'O' && temchar[4] == 'c' && temchar[5] == 't') AcqM = 10;
|
||||
if (temchar[3] == 'N' && temchar[4] == 'o' && temchar[5] == 'v') AcqM = 11;
|
||||
if (temchar[3] == 'D' && temchar[4] == 'e' && temchar[5] == 'c') AcqM = 12;
|
||||
|
||||
AcqD = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
AcqD = (int) (AcqD + temchar[i] * Math.pow(10, 1 - i));
|
||||
}
|
||||
|
||||
byte[] charByte2 = new byte[10];
|
||||
SpcFile.read(charByte2);
|
||||
for (int i=0; i<charByte2.length; i++) {
|
||||
char charAt = convert(Arrays.copyOfRange(charByte2, i, i + 1), "char").charAt(0);
|
||||
temchar[i] = charAt;
|
||||
}
|
||||
temchar[9] = '\0';
|
||||
|
||||
AcqH = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
AcqH = (int) (AcqH + temchar[i] * Math.pow(10, 1 - i));
|
||||
}
|
||||
AcqMin = 0;
|
||||
for (int i = 3; i < 5; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
AcqMin = (int) (AcqMin + temchar[i] * Math.pow(10, 4 - i));
|
||||
}
|
||||
AcqS = 0;
|
||||
for (int i = 6; i < 8; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
AcqS = (float) (AcqS + temchar[i] * Math.pow(10, 7 - i));
|
||||
}
|
||||
AcqLT = 0;
|
||||
byte[] charByte3 = new byte[10];
|
||||
SpcFile.read(charByte3);
|
||||
for (int i=0; i<charByte3.length; i++) {
|
||||
char charAt = convert(Arrays.copyOfRange(charByte3, i, i + 1), "char").charAt(0);
|
||||
temchar[i] = charAt;
|
||||
}
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (temchar[i] == 32) {
|
||||
temchar[i] = 0;
|
||||
} else {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
}
|
||||
AcqLT = (float) (AcqLT + temchar[i] * Math.pow(10, 9 - i));
|
||||
}
|
||||
|
||||
AcqRT = 0;
|
||||
byte[] charByte4 = new byte[10];
|
||||
SpcFile.read(charByte4);
|
||||
for (int i=0; i<charByte4.length; i++) {
|
||||
char charAt = convert(Arrays.copyOfRange(charByte4, i, i + 1), "char").charAt(0);
|
||||
temchar[i] = charAt;
|
||||
}
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (temchar[i] == 32) {
|
||||
temchar[i] = 0;
|
||||
} else {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
}
|
||||
AcqRT = (float) (AcqRT + temchar[i] * Math.pow(10, 9 - i));
|
||||
}
|
||||
|
||||
int seconds = (int) AcqS;
|
||||
int ms = (int) ((AcqS - seconds) * 10);
|
||||
String acq_date = LocalDate.of(AcqY, AcqM, AcqD).
|
||||
format(DateTimeFormatter.ofPattern(DateConstant.DATE_BIAS));
|
||||
fileData.setAcq_date(acq_date);
|
||||
String acq_time = LocalTime.of(AcqH, AcqMin, seconds, ms)
|
||||
.format(DateTimeFormatter.ofPattern(DateConstant.TIME_MS));
|
||||
fileData.setAcq_time(acq_time);
|
||||
fileData.setAcq_real(head2.RealTime);
|
||||
fileData.setAcq_live(head2.LiveTime);
|
||||
|
||||
// Calibration
|
||||
// 从intspc能谱中读取能谱刻度时间
|
||||
int CalY, CalM, CalD, CalH, CalMin;
|
||||
float CalS;
|
||||
lOffset = (head1.CalRP2 - 1) * 128;
|
||||
SpcFile.seek(lOffset + 32);
|
||||
byte[] charByte5 = new byte[10];
|
||||
SpcFile.read(charByte5);
|
||||
for (int i=0; i<charByte5.length; i++) {
|
||||
char charAt = convert(Arrays.copyOfRange(charByte5, i, i + 1), "char").charAt(0);
|
||||
temchar[i] = charAt;
|
||||
}
|
||||
char1 = temchar[7];
|
||||
char2 = temchar[8];
|
||||
if (temchar[9] == '0') {
|
||||
temchar[7] = '1';
|
||||
temchar[8] = '9';
|
||||
} else {
|
||||
temchar[7] = '2';
|
||||
temchar[8] = '0';
|
||||
}
|
||||
temchar[9] = char1;
|
||||
temchar[10] = char2;
|
||||
temchar[11] = '\0';
|
||||
|
||||
CalY = 0;
|
||||
for (int i = 7; i < 11; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
CalY = (int) (CalY + temchar[i] * Math.pow(10, 10 - i));
|
||||
}
|
||||
|
||||
CalM = 0;
|
||||
if (temchar[3] == 'J' && temchar[4] == 'a' && temchar[5] == 'n') CalM = 1;
|
||||
if (temchar[3] == 'F' && temchar[4] == 'e' && temchar[5] == 'b') CalM = 2;
|
||||
if (temchar[3] == 'M' && temchar[4] == 'a' && temchar[5] == 'r') CalM = 3;
|
||||
if (temchar[3] == 'A' && temchar[4] == 'p' && temchar[5] == 'r') CalM = 4;
|
||||
if (temchar[3] == 'M' && temchar[4] == 'a' && temchar[5] == 'y') CalM = 5;
|
||||
if (temchar[3] == 'J' && temchar[4] == 'u' && temchar[5] == 'n') CalM = 6;
|
||||
if (temchar[3] == 'J' && temchar[4] == 'u' && temchar[5] == 'l') CalM = 7;
|
||||
if (temchar[3] == 'A' && temchar[4] == 'u' && temchar[5] == 'g') CalM = 8;
|
||||
if (temchar[3] == 'S' && temchar[4] == 'e' && temchar[5] == 'p') CalM = 9;
|
||||
if (temchar[3] == 'O' && temchar[4] == 'c' && temchar[5] == 't') CalM = 10;
|
||||
if (temchar[3] == 'N' && temchar[4] == 'o' && temchar[5] == 'v') CalM = 11;
|
||||
if (temchar[3] == 'D' && temchar[4] == 'e' && temchar[5] == 'c') CalM = 12;
|
||||
|
||||
CalD = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
CalD = (int) (CalD + temchar[i] * Math.pow(10, 1 - i));
|
||||
}
|
||||
|
||||
byte[] charByte6 = new byte[10];
|
||||
SpcFile.read(charByte6);
|
||||
for (int i=0; i<charByte6.length; i++) {
|
||||
char charAt = convert(Arrays.copyOfRange(charByte6, i, i + 1), "char").charAt(0);
|
||||
temchar[i] = charAt;
|
||||
}
|
||||
temchar[9] = '\0';
|
||||
|
||||
CalH = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
CalH = (int) (CalH + temchar[i] * Math.pow(10, 1 - i));
|
||||
}
|
||||
CalMin = 0;
|
||||
for (int i = 3; i < 5; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
CalMin = (int) (CalMin + temchar[i] * Math.pow(10, 4 - i));
|
||||
}
|
||||
CalS = 0;
|
||||
for (int i = 6; i < 8; i++) {
|
||||
temchar[i] = (char) (temchar[i] - 48);
|
||||
CalS = (float) (CalS + temchar[i] * Math.pow(10, 7 - i));
|
||||
}
|
||||
|
||||
int cal_s = (int) CalS;
|
||||
int cal_ms = (int) ((CalS - cal_s) * 10);
|
||||
String calibra_time = LocalDateTime.of(CalY, CalM, CalD, CalH, CalMin, cal_s, cal_ms)
|
||||
.format(DateTimeFormatter.ofPattern(DateConstant.DATE_BIAS_TIME_MS));
|
||||
fileData.setCalibra_time(calibra_time);
|
||||
|
||||
// g_Energy g_Resolution
|
||||
if (head1.EngPrRP > 0) { // 存在能量刻度
|
||||
//从intspc能谱中读取能谱刻度信息
|
||||
float[] Eng = new float[32];
|
||||
float[] Cer = new float[32];
|
||||
float[] FWHM = new float[32];
|
||||
|
||||
lOffset=(head1.EngPrRP-1)*128;
|
||||
SpcFile.seek(lOffset);
|
||||
byte[] cerByte = new byte[128];
|
||||
byte[] engByte = new byte[128];
|
||||
byte[] fwhmByte = new byte[128];
|
||||
SpcFile.read(cerByte);
|
||||
int j = 0;
|
||||
for (int i=0; i<cerByte.length; i+=4) {
|
||||
Float value = Float.valueOf(convert(Arrays.copyOfRange(cerByte, i, i+4), "float"));
|
||||
Cer[j] = value;
|
||||
j++;
|
||||
}
|
||||
SpcFile.read(engByte);
|
||||
j = 0;
|
||||
for (int i=0; i<engByte.length; i+=4) {
|
||||
Float value = Float.valueOf(convert(Arrays.copyOfRange(engByte, i, i+4), "float"));
|
||||
Eng[j] = value;
|
||||
j++;
|
||||
}
|
||||
SpcFile.read(fwhmByte);
|
||||
j = 0;
|
||||
for (int i=0; i<fwhmByte.length; i+=4) {
|
||||
Float value = Float.valueOf(convert(Arrays.copyOfRange(fwhmByte, i, i+4), "float"));
|
||||
FWHM[j] = value;
|
||||
j++;
|
||||
}
|
||||
short EngNum;
|
||||
lOffset=(head1.CalRP1-1)*128;
|
||||
SpcFile.seek( lOffset+74 );
|
||||
byte[] engNumByte = new byte[2];
|
||||
SpcFile.read(engNumByte);
|
||||
EngNum = Short.valueOf(convert(engNumByte, "short"));
|
||||
|
||||
float CerUnc= 0.5f;
|
||||
for(int i=0; i<EngNum; i++) {
|
||||
fileData.getVvEner().get(0).add(Double.valueOf(Eng[i]));
|
||||
fileData.getVvEner().get(1).add(Double.valueOf(Cer[i]));
|
||||
fileData.getVvEner().get(2).add(Double.valueOf(CerUnc));
|
||||
}
|
||||
if(EngNum > 1) {
|
||||
int i1 = 1;
|
||||
int i2 = EngNum - 2;
|
||||
if(EngNum < 4) {
|
||||
i1 = 0;
|
||||
i2 = EngNum - 1;
|
||||
}
|
||||
fileData.setEner_slope(Float.valueOf(Eng[i2]-Eng[i1])/(Cer[i2]-Cer[i1]));
|
||||
fileData.setEner_intercept((float) ((fileData.getVvEner().get(0).get(i1) * fileData.getVvEner().get(1).get(i2) - fileData.getVvEner().get(0).get(i2) * fileData.getVvEner().get(1).get(i1)) / (fileData.getVvEner().get(1).get(i2) - fileData.getVvEner().get(1).get(i1))));
|
||||
}
|
||||
|
||||
for(int i=0; i<EngNum; i++) {
|
||||
fileData.getVvReso().get(0).add(Double.valueOf(Eng[i]));
|
||||
fileData.getVvReso().get(1).add(Double.valueOf(FWHM[i]*fileData.getEner_slope()));
|
||||
fileData.getVvReso().get(2).add(Double.valueOf(CerUnc));
|
||||
}
|
||||
}
|
||||
|
||||
// g_Efficiency
|
||||
if(head1.EffRP>0) { //存在效率刻度
|
||||
short EffNum = 0;
|
||||
lOffset=(head1.CalRP1-1)*128;
|
||||
SpcFile.seek( lOffset+4 );
|
||||
byte[] effByte = new byte[2];
|
||||
SpcFile.read(effByte);
|
||||
EffNum = Short.valueOf(convert(effByte, "short"));
|
||||
|
||||
float[] Eff = new float[32];//0,2,4等偶数存放能量,1,3,5等奇数存放效率
|
||||
float EffUnc=0.5f;
|
||||
|
||||
lOffset=(head1.EffRP-1)*128;
|
||||
SpcFile.seek( lOffset );
|
||||
byte[] effByte2 = new byte[128];
|
||||
SpcFile.read(effByte2);
|
||||
int j=0;
|
||||
for (int i=0; i<effByte2.length; i+=4) {
|
||||
Float value = Float.valueOf(convert(Arrays.copyOfRange(effByte2, i, i+4), "float"));
|
||||
Eff[j] = value;
|
||||
j++;
|
||||
}
|
||||
|
||||
for(int i=0; i<EffNum; i++) {
|
||||
fileData.getVvEffi().get(0).add(Double.valueOf(Eff[i*2]));
|
||||
fileData.getVvEffi().get(1).add(Double.valueOf(Eff[i*2+1]));
|
||||
fileData.getVvEffi().get(2).add(Double.valueOf(EffUnc));
|
||||
}
|
||||
}
|
||||
|
||||
// Spectrum
|
||||
int[] SpcData = new int[100000];
|
||||
|
||||
fileData.setNum_count(head1.SpcChnNum);
|
||||
fileData.setStart_chan(head2.Chnsrt);
|
||||
|
||||
float EngA,EngB,EngC;
|
||||
lOffset=(head1.CalRP1-1)*128;
|
||||
SpcFile.seek( lOffset+20 );
|
||||
|
||||
byte[] engAByte = new byte[4];
|
||||
SpcFile.read(engAByte);
|
||||
EngA = Float.valueOf(convert(engAByte, "float"));
|
||||
|
||||
byte[] engBByte = new byte[4];
|
||||
SpcFile.read(engBByte);
|
||||
EngB = Float.valueOf(convert(engBByte, "float"));
|
||||
|
||||
byte[] engCByte = new byte[4];
|
||||
SpcFile.read(engCByte);
|
||||
EngC = Float.valueOf(convert(engCByte, "float"));
|
||||
|
||||
fileData.setMax_energy((int) (EngA + EngB * fileData.getNum_count() + EngC * Math.pow(fileData.getNum_count(), 2)));
|
||||
|
||||
lOffset=(head1.SpcFirstRP-1)*128;
|
||||
SpcFile.seek( lOffset );
|
||||
byte[] spcDataByte = new byte[fileData.getNum_count()*4];
|
||||
SpcFile.read(spcDataByte);
|
||||
int j=0;
|
||||
for (int i=0; i<spcDataByte.length; i+=4) {
|
||||
Integer value = Integer.valueOf(convert(Arrays.copyOfRange(spcDataByte, i, i + 4), "int"));
|
||||
SpcData[j] = value;
|
||||
j++;
|
||||
}
|
||||
|
||||
for(int i=0; i<fileData.getNum_count(); i++) {
|
||||
fileData.getVCounts().add(Long.valueOf(SpcData[i]));
|
||||
}
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
String writeValueAsString = mapper.writeValueAsString(fileData);
|
||||
System.out.println(writeValueAsString);
|
||||
SpcFile.close();
|
||||
return temp;
|
||||
}
|
||||
|
||||
public static String convert(byte[] bytes, String type) {
|
||||
|
@ -471,55 +528,52 @@ public class Demo {
|
|||
return "";
|
||||
}
|
||||
|
||||
public static char[] byteToChar(byte[] data) throws CharacterCodingException {
|
||||
/*return new String(data, StandardCharsets.UTF_16).toCharArray();*/
|
||||
/*CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder();
|
||||
String str = decoder.decode(ByteBuffer.wrap(data)).toString();
|
||||
return str.toCharArray();*/
|
||||
ByteBuffer bb = ByteBuffer.allocate (data.length);
|
||||
bb.put (data);
|
||||
bb.flip ();
|
||||
Charset cs = StandardCharsets.UTF_8;
|
||||
CharBuffer cb = cs.decode (bb);
|
||||
return cb.array();
|
||||
public static byte[] writeShort(int v) {
|
||||
byte[] byteArr = new byte[2];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static float[] byteToFloats(byte[] data) {
|
||||
// 每个浮点数占用4个字节
|
||||
int floatCount = data.length / 4;
|
||||
float[] floatArray = new float[floatCount];
|
||||
|
||||
ByteBuffer buffer = ByteBuffer.wrap(data);
|
||||
for (int i = 0; i < floatCount; i++) {
|
||||
floatArray[i] = buffer.getFloat();
|
||||
}
|
||||
|
||||
return floatArray;
|
||||
public static byte[] writeChar(int v) {
|
||||
byte[] byteArr = new byte[2];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static float byteToFloat(byte[] data) {
|
||||
ByteBuffer buffer = ByteBuffer.wrap(data);
|
||||
// 设置字节顺序为小端序
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
FloatBuffer floatBuffer = buffer.asFloatBuffer();
|
||||
return floatBuffer.get();
|
||||
public static byte[] writeInt(int v) {
|
||||
byte[] byteArr = new byte[4];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
byteArr[2] = (byte) ((v >>> 16) & 0xFF);
|
||||
byteArr[3] = (byte) ((v >>> 24) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static int[] byteToInts(byte[] data) {
|
||||
ByteBuffer buffer = ByteBuffer.wrap(data);
|
||||
// 设置字节顺序为小端序
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
IntBuffer intBuffer = buffer.asIntBuffer();
|
||||
int[] intArray = new int[intBuffer.remaining()];
|
||||
intBuffer.get(intArray);
|
||||
return intArray;
|
||||
public static byte[] writeLong(long v) {
|
||||
byte[] byteArr = new byte[8];
|
||||
byteArr[0] = (byte) ((v >>> 0) & 0xFF);
|
||||
byteArr[1] = (byte) ((v >>> 8) & 0xFF);
|
||||
byteArr[2] = (byte) ((v >>> 16) & 0xFF);
|
||||
byteArr[3] = (byte) ((v >>> 24) & 0xFF);
|
||||
byteArr[4] = (byte) ((v >>> 32) & 0xFF);
|
||||
byteArr[5] = (byte) ((v >>> 40) & 0xFF);
|
||||
byteArr[6] = (byte) ((v >>> 48) & 0xFF);
|
||||
byteArr[7] = (byte) ((v >>> 56) & 0xFF);
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static short byteToShort(byte[] data) {
|
||||
ByteBuffer buffer = ByteBuffer.wrap(data);
|
||||
// 设置字节顺序为小端序
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
return buffer.getShort();
|
||||
public static byte[] writeFloat(float v) {
|
||||
byte[] byteArr = writeInt(Float.floatToIntBits(v));
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
public static byte[] writeDouble(double v) {
|
||||
byte[] byteArr = writeLong(Double.doubleToLongBits(v));
|
||||
return byteArr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
package org.jeecg.modules.controller;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.cache.LocalCache;
|
||||
import org.jeecg.modules.base.bizVo.GammaRLR;
|
||||
import org.jeecg.modules.entity.vo.*;
|
||||
import org.jeecg.modules.feignclient.SystemClient;
|
||||
|
@ -15,6 +17,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("gamma")
|
||||
|
@ -52,6 +55,13 @@ public class GammaController {
|
|||
public Result gammaByFile(String fileName, HttpServletRequest request) {
|
||||
return gammaService.gammaByFile(fileName, request);
|
||||
}
|
||||
|
||||
@DeleteMapping("delPHDCache")
|
||||
@ApiOperation(value = "删除PHD文件缓存", notes = "删除PHD文件缓存")
|
||||
public void delPHDCache(@RequestParam String fileName) {
|
||||
gammaService.delPHDCache(fileName);
|
||||
}
|
||||
|
||||
@GetMapping("Compare")
|
||||
public Result Compare(String fileName, String compareFileName, HttpServletRequest request) {
|
||||
return gammaService.Compare(fileName, compareFileName, request);
|
||||
|
|
|
@ -20,6 +20,8 @@ public interface IGammaService{
|
|||
|
||||
Result gammaByFile(String fileName, HttpServletRequest request);
|
||||
|
||||
void delPHDCache(String fileName);
|
||||
|
||||
Result Compare(String fileName, String compareFileName, HttpServletRequest request);
|
||||
|
||||
Result Strip(String fileName, String stripFileName, Double ratioRate, HttpServletRequest request);
|
||||
|
|
|
@ -807,6 +807,15 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delPHDCache(String fileName) {
|
||||
LoginUser loginUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
|
||||
String username = loginUser.getUsername();
|
||||
String key = fileName + StrUtil.DASHED + username;
|
||||
// 删除指定key的Cache
|
||||
localCache.deletePHDCache(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result Compare(String fileName, String compareFileName, HttpServletRequest request) {
|
||||
Result result = new Result();
|
||||
|
|
Loading…
Reference in New Issue
Block a user