OTSBrukerImpl.h 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #pragma once
  2. #include "OTSSingleton.h"
  3. #include "OTSBrukerImpl_const.h"
  4. #include "Bruker.API.Esprit.h"
  5. #include "otsdataconst.h"
  6. #include "Element.h"
  7. #include "BSEImg.h"
  8. #include "PosXray.h"
  9. #include "OTSFeature.h"
  10. using namespace OTSDATA;
  11. namespace OTSController {
  12. typedef enum class __declspec(dllexport) CONTROL_TYPE
  13. {
  14. BRUKER_SEM = 0, //电镜设备
  15. BRUKER_SCAN = 1, //图像扫描模块
  16. BRUKER_XRAY = 2 //X-RAY模块
  17. } CONTROL_TYPE;
  18. typedef enum class __declspec(dllexport) BRUKER_PARAM
  19. {
  20. BUF_LENGTH = 1024,
  21. MAX_SEGMENTS = 8192,
  22. MAX_PIXEL_MICROSECONDS = 32000,
  23. RT_SPECTRUM_BUFFER_SIZE = 64000, // SpectrumBufferSize
  24. RT_SPECTRUM_CHANNELS = 2000, // XANA_CHANNELS = 2000,
  25. RT_SPECTRUM_CHANNELS_LONG = 3000 // RT_SPECTRUM_CHANNELS_LONG = 3000,
  26. } BRUKER_PARAM;
  27. class COTSBrukerImpl : public Singleton<COTSBrukerImpl>
  28. {
  29. public:
  30. // constructor
  31. COTSBrukerImpl();
  32. // destructor
  33. ~COTSBrukerImpl();
  34. // initialization
  35. BOOL Init(CONTROL_TYPE a_nControlType, BOOL a_b32Bite = TRUE);
  36. BOOL Connect();
  37. /// set SPU (used for send command to multi-detector system) value
  38. BOOL SetSPU(void);
  39. // check connection
  40. //BOOL CheckConnection(BOOL& a_bConnected);
  41. BOOL DisConnect();
  42. void SetExpectCount(int expectCount);
  43. int GetExpectCount();
  44. // SEM functions
  45. // SEM Data (mag, KV and working distance)
  46. BOOL GetSEMData(double& a_dMagnification, double& a_dHighVoltage, double& a_dWorkingDistance);
  47. BOOL SetSEMData(double a_dMagnification, double a_dHighVoltage, double a_dWorkingDistance);
  48. // SEM BC Data (brightness and contrast)
  49. BOOL GetSEMBCData(double& a_dBrightness, double& a_dContrast);
  50. BOOL SetSEMBCData(double a_dBrightness, double a_dContrast);
  51. // Probe Current
  52. BOOL GetProbeCurrent(double&);
  53. BOOL SetProbeCurrent(double);
  54. // spot size
  55. BOOL GetSEMSpotSize(double& a_dSpotSize);
  56. BOOL SetSEMSpotSize(double a_dSpotSize);
  57. // stage data
  58. BOOL GetSEMStageData(double& a_nPositionX, double& a_nPositionY, double& a_nPositionZ, double& a_dTilt, double& a_dRotation);
  59. BOOL SetSEMStageData(double a_nPositionX, double a_nPositionY, double a_nPositionZ, double a_dTilt, double a_dRotation);
  60. // external on/off
  61. BOOL SetSEMExternalOn(void);
  62. BOOL SetSEMExternalOff(void);
  63. // get scan Mode
  64. BOOL GetExternalScanMode(long& a_nScanMode);
  65. // Switch SEM Off
  66. BOOL SwitchSEMOff(BOOL a_bHTValue, BOOL a_bBeamCurrent, BOOL a_bBeamBlank);
  67. // imaging functions
  68. // Get and set image config - dimensions, dwell time and enabled channels
  69. BOOL ImageGetConfiguration(DWORD& a_nWidth, DWORD& a_nHeight, DWORD& a_nAverage, BYTE& a_bCh1, BYTE& a_bCh2);
  70. BOOL ImageSetConfiguration(DWORD a_nWidth, DWORD a_nHeight, DWORD a_nAverage, BYTE a_bCh1, BYTE a_bCh2);
  71. // image collection, using the size and dwell time that was last set
  72. CBSEImgPtr AcquireImage();
  73. // set point
  74. BOOL ImageSetPoint(const CPoint& a_oPoint);
  75. // x-ray functions
  76. // live time
  77. float GetLiveTime(void);
  78. BOOL GetLiveRealTime(float& a_dLiveTime, float& a_dRealTime);
  79. // ---------collect spectrum data ,for testing
  80. BOOL CollectSpectrum(DWORD a_nMilliSeconds, long* a_pCounts, DWORD a_nBufferSize);
  81. BOOL CollectOneXRayPoint(const CPoint& a_oPoi, DWORD a_nLifeTimeMilliSeconds, long* a_pnCounts, DWORD a_nBufferSize, bool a_bSetHeadStruc = FALSE);
  82. //------------------
  83. BOOL StopSpectrumMeasure(void);
  84. // get quantification method name
  85. BOOL GetQuantificationMethods(std::vector<CString>& a_vMethods);
  86. BOOL QuantifyXrayPoint(CPosXray* a_pXRayPoint, CString a_strMethodName);
  87. BOOL QuantifySpectrumFile(LPCTSTR a_sFilePathName, CString a_strMethodName, CElementChemistriesList& a_vElementChemistry);
  88. // collect spectrum data by timeB and quantify
  89. BOOL QuantifySpectrumOut(DWORD a_nMilliSeconds, long* a_pCounts, DWORD a_nBufferSize, CElementChemistriesList& a_listElementChemistries);
  90. // quantify spectrum
  91. BOOL QuantifySpectrum(char* a_pcMethod, char* a_pcParams, char* a_pcResultBuffer, long a_nBufferSize);
  92. // if do x-ray quantification
  93. BOOL GetQuantificationFlag() { return m_bDoQuantification; }
  94. void SetQuantificationFlag(BOOL a_bDoQuantification) { m_bDoQuantification = a_bDoQuantification; }
  95. // m_bDoQuantification should be set first.
  96. BOOL GetXRayByPoints(CPosXrayList& a_listXrayPois, DWORD a_nACTimeMS);
  97. BOOL GetXRayByFeatures(CPosXrayList& a_vXPoints, std::vector<BrukerFeature> a_vFeatures, SHORT a_nACTimeMS);
  98. BOOL QuantifyPosXrayPointsOnLine(CPosXrayList& a_vXRayParts);//delay quantifying
  99. BOOL QuantifyPosXrayPointOnLine(CPosXrayPtr a_vXRayPart);//delay quantifying
  100. void SetQuantificationParam(BOOL ifAuto, CString knownElements);
  101. private:
  102. BOOL GetXRayByPointsOnHardwareLimit(CPosXrayList& a_listXrayPois, DWORD a_nACTimeMS);
  103. BOOL GetXRayByFeaturesOnHardwareLimit(CPosXrayList& a_vXPoints, std::vector<BrukerFeature> a_vFeatures, SHORT a_nACTimeMS);
  104. BOOL ReadSpectrum(long* a_pnCounts, DWORD a_nBufferSize);
  105. BOOL ReadXRayPoints(CPosXrayList& a_listXrayPois, const DWORD a_nACTimeMS);
  106. BOOL ReadXRayPointsByFeature(std::vector<CPosXray*>& a_vXPoints, const DWORD a_nACTimeMS);
  107. BOOL ReadXRayPointsByFeature(CPosXrayList& a_vXPoints, const DWORD a_nACTimeMS);
  108. // spectrum measurement
  109. BOOL StartSpectrumMeasurement();
  110. BOOL IsSpectrumMeasureRunning(BOOL& a_bRunning);
  111. BOOL SetXRayPointsByFeature(CPosXrayList& a_vXPoints, const DWORD a_nACTimeMS);
  112. // collect x-ray
  113. // close client
  114. BOOL CloseClient(void);//there's no need to call from out ,the single instance destruction method will call it automatically.
  115. RTSpectrumHeaderRec* GetSectrumHeader();
  116. BOOL GetSpectrum(long a_nBufferIndex, BrukerDll::PRTSpectrumHeaderRec a_poSpcHR, long a_nBufferSize);
  117. BOOL LoadSpectrum(char* a_sFilePathName);
  118. BOOL ReadSpectrum(void);
  119. BOOL PutSpectrum(char* m_pBuffer, long a_nBufferSize);
  120. BOOL CreateSpectrum(char* m_pParamBuffer, BrukerDll::PRTSpectrumHeaderRec a_poSpcHR, char* m_pResultBuffer, int32_t& a_nBufferSize);
  121. BOOL ShowSpectrum(long a_nBufferIndex, char* a_pSpectumName);
  122. BOOL GetSpectrometerParams(long a_nBufferIndex, char* a_pcBuffer, int32_t& a_nBufferSize);
  123. BOOL GetElementChemistryData(CElementChemistry& a_oElementChemistryData, CString a_strElementChemistry);
  124. BOOL CopySpectrum(long* a_pnCounts, DWORD a_nBufferSize);
  125. BOOL StartSpectrumLifeTimeMeasurement(DWORD a_nLifeTime);
  126. BOOL SpectrumLifeTimeMeasurement(DWORD a_nLifeTime);
  127. BOOL StartSpectrumRealTimeMeasurement(DWORD a_nRealTime);
  128. BOOL SpectrumRealTimeMeasurement(DWORD a_nRealTime);
  129. BOOL SpectrumCountsMeasurement(DWORD a_nCounts, int a_nTimeLimit = -1);
  130. BOOL ConvertSpectrum(RTSpectrumHeaderRec* a_poSpcHR, long* a_pnCounts, DWORD a_nBufferSize);
  131. BOOL GetPointListSpectrum(long a_nIndex, long* a_pnSpec);
  132. BOOL GetFeatureListSpectrum(long a_nIndex, long* a_pnSpec);
  133. BOOL CheckDetectorState(long a_nDetectorId, BOOL& a_bState, uint32_t& a_nMaxEnergy);
  134. // open client
  135. BOOL OpenClient(void);
  136. // query server
  137. BOOL QueryBrukerServers(void);
  138. CString GetQuantificationSpectrumPathName();
  139. //Get Load Dll Name
  140. BOOL GetLoadDllName(CString& csDllName);
  141. // spectrum header
  142. RTSpectrumHeaderRec* m_pSpectrumHead;
  143. std::shared_ptr<char> m_psServerName; // server name
  144. BOOL m_bInit; // initialize flag
  145. BOOL m_bSEMInst; // SEM instance
  146. BOOL m_bScannerInst; // scanner instance
  147. BOOL m_bXRAyControllerInst; // x ray instance
  148. std::shared_ptr<char> m_psRTSpectrumBuffer; // this is used to get spectrum from detector
  149. uint32_t m_nClientID;
  150. BOOL m_bSEMExternal;
  151. int m_nSPU;
  152. BOOL m_bConnected;
  153. DWORD nWidth = 0;
  154. DWORD nHeight = 0;
  155. BOOL m_bDoQuantification; // if do x-ray quantification
  156. BOOL m_bShowQuantificationSpectrum;
  157. int m_expectCount;
  158. BOOL m_ifAutoId=TRUE;
  159. CString m_knownElements;
  160. const int XrayQuantityLimitPerTime = 256;
  161. };
  162. }