From 191bff95ab52eb0f10b3e49b9e79b33be89c4561 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Thu, 19 Oct 2023 09:33:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=BB=E5=8F=96Spc?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=96=B9=E6=B3=95=20=E4=BF=AE=E6=94=B9Extrap?= =?UTF-8?q?olation=E5=88=86=E6=9E=90=E6=8E=A5=E5=8F=A3=E4=B8=AD=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=86=85=E5=AE=B9=E5=AD=97=E6=AF=8D=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E5=86=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/modules/base/entity/SpcHead1.java | 91 ---- .../jeecg/common/util/FileFtransitUtil.java | 2 + .../org/jeecg/common/util/GammaFileUtil.java | 4 +- .../org/jeecg/modules/entity/vo/SpcHead1.java | 92 ++++ .../jeecg/modules/entity/vo}/SpcHead2.java | 2 +- .../org/jeecg/modules/controller/Demo.java | 439 ++++++++++++------ .../impl/SpectrumAnalysisServiceImpl.java | 18 +- 7 files changed, 398 insertions(+), 250 deletions(-) delete mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead1.java create mode 100644 jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java rename {jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity => jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo}/SpcHead2.java (95%) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead1.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead1.java deleted file mode 100644 index 575f148d..00000000 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead1.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.jeecg.modules.base.entity; - -import lombok.Data; - -@Data -public class SpcHead1 { - - public SpcHead1() { - // 需根据谱改变 - EngPrNum = 3; - EffNum = 0; - SpcRecNum = 0; - SpcChnNum = 0; - - // 重要指针 - AcqInfRP = 2; - CalRP1 = 5; - CalRP2 = 7; - EffRP = 14; - EngPrRP = 11; - SpcFirstRP = 68; - - Inftyp = 1; - Filtyp = 1; - Reserved1 = 1; - Reserved2 = 0; - SamDesRP = 3; - DetDesRP = 4; - EbrDesRP = 0; - AnaRP1 = 31; - AnaRP2 = 37; - AnaRP3 = 46; - AnaRP4 = 56; - SrpDesRP = 0; - IeqDesRP = 0; - GeoDesRP = 0; - MpcDesRP = 0; - CalDesRP = 10; - ROI1 = 65; - Reserved3 = 0; - DDP = 0; - ActUnit = 0; - LabPerRP = 55; - MaxNumE = 323; - MaxNumU = 323; - Abstch = 0; - AcqTime = 12631.7f; - 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 -} diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java index 57672dab..6532b512 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.apache.commons.lang3.StringUtils; 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.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.springframework.stereotype.Component; diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java index f38037bf..afdad0ae 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java @@ -54,9 +54,9 @@ public class GammaFileUtil extends AbstractLogOrReport { private SpectrumPathProperties spectrumPathProperties; @Autowired private NameStandUtil nameStandUtil; - @Autowired private AnalysisProcess analysisProcess; + public boolean loadFile(String pathName, String fileName, PHDFile phd, Result result) { phd.setFilepath(pathName); phd.setFilename(fileName); @@ -1366,7 +1366,7 @@ public class GammaFileUtil extends AbstractLogOrReport { try { String phdStr = mapper.writeValueAsString(phd); String nuclideLinesMap = mapper.writeValueAsString(mapLines); - String strValue = CalValuesHandler.analyseSpectrum(phdStr, nuclideLinesMap, tmpFile.getAbsolutePath(), null); + String strValue = CalValuesHandler.analyseSpectrum(phdStr, nuclideLinesMap, tmpFile.getAbsolutePath(), analysisProcess); Map parseMap = JSON.parseObject(strValue, Map.class); for (Map.Entry entry:parseMap.entrySet()) { if (entry.getKey().equalsIgnoreCase("bAnalyed")) { diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java new file mode 100644 index 00000000..ece000aa --- /dev/null +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java @@ -0,0 +1,92 @@ +package org.jeecg.modules.entity.vo; + +import lombok.Data; + +@Data +public class SpcHead1 { + + public SpcHead1() { + // 需根据谱改变 + EngPrNum = 3; + EffNum = 0; + SpcRecNum = 0; + SpcChnNum = 0; + + // 重要指针 + AcqInfRP = 2; + CalRP1 = 5; + CalRP2 = 7; + EffRP = 14; + EngPrRP = 11; + SpcFirstRP = 68; + + Inftyp = 1; + Filtyp = 1; + Reserved1 = 1; + Reserved2 = 0; + SamDesRP = 3; + DetDesRP = 4; + EbrDesRP = 0; + AnaRP1 = 31; + AnaRP2 = 37; + AnaRP3 = 46; + AnaRP4 = 56; + SrpDesRP = 0; + IeqDesRP = 0; + GeoDesRP = 0; + MpcDesRP = 0; + CalDesRP = 10; + ROI1 = 65; + Reserved3 = 0; + DDP = 0; + ActUnit = 0; + LabPerRP = 55; + MaxNumE = 323; + MaxNumU = 323; + Abstch = 0; + AcqTime = 12631.7f; + 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 + +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead2.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java similarity index 95% rename from jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead2.java rename to jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java index 86bba32c..f8ee53aa 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/SpcHead2.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java @@ -1,4 +1,4 @@ -package org.jeecg.modules.base.entity; +package org.jeecg.modules.entity.vo; import lombok.Data; diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java index 4522ff26..3c4df84e 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java @@ -1,73 +1,133 @@ package org.jeecg.modules.controller; +import com.fasterxml.jackson.databind.ObjectMapper; import org.jeecg.common.constant.DateConstant; -import org.jeecg.modules.base.entity.SpcHead1; -import org.jeecg.modules.base.entity.SpcHead2; +import org.jeecg.modules.entity.vo.SpcHead1; +import org.jeecg.modules.entity.vo.SpcHead2; import org.jeecg.modules.entity.vo.FileData; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.io.*; +import java.lang.reflect.Array; +import java.math.BigInteger; import java.nio.*; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; - -import static java.lang.Math.pow; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; public class Demo { public static void main(String[] args) throws IOException { FileData fileData = new FileData(); - String filePath = "C:\\Users\\a\\Desktop\\shift\\standard.SPC"; + String filePath = "D:\\ARMD\\材料\\201809160001P.SPC"; // r:只读 rw:读写 RandomAccessFile SpcFile = new RandomAccessFile(filePath, "r"); - short Inftyp; - short Filtyp; - byte[] buffer = new byte[2]; - SpcFile.read(buffer); - Inftyp = byteToShort(buffer); - SpcFile.read(buffer); - Filtyp = byteToShort(buffer); - if (Inftyp != 1 || Filtyp != 1) return; + //读取第一个数据 + 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) { + 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; - byte[] temByte = new byte[200 * 2]; + //从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) * 2); - SpcFile.read(temByte, 0, 12 * 2); - char[] temchar = byteToChar(temByte); - char char1, char2; - 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'; - AcqY = 0; - for (int i = 7; i < 11; i++) { - temchar[i] = (char) (temchar[i] - 48); - AcqY = (int) (AcqY + temchar[i] * pow(10, 10 - i)); + lOffset=(head1.AcqInfRP-1)*128; + SpcFile.seek(lOffset+16); + byte[] charByte1 = new byte[12]; + SpcFile.read(charByte1); + for (int i=0; i 0) // 存在能量刻度 - { - // 从intspc能谱中读取能谱刻度信息 - byte[] cerByte = new byte[32 * 4]; - byte[] engByte = new byte[32 * 4]; - byte[] fWHMByte = new byte[32 * 4]; + 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 * 2L); - SpcFile.read(cerByte, 0, 128 * 2); - float[] Cer = byteToFloats(cerByte); - SpcFile.read(engByte, 0, 128 * 2); - float[] Eng = byteToFloats(engByte); - SpcFile.read(fWHMByte, 0, 128 * 2); - float[] FWHM = byteToFloats(fWHMByte); - - short EngNum; - byte[] engNumByte = new byte[4]; - lOffset = (head1.CalRP1 - 1) * 128; - SpcFile.seek((lOffset + 74) * 2L); - SpcFile.read(engNumByte, 0, 2 * 2); - EngNum = byteToShort(engNumByte); - - float CerUnc = 0.5F; - for (int i = 0; i < EngNum; i++) { - fileData.getVvEner().get(0).add((double) Eng[i]); - fileData.getVvEner().get(1).add((double) Cer[i]); - fileData.getVvEner().get(2).add((double) CerUnc); + 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 1) { - int i1 = 1, i2 = EngNum - 2; - if (EngNum < 4) { + SpcFile.read(engByte); + j = 0; + for (int i=0; i 1) { + int i1 = 1; + int i2 = EngNum - 2; + if(EngNum < 4) { i1 = 0; i2 = EngNum - 1; } - fileData.setEner_slope((double) ((Eng[i2] - Eng[i1]) / (Cer[i2] - Cer[i1]))); - double v1 = fileData.getVvEner().get(0).get(i1) * fileData.getVvEner().get(1).get(i2); - double v2 = fileData.getVvEner().get(0).get(i2) * fileData.getVvEner().get(1).get(i1); - double v3 = fileData.getVvEner().get(1).get(i2) - fileData.getVvEner().get(1).get(i1); - fileData.setEner_intercept((v1 - v2) / v3); + fileData.setEner_slope(Double.valueOf(Eng[i2]-Eng[i1])/(Cer[i2]-Cer[i1])); + fileData.setEner_intercept(Double.valueOf(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) Eng[i]); - fileData.getVvReso().get(1).add(FWHM[i] * fileData.getEner_slope()); - fileData.getVvReso().get(2).add((double) CerUnc); + for(int i=0; i 0) { // 存在效率刻度 - byte[] effNumByte = new byte[4]; - lOffset = (head1.CalRP1 - 1) * 128; - SpcFile.seek((lOffset + 4) * 2L); - SpcFile.read(effNumByte,0,2); - short EffNum = byteToShort(effNumByte); + 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")); - // 0,2,4等偶数存放能量,1,3,5等奇数存放效率 - byte[] effByte = new byte[32 * 4]; - float EffUnc = 0.5F; + float[] Eff = new float[32];//0,2,4等偶数存放能量,1,3,5等奇数存放效率 + float EffUnc=0.5f; - lOffset = (head1.EffRP - 1) * 128; - SpcFile.seek(lOffset * 2L); - SpcFile.read(effByte, 0, 128 * 2); - float[] Eff = byteToFloats(effByte); + lOffset=(head1.EffRP-1)*128; + SpcFile.seek( lOffset ); + byte[] effByte2 = new byte[128]; + SpcFile.read(effByte2); + int j=0; + for (int i=0; i values = new LinkedList<>(); + for (int i=0; i=0; i--) { + if (values.get(i).equals("0")) { + index+="00"; + } else { + index+=values.get(i); + } + } + if (type.equalsIgnoreCase("short")) { + short shortValue = new BigInteger(index, 16).shortValue(); + return String.valueOf(shortValue); + } else if (type.equalsIgnoreCase("int")) { + int intValue = new BigInteger(index, 16).intValue(); + return String.valueOf(intValue); + } else if (type.equalsIgnoreCase("char")) { + int decimal = Integer.parseInt(index, 16); + char charValue = (char) decimal; + return String.valueOf(charValue); + } else if (type.equalsIgnoreCase("float")){ + float floatValue = Float.intBitsToFloat(new BigInteger(index, 16).intValue()); + return String.valueOf(floatValue); + } else if (type.equalsIgnoreCase("double")) { + double doubleValue = Double.longBitsToDouble(Long.parseLong(index, 16)); + return String.valueOf(doubleValue); + } + return ""; + } public static char[] byteToChar(byte[] data) throws CharacterCodingException { /*return new String(data, StandardCharsets.UTF_16).toCharArray();*/ @@ -377,4 +521,5 @@ public class Demo { buffer.order(ByteOrder.LITTLE_ENDIAN); return buffer.getShort(); } + } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java index d406e3c1..73c8844f 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java @@ -2290,9 +2290,9 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { right.setY(rData.get(0)); line_serise_data.add(left); line_serise_data.add(right); - functionFit = "Y = A*X + B "; + functionFit = "y = a*x + b "; if (scatter_serise_data.size()>1) { - functionFit = String.format("Y = %f*X + %f ", fittingPara.get(0), fittingPara.get(1)); + functionFit = String.format("y = %f*x + %f ", fittingPara.get(0), fittingPara.get(1)); } } else if(fittype.equals("poly2")) { for(int i=1;i<51;i++) { @@ -2305,12 +2305,12 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { temp.setY(rData.get(0)); line_serise_data.add(temp); } - functionFit = "Y = A+ B*X + C*X^2 "; + functionFit = "y = a+ b*x + c*x^2 "; if (scatter_serise_data.size()>1) { - functionFit = String.format("Y = %f+ %f*X + C*%f^2 ",fittingPara.get(0),fittingPara.get(1),fittingPara.get(2)); + functionFit = String.format("y = %f+ %f*x + %f*x^2 ",fittingPara.get(0),fittingPara.get(1),fittingPara.get(2)); } } else if(fittype.equals("poly3")) { - functionFit = "Y = A+ B*X + C*X^2 +D*X^3 "; + functionFit = "y = a+ b*x + c*x^2 +d*x^3 "; } List extDataList = new LinkedList<>(); for(int i=0;i1) { - refTime = String.format("Reference Time: %s ",sampleTmp.acquisition_start_date+" "+sampleTmp.acquisition_start_time); - xeAct = String.format("Xe Activity (Bq): %f", Xe_activity); + refTime = sampleTmp.acquisition_start_date+" "+sampleTmp.acquisition_start_time; + xeAct = String.valueOf(Xe_activity); } map.put("tableData", extDataList); map.put("functionFit", functionFit);