| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #pragma once
- #include "OTSSample.h"
- #include "MsrThread.h"
- #include "SmplMsrResultFileMgr.h"
- #include "Element.h"
- #include<memory>
- #include <queue>
- #include<thread>
- namespace OTSMODEL
- {
- using namespace OTSDATA;
- using namespace std;
- typedef enum class SAMPLE_MEASURE_STATUS
- {
- MIN = 0,
- READY = 0,
- GET_SEM_FAILED = 1,
- MAX = 1
- }SAMPLE_MEASURE_STATUS;
- typedef enum class XRAY_TYPE
- {
- MIN = 0,
- SEARCH = 0,
- ANALYSIS = 1,
- MAX = 1
- }XRAY_TYPE;
- class CSmplMeasure
- {
- public:
- CSmplMeasure();
- CSmplMeasure(CString a_strWorkingFolder, COTSSamplePtr a_pSample);
- ~CSmplMeasure();
- // sample
- COTSSamplePtr GetSample() { return m_pSample; };
- void SetSample(COTSSamplePtr a_pSample);
- // measure thread
- void SetMsrThread(CMsrThread* a_pMsrThread);
- CMsrThread* GetMsrThread() { return m_pMsrThread; };
- // working folder string
- void SetWorkingFolder(CString a_strWorkingFolder);
- CString GetWorkingFolder() { return m_strWorkingFolder; };
-
- // measure
- void DoMeasureOneSample();
- // hole preview
- void DoHolePreviewOneSample(int a_nHoleID);
- // field image process
- virtual void ImageProcess(COTSFieldDataPtr a_pFieldData, CBSEImgPtr a_pBSEImg) = 0;
- // Cumulate field data info
- virtual BOOL CumulateFieldData(CMsrResultsPtr a_pMsrResults, DWORD a_nMeasuredArea) = 0;
- // check sample measure is over
- BOOL IsSampleOver(COTSImageScanParamPtr a_pScanParam, int a_nTotalFields);
- // set project file changed flag
- BOOL SetPrjFileSave();
- // set working distance and magnification
- BOOL SetSEMDataMrs();
- // set SEM external on
- BOOL SetSEMExteralOn();
- // set SEM external off
- BOOL SetSEMExteralOff();
- // set BSE param
- BOOL SetBSEParam();
- // set BSE param
- BOOL ResetScan();
- // Sample hole BSE image list
- CHoleBSEImgsList& GetHoleBESImgList() { return m_listHoleBSEImg; }
- void SetHoleBESImgList(CHoleBSEImgsList& a_listHoleBSEImg, BOOL a_bClear = TRUE);
- CSTDItemsList GetSysSTDItem() { return m_listSysSTDItem; }
- bool SetSysSTDItem(CSTDItemsList& a_listSysSTDItem, BOOL a_bClear = TRUE);
- protected:
- // initialization
- void Init();
- // sample
- COTSSamplePtr m_pSample;
- // measure thread
- CMsrThread* m_pMsrThread;
- // working folder string
- CString m_strWorkingFolder;
- // sample measure result manager
- CSmplMsrResultFileMgrPtr m_pSmplMsrResultFileMgr;
- // BSE images list of holes
- CHoleBSEImgsList m_listHoleBSEImg;
- //system std lib
- CSTDItemsList m_listSysSTDItem;
- // check if measurement is aborted
- BOOL IsAborted();
- // get hardware control
- CSemBasePtr GetSEMControl();
- COTSScanBasePtr GetScanControl();
- COTSEDSBasePtr GetEDSControl();
- // record SEM working condition
- BOOL RecordSEMCondition(CSEMDataGnrPtr a_pSEMDataGnr);
- // calculate fields centers
- BOOL CalculateUnMeasuredFieldsCenters(std::vector<CPoint>& a_listFieldCenter);
- // move SEM to the point
- BOOL MoveSEMToPoint(CPoint a_poi);
- // Acquire a BSE image
- CBSEImgPtr AcquireABSEImage();
- // get x-ray acquire time
- BOOL GetXRayAcquireTime(XRAY_TYPE a_nXrayType, OTS_THREE_TIES_OPTIONS a_nXraySpeed, DWORD& a_nXRayAQTime);
- // get x-rays
- BOOL GetXRayByPoints(CPosXraysList& a_listPosXRay, DWORD a_nXRayAQTime, BOOL a_bElementInfo = FALSE);
- BOOL GetXRayByFeatures(COTSParticleList& a_listParticles, CPosXraysList& a_listPosXRay, DWORD a_nXRayAQTime, BOOL a_bElementInfo = FALSE);
- // get pixel size
- BOOL GetPixelSize(double& a_dPixelSize);
- BOOL SaveSampleFile();
- // save a field
- //BOOL SaveAField(COTSFieldDataPtr a_pDielsData);
- // check sample STD to make sure it will not be an empty one
- virtual BOOL CheckSmplSTD() = 0;
- queue<COTSFieldMgrPtr> fieldQueue;
- shared_ptr<thread> m_thread_ptr;
- BOOL bSaveThreadWorking;
- };
- typedef std::shared_ptr<CSmplMeasure> __declspec(dllexport) CSmplMeasurePtr;
- }
|