123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- #include "stdafx.h"
- #include "OTSData.h"
- #include "OTSSample.h"
- namespace OTSMODEL {
-
-
- // constructor
- COTSSample::COTSSample()
- {
- // initialization
- Init();
- }
- // copy constructor
- COTSSample::COTSSample(const COTSSample& a_oSource)
- {
-
- // can't copy itself
- if (&a_oSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(a_oSource);
- }
- // copy constructor
- COTSSample::COTSSample(COTSSample* a_poSource)
- {
- // input check
- ASSERT(a_poSource);
- if (!a_poSource)
- {
- return;
- }
- // can't copy itself
- if (a_poSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(*a_poSource);
- }
- // =operator
- COTSSample& COTSSample::operator=(const COTSSample& a_oSource)
- {
- // cleanup
- Cleanup();
- // copy the class data over
- Duplicate(a_oSource);
- // return class
- return *this;
- }
- // destructor
- COTSSample::~COTSSample()
- {
- // cleanup
- Cleanup();
- }
- // ==operator
- BOOL COTSSample::operator==(const COTSSample& a_oSource)
- {
- return m_strName.Compare(a_oSource.m_strName) == 0 &&
- m_strHoleName == a_oSource.m_strHoleName &&
- m_bParamLock == a_oSource.m_bParamLock &&
- m_bSwitch == a_oSource.m_bSwitch &&
-
- *(m_poMsrArea.get()) == *(a_oSource.m_poMsrArea.get()) &&
- *(m_poSEMDataMsr.get()) == *(a_oSource.m_poSEMDataMsr.get());
-
- }
-
- void COTSSample::Serialize(bool isStoring, tinyxml2::XMLDocument* classDoc, tinyxml2::XMLElement* rootNode)
- {
- xmls::xString xstrName;
- xmls::xString xstrHoleName;
- xmls::xBool xbParamlock;
- xmls::xBool xbSwitch;
- xmls::Slo slo;
- slo.Register("SampleName", &xstrName);
- slo.Register("HoleName", &xstrHoleName);
- slo.Register("ParamLock", &xbParamlock);
- slo.Register("Switch", &xbSwitch);
- slo.Register("MsrParams", m_poMsrParams.get());
- slo.Register("MsrArea", m_poMsrArea.get());
- slo.Register("SEMDataMsr", m_poSEMDataMsr.get());
- /*slo.Register("MsrStatus", m_poMsrStatus.get());
- slo.Register("MsrResults", m_poMsrResults.get());*/
- if (isStoring)
- {
- xstrName = m_strName;
- xstrHoleName = m_strHoleName;
- xbParamlock = m_bParamLock;
- xbSwitch = m_bSwitch;
- slo.Serialize(true, classDoc, rootNode);
- }
- else
- {
- slo.Serialize(false, classDoc, rootNode);
- m_strName = xstrName.value().c_str();
- m_strHoleName = xstrHoleName.value().c_str();
- m_bParamLock = xbParamlock.value();
- m_bSwitch = xbSwitch.value();
- }
- }
- COTSParticleList COTSSample::GetAllParticles()
- {
- COTSParticleList listParticle;
- COTSFieldDataList& listFieldData = this->GetFieldsData();
- for (auto pFieldData : listFieldData)
- {
- COTSParticleList listParticlenew = pFieldData->GetParticleList();
- for (auto pParticle : listParticlenew)
- {
- listParticle.push_back(pParticle);
- }
- }
- return listParticle;
- }
- // measurement parameter
- void COTSSample::SetMsrParams(CMsrParamsPtr a_poMsrParams)
- {
- // make sure that measure parameters is always valid
- if (!a_poMsrParams)
- {
- m_poMsrParams = CMsrParamsPtr(new CMsrParams());
- }
- else
- {
- m_poMsrParams = CMsrParamsPtr(new CMsrParams(a_poMsrParams.get()));
- }
- }
- // measurement area
- void COTSSample::SetMsrArea(CDomainPtr a_poMsrArea)
- {
- // make sure that measure area is always valid
- if (!a_poMsrArea)
- {
- m_poMsrArea = CDomainPtr(new CDomain());
- }
- else
- {
- m_poMsrArea = CDomainPtr(new CDomain(a_poMsrArea.get()));
- }
- }
- // SEM data (measurement)
- void COTSSample::SetSEMDataMsr(CSEMDataMsrPtr a_poSEMDataMsr)
- {
- // make sure that measure SEM data is always valid
- if (!a_poSEMDataMsr)
- {
- m_poSEMDataMsr = CSEMDataMsrPtr(new CSEMDataMsr());
- }
- else
- {
- m_poSEMDataMsr = CSEMDataMsrPtr(new CSEMDataMsr(a_poSEMDataMsr.get()));
- }
- }
- // measure status
- void COTSSample::SetMsrStatus(CMsrSampleStatusPtr a_poMsrStatus)
- {
- // make sure that measure status is always valid
- if (!a_poMsrStatus)
- {
- m_poMsrStatus = CMsrSampleStatusPtr(new CMsrSampleStatus());
- }
- else
- {
- m_poMsrStatus = CMsrSampleStatusPtr(new CMsrSampleStatus(a_poMsrStatus.get()));
- }
- }
- // measure results
- void COTSSample::SetMsrResults(CMsrResultsPtr a_poMsrResults)
- {
- // make sure that measure results is always valid
- if (!a_poMsrResults)
- {
- m_poMsrResults = CMsrResultsPtr(new CMsrResults());
- }
- else
- {
- m_poMsrResults = CMsrResultsPtr(new CMsrResults(a_poMsrResults.get()));
- }
- }
- // fields
- void COTSSample::SetFieldsData(COTSFieldDataList& a_listFieldData)
- {
- m_listFieldData.clear();
- for (auto pFieldData : a_listFieldData)
- {
-
- COTSFieldDataPtr pFieldDataNew = pFieldData;
- m_listFieldData.push_back(pFieldDataNew);
- }
- }
- // has measure results test
- BOOL COTSSample::HasMeasureResult()
- {
- // result items is not empty
- BOOL bHasResult = !(m_poMsrResults->GetResultItems().empty());
- return bHasResult;
- }
- // calculate pixel size
- double COTSSample::CalculateAFieldArea()
- {
- // pixel size
- double dAFieldArea = 0.0;
- int nImageSize =m_BseSize.cx;
- // pixel size (micros)
- double dPixelSize = 0;
- dPixelSize = m_pixelsize;
- // calculate pixel size
- dAFieldArea = (double)nImageSize * (double)m_BseSize.cy * dPixelSize * dPixelSize * 0.000001;// mm^2
-
- // return pixel size
- return dAFieldArea;
- }
- BOOL COTSSample::GetBSESize(int& a_nWidth, int& a_nHeight)
- {
- // get scan field size
- a_nWidth = m_BseSize.cx;
- a_nHeight = m_BseSize.cy;
- return TRUE;
- }
- // protected
- // cleanup
- void COTSSample::Cleanup()
- {
- // need to do nothing at the moment
- }
- // initialization
- void COTSSample::Init()
- {
- m_strName = _T("");
- m_strHoleName = _T("");
- m_bParamLock = FALSE;
- m_bSwitch = TRUE;
-
- m_poMsrArea = CDomainPtr(new CDomain());
- m_poSEMDataMsr = CSEMDataMsrPtr(new CSEMDataMsr());
- m_poMsrParams = CMsrParamsPtr(new CMsrParams());
- m_poMsrStatus = CMsrSampleStatusPtr(new CMsrSampleStatus());
- m_poMsrResults = CMsrResultsPtr(new CMsrResults());
- }
- // duplication
- void COTSSample::Duplicate(const COTSSample& a_oSource)
- {
- // initialization
- Init();
- // copy data over
- m_strName = a_oSource.m_strName;
- m_strHoleName = a_oSource.m_strHoleName;
- m_bParamLock = a_oSource.m_bParamLock;
- m_bSwitch = a_oSource.m_bSwitch;
-
- m_poMsrArea = CDomainPtr(new CDomain(a_oSource.m_poMsrArea.get()));
- m_poSEMDataMsr = CSEMDataMsrPtr(new CSEMDataMsr(a_oSource.m_poSEMDataMsr.get()));
-
- }
- // create a property items group
-
-
- // calculate scan field size
- int COTSSample::CalculateScanFieldSize()
- {
- // scan field size
- int nScanFiledSize = 0;
- int nImageSize = m_BseSize.cx;
- // calculate scan field size
- nScanFiledSize = (int)((m_pixelsize * (double)nImageSize) + 0.5);
-
- // return scan field size
- return nScanFiledSize;
- }
- }
|