EnergySpectrumMeasureService/3rdlib/DeviceManage/include/AnalyzeSpecturmExport.h
2026-04-06 22:03:00 +08:00

582 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _ANALYZESPECTURMEXPORT_H_
#define _ANALYZESPECTURMEXPORT_H_
#ifdef ANALYZESPECTURM_EXPORTS
#define ANALYZESPECTURM_API(type) __declspec(dllexport) type __stdcall
#else
#define ANALYZESPECTURM_API(type) __declspec(dllimport) type __stdcall
#endif
#include "NuclideLibraryDefine.h"
#include "PeakInfoDefine.h"
#define MSS_SPECTURMDATA_MAXSIZE 65536
#pragma pack(push,1)
//s - Peak fails shape tests.
//D - Peak area deconvoluted.
//M - Peak is close to a library peak.
enum ePeakUseFlag
{
ePUF_PEAK_FAILED_SHAPE_TEST,
ePUF_PEAK_DECONVOLUTED,
ePUF_PEAK_FIT_NUCLIDE,
ePUF_PEAK_SMALL_POS,
eNF_ACTIVITY_AVG_CALC = 16,
eNF_PEAK_TOO_WIDE,
eNF_PEAK_MULT_AREA_NEG,
eNF_PEAK_TOO_NARROW,
eNF_PEAK_FWH25M_WIDE,
eNF_PEAK_FAILED_SENS_TEST,
eNF_PEAK_IDTY_FIRST_PEAK_FIALED,
eNF_LARGE_INCALC_ACTIVITY,
eNF_SMALL_INCALC_ACTIVITY,
eNF_PEAK_OUTSIDE_ANS_ENERGY_RANGE,
eNF_PEAK_CENTROID_IS_NOT_CLOSE_TO_LIB,
eNF_PEAK_BACKGROUND_COR,
};
#define IS_POS_CHECKED(flag,pos) ( (flag & (1 << pos)) == (1 << pos) )
#define SET_SHAPE_CHECK_FAILED(flag) (flag |= (1 << ePUF_PEAK_FAILED_SHAPE_TEST))
#define SET_SHAPE_CHECK_SUCCESS(flag) (flag &= ~(1 << ePUF_PEAK_FAILED_SHAPE_TEST))
#define SET_PEAK_DECONVOLUTED(flag) (flag |= (1 << ePUF_PEAK_DECONVOLUTED))
#define RESET_PEAK_DECONVOLUTED(flag) (flag &=~(1 << ePUF_PEAK_DECONVOLUTED))
#define SET_PEAK_FIT_NUCLIDE(flag) (flag |= (1 << ePUF_PEAK_FIT_NUCLIDE))
#define RESET_PEAK_FIT_NUCLIDE(flag) (flag &=~(1 << ePUF_PEAK_FIT_NUCLIDE))
#define IS_PEAK_FIT_NUCLIDE(flag) IS_POS_CHECKED( flag,ePUF_PEAK_FIT_NUCLIDE)
#define SET_PEAK_SMALL(flag) (flag |= (1 << ePUF_PEAK_SMALL_POS))
#define RESET_PEAK_SMALL(flag) (flag &=~(1 << ePUF_PEAK_SMALL_POS))
#define IS_PEAK_SMALL(flag) IS_POS_CHECKED( flag,ePUF_PEAK_SMALL_POS)
#define IS_NI_FLAG_CHECKED(flag,v) ( (flag &( 1 << v)) == (1 << v))
#define SET_NI_FLAG(flag,v) (flag |= (1 << v))
#define RESET_NI_FLAG(flag,v) (flag &= ~(1 << v))
#define IS_NI_KEY_LINE(flag) IS_NI_FLAG_CHECKED(flag,eNI_K)
#define IS_NI_NOT_IN_AVG(flag) IS_NI_FLAG_CHECKED(flag,eNI_A)
#define SET_ACTIVITY_AVG_CALC(flag) SET_NI_FLAG(flag,eNF_ACTIVITY_AVG_CALC)
#define IS_ACTIVITY_AVG_CALC_SET(flag) IS_NI_FLAG_CHECKED(flag,eNF_ACTIVITY_AVG_CALC)
#define SET_LARGE_INCALC_ACTIVITY(flag) SET_NI_FLAG(flag,eNF_LARGE_INCALC_ACTIVITY)
#define SET_SMALL_INCALC_ACTIVITY(flag) SET_NI_FLAG(flag,eNF_SMALL_INCALC_ACTIVITY)
#define SET_PEAK_FAILED_SENS_TEST(flag) SET_NI_FLAG(flag,eNF_PEAK_FAILED_SENS_TEST)
enum eLinearFitType
{
eLFTNone,
// <20><><EFBFBD>Բ<EFBFBD>ֵ
eInterpolative,
// һ<>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>δ֪<CEB4><D6AA>
eLine2,
// <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>,3<><33>δ֪<CEB4><D6AA>
eLine3,
// <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>
eEFTPloy,
// һ<>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>δ֪<CEB4><D6AA>,<2C><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
eLine2WithW,
// <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>,3<><33>δ֪<CEB4><D6AA>,<2C><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
eLine3WithW,
eLine4,// <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
typedef struct sLinearFitResult
{
eLinearFitType type;
double a;
double b;
double c;
double d;
double e;
double f;
double sa;
double sb;
double sc;
double sd;
double se;
double sf;
double chisq;
}sLinearFitResult;
class NuclideLibrary;
struct sDataInfo
{
int *pOrgData;
int Orglen;
double dRealTime;
double dLiveTime;
int iPeakBeginCh; // <20>ʼ<E5BFAA><CABC>ַ
NuclideLibrary *pNuclideLibaray;
};
typedef struct sSmoothConfig
{
int bUseGaussSmoothNum;
int bUseGaussSmoothTimes;
}sSmoothConfig;
typedef struct sPeakSearchConfig
{
double dSerachSensity;
int iChNumOnEachSide;
double dSfwhmRadioFwhmMaxValue;
double dSheightRadioHeightValue;
}sPeakSearchConfig;
typedef struct sResolvePeakConfig
{
double dnofwhmofpeak;
double dnofwhmofSideBaseLine;
}sResolvePeakConfig;
typedef struct sMatchPeaksConfig
{
double toler;
double dprob;
}sMatchPeaksConfig;
typedef struct sPeakInfoConfig
{
BOOL isroi;
int leftch;
int righch;
int n;
int cursorpeak;
}sPeakInfoConfig;
typedef struct sCursorOnePeakInfo
{
double dChannel; // <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ
double dEnergy; // <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
int iNIChannel;
double dNIEnergy;
int iLeftChannel;
int iRightChannel;
char cNName[32];
double fwhm;
double fwh5m;
double dGrossArea;
double dGrossAreaCountRate;
double dNetArea;
double dNetAreaCountRate;
double dNetAreaUncertain;
double dcA; // counting activity,
}sCursorOnePeakInfo;
typedef struct sPeakInfoResult
{
double* pSmoothData;
int iSmoothDataLen;
double* pSecDiffData;
int iSecDiffDataLen;
sCursorOnePeakInfo peakinfo;
}sPeakInfoResult;
typedef struct sConfigInfo
{
sSmoothConfig smoothconfig;
sPeakSearchConfig peaksearchconfig;
sResolvePeakConfig resolvepeakconfig;
sLinearFitResult energycal; // <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
sMatchPeaksConfig matchpeakconfig;
sPeakInfoConfig peakInfoConfig;
}sConfigInfo;
typedef struct OneValue
{
double v;
double sv;
}OneValue;
typedef struct sOneBaseLineInfo
{
eLinearFitType type;
int leftch;
int rightch;
OneValue a;
OneValue b;
OneValue c;
OneValue d;
double chisq;
double leftsmoothpoint;
double rightsmoothpoint;
double leftvalue;
double rightvalue;
double peakpos;
double grossarea;
double bdarea;
OneValue netarea;
double directfitnetarea;
}sOneBaseLineInfo;
typedef struct sOnePeakInfo
{
OneValue height;
OneValue centor;
OneValue width;
// <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>ַ
OneValue fwhm;
////y = a*exp(-b*(x-c)^2)); fwhmwidth = b
double fwhmwidth;
// <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>ַ
OneValue fittedfwhm;
// //y = a*exp(-b*(x-c)^2)); fittedwidth = b
OneValue fittedwidth;
OneValue area;
OneValue bdarea;
double leftch;
double rightch;
double energy;
int flag;
double leftsmoothpoint;
double rightsmoothpoint;
double leftvalue;
double rightvalue;
// <20><><EFBFBD><EFBFBD> У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
OneValue activity;
// MDA
OneValue mda;
sOneNuclideInfo oni;
sOneEnergyLine onl;
sOneBaseLineInfo obli;
}sOnePeakInfo;
typedef struct sMulPeakInfo
{
int MulPeakNum;
sOnePeakInfo peakinfo;
}sMulPeakInfo;
typedef struct sBaseLineInfo
{
sOneBaseLineInfo leftbaseline;
sOneBaseLineInfo rightbaseline;
sOneBaseLineInfo peakbaseline;
}sBaseLineInfo;
class _sOneNuclideActivity;
typedef struct sResultInfo
{
char measureDate[32];
double dRealTime;
double dLiveTime;
int sprtLen;
double* pSmoothData;
int iSmoothDataLen;
double* pSecDiffData;
int iSecDiffDataLen;
double* pCandidatePeaks;
int iCandidatePeakNum;
int iFinalPeakNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> inout <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ֽڵ<D6BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int iNotEnoughMemery;
sOnePeakInfo* pSearchPeakResult;
sLinearFitResult linFitResult;
int iBaseLineNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> inout <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ֽڵ<D6BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int iNotEnoughMemeryofBaseLine;
sBaseLineInfo *pBaselineInfo;
int iMulPeakNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> inout <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ֽڵ<D6BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int iNotEnoughMemeryofMulPeak;
sMulPeakInfo *pMulPeakInfo;
int iNucResultNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> inout <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ֽڵ<D6BD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
int iNotEnoughMemeryofNucResult;
_sOneNuclideActivity *pNucResultInfo;
}sResultInfo;
struct sFitData
{
eLinearFitType type;
int size;
double *px;
double *py;
double *pw;
};
typedef struct ASDataInfo
{
int* pHandle; // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
int bdidx;
int chidx;
double beginchannel;
double endchannel;
eDisplaSprtInfoType calcType;
double energy;
eCalcSprtSubInfoType sprtSubType;
unsigned char reserve[20];
}ASDataInfo;
enum eSearchPeakSensityLevel
{
eSPS_1,
eSPS_2,
eSPS_3,
eSPS_4,
eSPS_5
};
typedef struct OneDefaultConfig
{
BOOL enalbe;
BOOL useInternal;
char path[MAX_PATH];
}OneDefaultConfig;
enum eBackgroundType
{
eBTAuto,
eBTOne,
eBTThree,
eBTFive,
};
typedef struct AnalysisSampleConfig
{
// <20><><EFBFBD><EFBFBD>
char Description[128];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
double beginchannel;
double endchannel;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double RandomSum;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
eBackgroundType BGType;
// <20><><EFBFBD>ؿ<EFBFBD>
OneDefaultConfig NuclideLib;
// У<><D0A3><EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><>ʿ̶<CABF>
OneDefaultConfig Clb;
}AnalysisSampleConfig;
enum eMDAType
{
eMDATP_1
};
enum eASUnit
{
eASUBq,
eASUuCi,
};
typedef struct AnalysisSystemConfig
{
// ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char LaboratoryName[128];
// <20><><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>
char OperatorName[128];
// MDA<44><41><EFBFBD><EFBFBD>
eMDAType mdaType;
// Ѱ<><D1B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
eSearchPeakSensityLevel eSPSLevel;
// ƥ<><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double dlibMatchWidth;
// <20><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 100
double dlibFractionLimit;
// <20><><EFBFBD>ɺ<EFBFBD><C9BA>ؿ<EFBFBD>
OneDefaultConfig libSuspect;
// <20><>λ
eASUnit asuUit;
double asuMultiplier;
double asuDivisor;
char asuActivity[32];
double asuSize;
char asuSizeUnit[32];
double asuSizeUncertain;
}AnalysisSystemConfig;
typedef struct AnalysisDecayConfig
{
// ˥<><CBA5>У<EFBFBD><D0A3>
BOOL bDecayCorrection;
// ˥<><CBA5>У<EFBFBD><D0A3> yyyy-MM-dd HH:mm:ss
char bDCDateTime[32];
// <20><><EFBFBD>߲ɼ<DFB2>У<EFBFBD><D0A3>
BOOL bAcquisitionCorr;
// <20><>Ʒ<EFBFBD>ɼ<EFBFBD>ʱ<EFBFBD><CAB1>У<EFBFBD><D0A3>
BOOL bSampleCorrect;
// <20><>Ʒ<EFBFBD>ɼ<EFBFBD>ʱ<EFBFBD><CAB1>У<EFBFBD><D0A3> yyyy-MM-dd HH:mm:ss
char bSCStartDateTime[32];
// <20><>Ʒ<EFBFBD>ɼ<EFBFBD>ʱ<EFBFBD><CAB1>У<EFBFBD><D0A3>yyyy-MM-dd HH:mm:ss
char bSCStopDateTime[32];
}AnalysisDecayConfig;
enum eUncertainReportUnitType
{
eUPUTPercent,
eUPUTActivity
};
enum eUncertainReportValueType
{
eUPVTCouting,
eUPTVTotal
};
enum eUncertainLevel
{
eULOne,
eULTwo,
eULThree,
};
enum eOutputType
{
eOTPrinter,
eFile,
eProgram,
};
typedef struct AnalysisReportConfig
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
int dReportOption;
// <20><>ȷ<EFBFBD><C8B7><EFBFBD>ȱ<EFBFBD><C8B1>浥λ
eUncertainReportUnitType URUTType;
// <20><>ȷ<EFBFBD><C8B7><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
eUncertainReportUnitType URVTType;
// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ˮƽ
eUncertainLevel UncertainLevel;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
eOutputType OTType;
// <20><>ʾ<EFBFBD><CABE><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
BOOL bDisplayAnalysisResult;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
char FileProgramInfo[260];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ProgramInfo[260];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ReporterInfo[260];
}AnalysisReportConfig;
typedef struct AnalysisMethodConfig
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %
double dSystematic;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double dRandom;
}AnalysisMethodConfig;
typedef struct AnalysisCorrectionConfig
{
// <20><EFBFBD><E5B1BE>У<EFBFBD><D0A3>
OneDefaultConfig PBC;
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
OneDefaultConfig GeometryC;
// ˥<><CBA5>У<EFBFBD><D0A3>
OneDefaultConfig AttenuationC;
}AnalysisCorrectionConfig;
typedef struct AnalysisDataDealConfig
{
int bUseGaussSmoothNum;
int bUseGaussSmoothTimes;
// <20><><EFBFBD>β<EFBFBD><CEB2><EFBFBD>
double dSfwhmRadioFwhmMaxValue;
double dSheightRadioHeightValue;
// <20><><EFBFBD><EFBFBD>
double dnofwhmofpeak;
double dnofwhmofSideBaseLine;
unsigned char reserve[128];
}AnalysisDataDealConfig;
typedef struct AnalysisSpecturmConfig
{
AnalysisSampleConfig ascSample;
AnalysisSystemConfig ascSystem;
AnalysisDecayConfig ascDecay;
AnalysisReportConfig ascReport;
AnalysisMethodConfig ascMethod;
AnalysisCorrectionConfig ascCorrection;
AnalysisDataDealConfig ascDataDeal;
unsigned char reserve[128];
}AnalysisSpecturmConfig;
class _sOneNuclideActivity
{
public:
sOneNuclideInfo info;
OneValue activity;
OneValue totalActivityUncertain;
OneValue mda;
};
typedef struct AnalyzeSpecturmConfigInfo
{
int head;
int version;
char CreateTime[32];
char LastModifyTime[32];
char Desc[128];
unsigned char reserve[256];
}AnalyzeSpecturmConfigInfo;
#pragma pack(pop)
#ifdef __cplusplus
extern "C" {
#endif
ANALYZESPECTURM_API(int) NuclideIndentifaction(int*pInst, sDataInfo* pSpecturmData, sConfigInfo *pConfig, sResultInfo *pResultInfo, char *ErrorInfo);
ANALYZESPECTURM_API(int) NuclideIndentifactionV2(int*pInst, ASDataInfo* pASDI, sConfigInfo *pConfig, sResultInfo *pResultInfo, char *ErrorInfo);
ANALYZESPECTURM_API(int) NuclideIndentifactionV3(int*pInst, ASDataInfo* pASDI, sResultInfo *pResultInfo, char *ErrorInfo);
ANALYZESPECTURM_API(int) FitLinear(int*pInst, sFitData* pSpecturmData, sLinearFitResult *pResultInfo, char *ErrorInfo);
ANALYZESPECTURM_API(int*) GetInst(char *ErrorInfo);
ANALYZESPECTURM_API(int) FreeInst(int*pInst);
ANALYZESPECTURM_API(int) GetAnalyzeSpecturmConfig(AnalyzeSpecturmConfigInfo *pInfo, AnalysisSpecturmConfig *pconfig, char *ErrMsg);
ANALYZESPECTURM_API(int) SetAnalyzeSpecturmConfig(AnalyzeSpecturmConfigInfo *pInfo, AnalysisSpecturmConfig *pconfig, char *ErrMsg);
ANALYZESPECTURM_API(int) SaveAnalyzeSpecturmConfig(const char *path, char *ErrMsg);
ANALYZESPECTURM_API(int) ReadAnalyzeSpecturmConfig(const char *path, char *ErrMsg);
ANALYZESPECTURM_API(int) GetCusorNuclideInfo(int*pInst, ASDataInfo* pASDI, sResultInfo *pResultInfo, char *ErrorInfo);
#ifdef __cplusplus
}
#endif
#endif // _ANALYZESPECTURMEXPORT_H_