SmplMsrResultFileMgr.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. #pragma once
  2. #define _CRTDBG_MAP_ALLOC
  3. #include <stdlib.h>
  4. #include <crtdbg.h>
  5. #include "stdafx.h"
  6. #include "SmplMsrResultFileMgr.h"
  7. #include "PosXrayFileMgr.h"
  8. #include "BSEImgFileMgr.h"
  9. #include "IncAFileMgr.h"
  10. #include "OTSHelper.h"
  11. #include "OTSFileSys.h"
  12. namespace OTSMODEL
  13. {
  14. using namespace OTSDATA;
  15. // constructor
  16. CSmplMsrResultFileMgr::CSmplMsrResultFileMgr(CString workingFolder)
  17. {
  18. m_strWorkingFolder = workingFolder;
  19. m_listAnalysisXray.clear();
  20. }
  21. // destructor
  22. CSmplMsrResultFileMgr::~CSmplMsrResultFileMgr()
  23. {
  24. }
  25. // class methods
  26. // public
  27. // initialization
  28. // this method needs to be called before measurement
  29. BOOL CSmplMsrResultFileMgr::Init(COTSSamplePtr a_pSample)
  30. {
  31. // sample check
  32. ASSERT(a_pSample);
  33. if (!a_pSample)
  34. {
  35. // invalid sample pointer
  36. LogErrorTrace(__FILE__, __LINE__, _T("Init: failed to create the working directory."));
  37. return FALSE;
  38. }
  39. // sample name
  40. CString strSmplName = a_pSample->GetName();
  41. strSmplName.Trim();
  42. if (strSmplName.IsEmpty())
  43. {
  44. // the sample name string can't be an empty string
  45. LogErrorTrace(__FILE__, __LINE__, _T("Init: the sample name string is an empty string."));
  46. return FALSE;
  47. }
  48. // the working directory string can't be an empty string
  49. if (m_strWorkingFolder.IsEmpty())
  50. {
  51. // the working directory is empty
  52. LogTrace(__FILE__, __LINE__, _T("Init: the woring folder directory string is an empty string."));
  53. return FALSE;
  54. }
  55. // check if the working directory is there
  56. if (!COTSFileSys::Exists(m_strWorkingFolder))
  57. {
  58. // the working directory is not exit, create it
  59. if (!COTSFileSys::CreateFolder(m_strWorkingFolder))
  60. {
  61. // failed to create the working directory
  62. LogTrace(__FILE__, __LINE__, _T("Init: failed to create the working directory."));
  63. return FALSE;
  64. }
  65. }
  66. // sample measure file pathname
  67. CString strPathname = m_strWorkingFolder + strSmplName + SMPL_MSR_RESULT_FILE_EXT;
  68. // file not exists, creates it
  69. if (!CreateFileMgr(strPathname))
  70. {
  71. // failed to create the file
  72. LogErrorTrace(__FILE__, __LINE__, _T("Init: can't create file manager(%s). error: %s"), strPathname);
  73. return FALSE;
  74. }
  75. // get field files directory string
  76. CString strFieldFileSubFolder = GetFieldFileSubFolderStr();
  77. // check if the field files directory exists
  78. if (!COTSFileSys::Exists(strFieldFileSubFolder))
  79. {
  80. // field files directory exists not exists, creates it
  81. if (!COTSFileSys::CreateFolder(strFieldFileSubFolder))
  82. {
  83. // failed to create the field files directory
  84. LogErrorTrace(__FILE__, __LINE__, _T("Init: failed to create field files directory (%s). error: %s"), strFieldFileSubFolder);
  85. return FALSE;
  86. }
  87. }
  88. // ok, return TRUE
  89. SetSample(a_pSample);
  90. return TRUE;
  91. }
  92. // Load
  93. BOOL CSmplMsrResultFileMgr::Load(CString a_strPathname /*= _T("")*/)
  94. {
  95. /* int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
  96. tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
  97. _CrtSetDbgFlag(tmpFlag);*/
  98. //_CrtSetBreakAlloc(7415416);
  99. //AFX_MANAGE_STATE(AfxGetStaticModuleState());
  100. // check the pathname string
  101. a_strPathname.Trim();
  102. if (a_strPathname.IsEmpty())
  103. {
  104. // open
  105. CFileDialog dlg(TRUE, SMPL_MSR_RESULT_FILE_EXT, NULL, OFN_FILEMUSTEXIST, SMPL_MSR_RESULT_FILE_FILTER);
  106. if (dlg.DoModal() != IDOK)
  107. {
  108. // user canceled loading
  109. LogTrace(__FILE__, __LINE__, _T("Load: user canceled loading."));
  110. return FALSE;
  111. }
  112. a_strPathname = dlg.GetPathName();
  113. }
  114. // get path of the pathname
  115. CString strFilePath = COTSHelper::GetFolderName(a_strPathname);
  116. if (strFilePath.IsEmpty())
  117. {
  118. // file path string is an empty string
  119. LogErrorTrace(__FILE__, __LINE__, _T("Load: file path string is an empty string."));
  120. return FALSE;
  121. }
  122. // field file sub folder string
  123. CString strFieldFileSubFolder = strFilePath + _T("\\") + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");
  124. // check if the field file sub folder exists
  125. if (!COTSFileSys::Exists(strFieldFileSubFolder))
  126. {
  127. // field files folder doesn't exist
  128. LogErrorTrace(__FILE__, __LINE__, _T("Load: field files folder doesn't exist (%s)."), strFieldFileSubFolder);
  129. return FALSE;
  130. }
  131. SetWorkingFolderStr(strFieldFileSubFolder);
  132. // create sample measure result file
  133. CSmplMsrResultFilePtr pSmplMsrResultFile = CSmplMsrResultFilePtr(new CSmplMsrResultFile());
  134. tinyxml2::XMLDocument doc;
  135. doc.LoadFile(a_strPathname);//载入xml文件
  136. tinyxml2::XMLElement *rootNode;
  137. rootNode = doc.FirstChildElement(RootClassName);
  138. pSmplMsrResultFile->Serialize(false, &doc, rootNode);
  139. // file version
  140. CString strFileVersion = pSmplMsrResultFile->GetFileVersion();
  141. DWORD nFileVersion = COTSHelper::GetVersionFromString(strFileVersion);
  142. if (nFileVersion == 0)
  143. {// invalid file
  144. LogErrorTrace(__FILE__, __LINE__, _T("Load: invalid sample measure result file %s"), a_strPathname);
  145. return FALSE;
  146. }
  147. // sample measure result file
  148. m_pSmplMsrResultFile = pSmplMsrResultFile;
  149. SetPathName(a_strPathname);
  150. this->LoadFieldDataFromDB(m_strPathname);
  151. // ok, return TRUE
  152. return TRUE;
  153. }
  154. // Load
  155. BOOL CSmplMsrResultFileMgr::LoadFieldDataFromDB(CString a_strPathname /*= _T("")*/)
  156. {
  157. // check the pathname string
  158. a_strPathname.Trim();
  159. if (a_strPathname.IsEmpty())
  160. {
  161. // open
  162. CFileDialog dlg(TRUE, SMPL_MSR_RESULT_FILE_EXT, NULL, OFN_FILEMUSTEXIST, SMPL_MSR_RESULT_FILE_FILTER);
  163. if (dlg.DoModal() != IDOK)
  164. {
  165. // user canceled loading
  166. LogTrace(__FILE__, __LINE__, _T("Load: user canceled loading."));
  167. return FALSE;
  168. }
  169. a_strPathname = dlg.GetPathName();
  170. }
  171. // get path of the pathname
  172. CString strFilePath = COTSHelper::GetFolderName(a_strPathname);
  173. if (strFilePath.IsEmpty())
  174. {
  175. // file path string is an empty string
  176. LogErrorTrace(__FILE__, __LINE__, _T("Load: file path string is an empty string."));
  177. return FALSE;
  178. }
  179. // field file sub folder string
  180. CString strFieldFileSubFolder = strFilePath + _T("\\") + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");
  181. // check if the field file sub folder exists
  182. if (!COTSFileSys::Exists(strFieldFileSubFolder))
  183. {// field files folder doesn't exist
  184. LogErrorTrace(__FILE__, __LINE__, _T("Load: field files folder doesn't exist (%s)."), strFieldFileSubFolder);
  185. return FALSE;
  186. }
  187. CString strIncAFilename = strFieldFileSubFolder + _T("\\") + SMPL_MSR_RESULT_INCLUSION_FILE;
  188. CIncAFileMgrPtr pIncAFileMgr = CIncAFileMgrPtr(new CIncAFileMgr(strIncAFilename));
  189. COTSFieldDataList allFlds;
  190. CMsrSampleStatusPtr poMsrStatus= m_pSmplMsrResultFile->GetSample()->GetMsrStatus();
  191. CMsrResultsPtr poMsrResults= m_pSmplMsrResultFile->GetSample()->GetMsrResults();
  192. double aFldArea = m_pSmplMsrResultFile->GetSample()->CalculateAFieldArea();
  193. if (pIncAFileMgr->GetAllFieldsFromDB(allFlds, poMsrStatus, poMsrResults, aFldArea))
  194. {
  195. m_pSmplMsrResultFile->SetFieldData(allFlds);
  196. COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();
  197. for (auto pFieldData : listFieldData)
  198. {
  199. //pFieldData->SetFieldFileFolder(strFieldFileSubFolder);
  200. }
  201. return TRUE;
  202. }
  203. else
  204. {
  205. return FALSE;
  206. }
  207. }
  208. // Save
  209. BOOL CSmplMsrResultFileMgr::Save(CString a_strPathname /*= _T("")*/)
  210. {
  211. // safety check
  212. ASSERT(m_pSmplMsrResultFile);
  213. if (!m_pSmplMsrResultFile)
  214. {
  215. // invalid sample measure result file pointer
  216. LogErrorTrace(__FILE__, __LINE__, _T("Save: invalid sample measure result file pointer."));
  217. return FALSE;
  218. }
  219. // check the pathname string
  220. a_strPathname.Trim();
  221. if (a_strPathname.IsEmpty())
  222. {
  223. // file save as dialog
  224. CFileDialog dlg(FALSE, SMPL_MSR_RESULT_FILE_EXT, NULL, OFN_OVERWRITEPROMPT, SMPL_MSR_RESULT_FILE_FILTER);
  225. if (dlg.DoModal() != IDOK)
  226. {
  227. // user canceled loading
  228. LogTrace(__FILE__, __LINE__, _T("Save: user canceled save."));
  229. return FALSE;
  230. }
  231. // get file pathname
  232. a_strPathname = dlg.GetPathName();
  233. }
  234. // get path of the pathname
  235. CString strFilePath = COTSHelper::GetFolderName(a_strPathname);
  236. if (strFilePath.IsEmpty())
  237. {
  238. // file path string is an empty string
  239. LogErrorTrace(__FILE__, __LINE__, _T("Save: file path string is an empty string."));
  240. return FALSE;
  241. }
  242. // check if the path exists
  243. if (!COTSFileSys::Exists(strFilePath))
  244. {
  245. // file path doesn't exist create it
  246. if (!COTSFileSys::CreateFolder(strFilePath))
  247. {
  248. // failed to create file path
  249. LogErrorTrace(__FILE__, __LINE__, _T("Save: failed to create file path (%s)."), strFilePath);
  250. return FALSE;
  251. }
  252. }
  253. tinyxml2::XMLDocument doc;
  254. if (COTSFileSys::Exists(a_strPathname))
  255. {
  256. doc.LoadFile(a_strPathname);//载入xml文件
  257. }
  258. doc.Clear();
  259. tinyxml2::XMLDeclaration* declaration = doc.NewDeclaration();//添加xml文件头申明
  260. doc.InsertFirstChild(declaration);
  261. tinyxml2::XMLElement *rootNode;
  262. rootNode = doc.NewElement(RootClassName);
  263. doc.InsertEndChild(rootNode);
  264. m_pSmplMsrResultFile->Serialize(true, &doc, rootNode);
  265. int result = doc.SaveFile(a_strPathname);
  266. // ok, return TRUE
  267. return TRUE;
  268. }
  269. // field file sub folder string
  270. CString CSmplMsrResultFileMgr::GetFieldFileSubFolderStr()
  271. {
  272. // return empty string if working folder
  273. if (m_strWorkingFolder.IsEmpty())
  274. {
  275. return _T("");
  276. }
  277. // add "\\" at the string end if it is not "\\"
  278. if (m_strWorkingFolder.Right(1) != _T('\\'))
  279. {
  280. m_strWorkingFolder += _T("\\");
  281. }
  282. // field file sub folder string
  283. CString strFieldFileSubFolder = m_strWorkingFolder;
  284. CString strFIELDS_FILE_SUBFOLDER = _T("FIELD_FILES");
  285. if (strFieldFileSubFolder.Find(_T(strFIELDS_FILE_SUBFOLDER)) <= 0)
  286. {
  287. strFieldFileSubFolder = m_strWorkingFolder + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");
  288. }
  289. else
  290. {
  291. strFieldFileSubFolder = m_strWorkingFolder;
  292. }
  293. // return field file sub folder string
  294. return strFieldFileSubFolder;
  295. }
  296. // save a x-ray file for a field
  297. BOOL CSmplMsrResultFileMgr::SaveXRayFileForAField(COTSFieldMgrPtr a_pField)
  298. {
  299. // check input
  300. ASSERT(a_pField);
  301. if (!a_pField)
  302. {
  303. LogErrorTrace(__FILE__, __LINE__, _T("SaveXRayFileForAField: invalid field data pointer."));
  304. return FALSE;
  305. }
  306. // get field x-ray file pathname
  307. CString strXRayFilePathname = m_strWorkingFolder + _T("\\") + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");
  308. CString strXRaySearchFilename = strXRayFilePathname + SMPL_MSR_RESULT_SEARCH_X_RAY_FILE;
  309. CString strXRayAnalysisFilename = strXRayFilePathname + SMPL_MSR_RESULT_ANALYSIS_X_RAY_FILE;
  310. // save x-ray file for the field
  311. CPosXrayFileMgrPtr pPosXrayFileMgr = CPosXrayFileMgrPtr(new CPosXrayFileMgr(strXRayAnalysisFilename));
  312. CPosXrayList listSearchXray = a_pField->GetSearchPosXrayList();
  313. pPosXrayFileMgr->SetPosXrayList(listSearchXray,TRUE);
  314. pPosXrayFileMgr->SetHasElement(FALSE);
  315. if (!pPosXrayFileMgr->Save())
  316. {
  317. LogErrorTrace(__FILE__, __LINE__, _T("SaveXRayFileForAField: save search x-ray failed."));
  318. return FALSE;
  319. }
  320. CPosXrayList listAnalysisXray = a_pField->GetAnalysisPosXrayList();
  321. pPosXrayFileMgr->SetPosXrayList(listAnalysisXray, TRUE);
  322. pPosXrayFileMgr->SetHasElement(TRUE);
  323. if (!pPosXrayFileMgr->Save())
  324. {
  325. LogErrorTrace(__FILE__, __LINE__, _T("SaveXRayFileForAField: save analysis x-ray failed."));
  326. return FALSE;
  327. }
  328. // ok, return TRUE
  329. return TRUE;
  330. }
  331. // fields
  332. COTSFieldDataPtr CSmplMsrResultFileMgr::GetFieldById(int a_nID)
  333. {
  334. COTSFieldDataList listFieldData = m_pSmplMsrResultFile->GetFieldData();
  335. if (a_nID <0 || a_nID >(int)listFieldData.size())
  336. {
  337. return nullptr;
  338. }
  339. COTSFieldDataPtr pFieldData = listFieldData[a_nID];
  340. return pFieldData;
  341. }
  342. BOOL CSmplMsrResultFileMgr::AddAField(COTSFieldDataPtr a_pFieldData)
  343. {
  344. ASSERT(a_pFieldData);
  345. if (!a_pFieldData)
  346. {
  347. // empty field data pointer
  348. LogErrorTrace(__FILE__, __LINE__, _T("AddAField: empty field data pointer."));
  349. return FALSE;
  350. }
  351. COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();
  352. listFieldData.push_back(a_pFieldData);
  353. return TRUE;
  354. }
  355. BOOL CSmplMsrResultFileMgr::DeleteAFieldById(int a_nID)
  356. {
  357. COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();
  358. if (a_nID <0 || a_nID > (int)listFieldData.size())
  359. {
  360. return FALSE;
  361. }
  362. listFieldData.erase(listFieldData.begin()+a_nID);
  363. return TRUE;
  364. }
  365. void CSmplMsrResultFileMgr::SetSample(COTSSamplePtr a_pSample)
  366. {
  367. ASSERT(a_pSample);
  368. if (!a_pSample)
  369. {
  370. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample."));
  371. return;
  372. }
  373. ASSERT(m_pSmplMsrResultFile);
  374. if (!m_pSmplMsrResultFile)
  375. {
  376. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));
  377. return;
  378. }
  379. m_pSmplMsrResultFile->SetSample(a_pSample);
  380. }
  381. void CSmplMsrResultFileMgr::SetSEMGnr(CSEMDataGnrPtr a_pSEMGnr)
  382. {
  383. ASSERT(a_pSEMGnr);
  384. if (!a_pSEMGnr)
  385. {
  386. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid SEM general data pointer."));
  387. return;
  388. }
  389. ASSERT(m_pSmplMsrResultFile);
  390. if (!m_pSmplMsrResultFile)
  391. {
  392. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));
  393. return;
  394. }
  395. m_pSmplMsrResultFile->SetSEMStage(a_pSEMGnr);
  396. }
  397. // get id for a new field
  398. int CSmplMsrResultFileMgr::GetIdForANewField(int a_nLastFieldId)
  399. {
  400. // new field id
  401. int nNewFieldId = a_nLastFieldId;// +this->m_pSmplMsrResultFile->GetSample()->GetMsrStatus()->GetCompletedFields();
  402. // safety check
  403. ASSERT(m_pSmplMsrResultFile);
  404. if (!m_pSmplMsrResultFile)
  405. {
  406. // shouldn't be here, invalid sample measure result file
  407. LogErrorTrace(__FILE__, __LINE__, _T("GetIdForANewField: invalid sample measure result file."));
  408. return nNewFieldId;
  409. }
  410. // make the new field id is unit
  411. COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();
  412. BOOL bUnit = FALSE;
  413. do
  414. {
  415. auto itr = std::find_if(listFieldData.begin(), listFieldData.end(), [nNewFieldId](COTSFieldDataPtr p) { return p->GetId() == nNewFieldId; });
  416. bUnit = (itr == listFieldData.end());
  417. if (!bUnit)
  418. {
  419. ++nNewFieldId;
  420. }
  421. }
  422. while (!bUnit);
  423. // return new field id
  424. return nNewFieldId;
  425. }
  426. // set SEMStageData
  427. void CSmplMsrResultFileMgr::SetSEMStageData(CSEMStageDataPtr a_pSEMStageData)
  428. {
  429. ASSERT(a_pSEMStageData);
  430. if (!a_pSEMStageData)
  431. {
  432. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid SEM stage data pointer."));
  433. return;
  434. }
  435. ASSERT(m_pSmplMsrResultFile);
  436. if (!m_pSmplMsrResultFile)
  437. {
  438. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));
  439. return;
  440. }
  441. m_pSmplMsrResultFile->SetSEMStageData(a_pSEMStageData);
  442. }
  443. // set SEMStage
  444. void CSmplMsrResultFileMgr::SetSEMStage(CStagePtr a_pStage)
  445. {
  446. ASSERT(a_pStage);
  447. if (!a_pStage)
  448. {
  449. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid stage pointer."));
  450. return;
  451. }
  452. ASSERT(m_pSmplMsrResultFile);
  453. if (!m_pSmplMsrResultFile)
  454. {
  455. LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));
  456. return;
  457. }
  458. m_pSmplMsrResultFile->SetStage(a_pStage);
  459. }
  460. //COTSFieldMgrList CSmplMsrResultFileMgr::GetOTSFldMgrListAndAnalysisXrayList()
  461. //{
  462. //
  463. // if (m_listFieldMgr.size() > 0)//if the list is not empty ,prove that we've already load all the dada.so there's no need to load again.
  464. // {
  465. // return m_listFieldMgr;
  466. // }
  467. // m_listFieldMgr.clear();
  468. // ASSERT(m_pSmplMsrResultFile);
  469. // if (!m_pSmplMsrResultFile)
  470. // {
  471. // LogErrorTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: invalid sample measure result file pointer."));
  472. // return m_listFieldMgr;
  473. // }
  474. // //Get FieldDataList
  475. // COTSFieldDataList listFieldData = m_pSmplMsrResultFile->GetFieldData();
  476. // int nFieldNum = (int)listFieldData.size();
  477. // m_listAnalysisXray.clear();
  478. // // get field number
  479. // for (auto pFieldData : listFieldData)
  480. // {
  481. // COTSFieldMgrPtr pFieldMgr = COTSFieldMgrPtr(new COTSFieldMgr());
  482. // // get FieldData
  483. // pFieldMgr->SetOTSFieldData(pFieldData);
  484. //
  485. // COTSParticleList& listParticle = pFieldData->GetParticleList();
  486. // if (listParticle.empty())
  487. // {
  488. // LogInfoTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: there is no particle in this field."));
  489. // continue;
  490. // }
  491. // // get BSE
  492. // CString strFieldFileFolder = pFieldData->GetFieldFileFolder();
  493. // int nId = pFieldData->GetId();
  494. // CString sFieldId;
  495. // sFieldId.Format(_T("%d"), nId);
  496. // CString strBSEFilePathname = strFieldFileFolder + SMPL_MSR_RESULT_FIELDS_BSE + sFieldId + BMP_IMG_FILE_EXT;
  497. // CBSEImgFileMgrPtr pBSEImgFile = CBSEImgFileMgrPtr(new CBSEImgFileMgr());
  498. // if (!pBSEImgFile->LoadFromBitmap(strBSEFilePathname))
  499. // {
  500. // LogErrorTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: can't load BSE File."));
  501. // CMsrResultsPtr pMsrResults = CMsrResultsPtr(new CMsrResults());
  502. // pFieldMgr->SetMsrResult(pMsrResults);
  503. // m_listFieldMgr.push_back(pFieldMgr);
  504. // continue;
  505. // }
  506. // CBSEImgPtr pBSEImg = pBSEImgFile->GetBSEImg();
  507. // //pFieldMgr->SetBSEImage(CBSEImgPtr(new CBSEImg(*pBSEImg.get())));
  508. // pFieldMgr->SetBSEImage(pBSEImg);
  509. // // get analysis X-ray list
  510. // CString strXRayAnalysisFilename = strFieldFileFolder + _T("\\") + SMPL_MSR_RESULT_ANALYSIS_X_RAY_FILE;
  511. // CPosXrayFileMgrPtr pPosAnalysisXrayFileMgr = CPosXrayFileMgrPtr(new CPosXrayFileMgr(strXRayAnalysisFilename));
  512. // pPosAnalysisXrayFileMgr->SetHasElement(TRUE);
  513. // if (!pPosAnalysisXrayFileMgr->Load(pFieldData->GetId(),strXRayAnalysisFilename))
  514. // {
  515. // LogTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: load analysis x-ray of field %d failed."), pFieldData->GetId());
  516. // CMsrResultsPtr pMsrResults = CMsrResultsPtr(new CMsrResults());
  517. // pFieldMgr->SetMsrResult(pMsrResults);
  518. // m_listFieldMgr.push_back(pFieldMgr);
  519. // continue;
  520. // }
  521. // CPosXraysList listAnalysisXray = pPosAnalysisXrayFileMgr->GetPosXrayList();
  522. // pFieldMgr->SetAnalysisPosXayList(listAnalysisXray);
  523. // SetAnalysisXrayToList(listAnalysisXray);
  524. // //Mrs result need compute
  525. // CMsrResultsPtr pMsrResults = CMsrResultsPtr(new CMsrResults());
  526. // pFieldMgr->SetMsrResult(pMsrResults);
  527. // m_listFieldMgr.push_back(pFieldMgr);
  528. // }
  529. // return m_listFieldMgr;
  530. //}
  531. void CSmplMsrResultFileMgr::SetParticleList(COTSParticleList& a_listParticle)
  532. {
  533. m_listParticle.clear();
  534. for (auto pParticle : a_listParticle)
  535. {
  536. //COTSParticlePtr pParticleNew = COTSParticlePtr(new COTSParticle(*pParticle.get()));
  537. //COTSParticlePtr pParticleNew = pParticle;
  538. m_listParticle.push_back(pParticle);
  539. }
  540. }
  541. BOOL CSmplMsrResultFileMgr::ComputeParticleList()
  542. {
  543. ASSERT(m_pSmplMsrResultFile);
  544. if (!m_pSmplMsrResultFile)
  545. {
  546. LogErrorTrace(__FILE__, __LINE__, _T("GetParticleList: invalid sample measure result file pointer."));
  547. return FALSE;
  548. }
  549. m_listParticle.clear();
  550. //Get FieldDataList
  551. COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();
  552. for (auto pFieldData : listFieldData)
  553. {
  554. COTSParticleList listParticle = pFieldData->GetParticleList();
  555. for (auto pParticle : listParticle)
  556. {
  557. //COTSParticlePtr pParticleNew = COTSParticlePtr(new COTSParticle(*pParticle.get()));
  558. //COTSParticlePtr pParticleNew =pParticle;
  559. m_listParticle.push_back(pParticle);
  560. }
  561. }
  562. return TRUE;
  563. }
  564. BOOL CSmplMsrResultFileMgr::SetAnalysisXrayToList(CPosXrayList a_listAnalysisXray)
  565. {
  566. //m_listAnalysisXray.clear();
  567. for (auto pXray: a_listAnalysisXray)
  568. {
  569. //CPosXrayPtr pXrayNew = pXray;
  570. m_listAnalysisXray.push_back(pXray);
  571. }
  572. return TRUE;
  573. }
  574. // protected
  575. // create a new file
  576. BOOL CSmplMsrResultFileMgr::CreateFileMgr(CString a_strPathname)
  577. {
  578. // check the file pathname
  579. a_strPathname.Trim();
  580. if (a_strPathname.IsEmpty())
  581. {
  582. // file pathname is an empty string
  583. LogTrace(__FILE__, __LINE__, _T("Init: file pathname string is an empty string."));
  584. return FALSE;
  585. }
  586. // create sample measure result file
  587. m_pSmplMsrResultFile = CSmplMsrResultFilePtr(new CSmplMsrResultFile());
  588. SetPathName(a_strPathname);
  589. // ok, return TRUE
  590. return TRUE;
  591. }
  592. }