SmplMeasure.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #pragma once
  2. #include "OTSSample.h"
  3. #include "MsrThread.h"
  4. #include "SmplMsrResultFileMgr.h"
  5. #include "Element.h"
  6. #include<memory>
  7. #include <queue>
  8. #include<thread>
  9. namespace OTSMODEL
  10. {
  11. using namespace OTSDATA;
  12. using namespace std;
  13. typedef enum class SAMPLE_MEASURE_STATUS
  14. {
  15. MIN = 0,
  16. READY = 0,
  17. GET_SEM_FAILED = 1,
  18. MAX = 1
  19. }SAMPLE_MEASURE_STATUS;
  20. typedef enum class XRAY_TYPE
  21. {
  22. MIN = 0,
  23. SEARCH = 0,
  24. ANALYSIS = 1,
  25. MAX = 1
  26. }XRAY_TYPE;
  27. class CSmplMeasure
  28. {
  29. public:
  30. CSmplMeasure();
  31. CSmplMeasure(CString a_strWorkingFolder, COTSSamplePtr a_pSample);
  32. ~CSmplMeasure();
  33. // sample
  34. COTSSamplePtr GetSample() { return m_pSample; };
  35. void SetSample(COTSSamplePtr a_pSample);
  36. // measure thread
  37. void SetMsrThread(CMsrThread* a_pMsrThread);
  38. CMsrThread* GetMsrThread() { return m_pMsrThread; };
  39. // working folder string
  40. void SetWorkingFolder(CString a_strWorkingFolder);
  41. CString GetWorkingFolder() { return m_strWorkingFolder; };
  42. // measure
  43. void DoMeasureOneSample();
  44. // hole preview
  45. void DoHolePreviewOneSample(int a_nHoleID);
  46. // field image process
  47. virtual void ImageProcess(COTSFieldDataPtr a_pFieldData, CBSEImgPtr a_pBSEImg) = 0;
  48. // Cumulate field data info
  49. virtual BOOL CumulateFieldData(CMsrResultsPtr a_pMsrResults, DWORD a_nMeasuredArea) = 0;
  50. // check sample measure is over
  51. BOOL IsSampleOver(COTSImageScanParamPtr a_pScanParam, int a_nTotalFields);
  52. // set project file changed flag
  53. BOOL SetPrjFileSave();
  54. // set working distance and magnification
  55. BOOL SetSEMDataMrs();
  56. // set SEM external on
  57. BOOL SetSEMExteralOn();
  58. // set SEM external off
  59. BOOL SetSEMExteralOff();
  60. // set BSE param
  61. BOOL SetBSEParam();
  62. // set BSE param
  63. BOOL ResetScan();
  64. // Sample hole BSE image list
  65. CHoleBSEImgsList& GetHoleBESImgList() { return m_listHoleBSEImg; }
  66. void SetHoleBESImgList(CHoleBSEImgsList& a_listHoleBSEImg, BOOL a_bClear = TRUE);
  67. CSTDItemsList GetSysSTDItem() { return m_listSysSTDItem; }
  68. bool SetSysSTDItem(CSTDItemsList& a_listSysSTDItem, BOOL a_bClear = TRUE);
  69. protected:
  70. // initialization
  71. void Init();
  72. // sample
  73. COTSSamplePtr m_pSample;
  74. // measure thread
  75. CMsrThread* m_pMsrThread;
  76. // working folder string
  77. CString m_strWorkingFolder;
  78. // sample measure result manager
  79. CSmplMsrResultFileMgrPtr m_pSmplMsrResultFileMgr;
  80. // BSE images list of holes
  81. CHoleBSEImgsList m_listHoleBSEImg;
  82. //system std lib
  83. CSTDItemsList m_listSysSTDItem;
  84. // check if measurement is aborted
  85. BOOL IsAborted();
  86. // get hardware control
  87. CSemBasePtr GetSEMControl();
  88. COTSScanBasePtr GetScanControl();
  89. COTSEDSBasePtr GetEDSControl();
  90. // record SEM working condition
  91. BOOL RecordSEMCondition(CSEMDataGnrPtr a_pSEMDataGnr);
  92. // calculate fields centers
  93. BOOL CalculateUnMeasuredFieldsCenters(std::vector<CPoint>& a_listFieldCenter);
  94. // move SEM to the point
  95. BOOL MoveSEMToPoint(CPoint a_poi);
  96. // Acquire a BSE image
  97. CBSEImgPtr AcquireABSEImage();
  98. // get x-ray acquire time
  99. BOOL GetXRayAcquireTime(XRAY_TYPE a_nXrayType, OTS_THREE_TIES_OPTIONS a_nXraySpeed, DWORD& a_nXRayAQTime);
  100. // get x-rays
  101. BOOL GetXRayByPoints(CPosXraysList& a_listPosXRay, DWORD a_nXRayAQTime, BOOL a_bElementInfo = FALSE);
  102. BOOL GetXRayByFeatures(COTSParticleList& a_listParticles, CPosXraysList& a_listPosXRay, DWORD a_nXRayAQTime, BOOL a_bElementInfo = FALSE);
  103. // get pixel size
  104. BOOL GetPixelSize(double& a_dPixelSize);
  105. BOOL SaveSampleFile();
  106. // save a field
  107. //BOOL SaveAField(COTSFieldDataPtr a_pDielsData);
  108. // check sample STD to make sure it will not be an empty one
  109. virtual BOOL CheckSmplSTD() = 0;
  110. queue<COTSFieldMgrPtr> fieldQueue;
  111. shared_ptr<thread> m_thread_ptr;
  112. BOOL bSaveThreadWorking;
  113. };
  114. typedef std::shared_ptr<CSmplMeasure> __declspec(dllexport) CSmplMeasurePtr;
  115. }