OTSDefaultParam.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Xml;
  8. using OTSDataType;
  9. using static OTSDataType.otsdataconst;
  10. namespace OTSModelSharp
  11. {
  12. public class COTSDefaultParam : ISlo
  13. {
  14. protected static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
  15. // SEM stage data
  16. CSEMStageData m_pStageDataParam;
  17. // general parameter
  18. COTSGeneralParam m_GenParam;
  19. // image scan parameter
  20. COTSImgScanPrm m_pImageScanParam;
  21. // image process parameter
  22. COTSImageProcParam m_pImageProcParam;
  23. // X-Ray parameter
  24. COTSXRayParam m_pXRayParam;
  25. // file pathname
  26. protected string m_strPathName;
  27. const int SCREEN_WIDTH_MAG100 = 1142;
  28. const long STAGE_DATA_X_AXIS_START = -100000;
  29. const long STAGE_DATA_X_AXIS_END = 100000;
  30. //stage data y start
  31. const long STAGE_DATA_Y_AXIS_START = -100000;
  32. //stage data y end
  33. const long STAGE_DATA_Y_AXIS_END = 100000;
  34. //stage data x direction
  35. // const OTS_X_AXIS_DIRECTION STAGE_DATA_X_AXIS_DIRECTION = OTS_X_AXIS_DIRECTION.LEFT_TOWARD;
  36. const String STR_MEASURE_PREFERENCE_FILE_NAME = "OTSProgMgrParam.pmf";
  37. // sample name
  38. const String SAMPLE_NAME = "Sample";
  39. // measure switch
  40. const bool MEASURE_SWITCH = true;
  41. const int PROG_MGR_FILE_MARK = 'P' + 'R' + 'O' + 'J' + 'E' + 'K' + 'T' + 'M' + 'A' + 'N' + 'A' + 'G' + 'E' + 'R';
  42. // program manger file version
  43. const String PROG_MGR_FILE_VERSION = "1.1.1";
  44. // XRay scan mode
  45. const OTS_X_RAY_SCAN_MODE SCAN_MODE = OTS_X_RAY_SCAN_MODE.PointMode;
  46. MemberBase m_Param;
  47. const String STR_APPNAME_OTSINCA = "OTSIncA";
  48. const String STR_COFIGPATH = "Config";
  49. const String STR_PROG_DATA = "ProData";
  50. const String STR_SYSTEM_DATA = "SysData";
  51. public COTSDefaultParam()
  52. {
  53. Init();
  54. }
  55. // copy constructor
  56. public COTSDefaultParam(COTSDefaultParam a_poSource)
  57. {
  58. Duplicate(a_poSource);
  59. }
  60. public COTSImgScanPrm GetImageScanParam() { return m_pImageScanParam; }
  61. public COTSImageProcParam GetImageProcParam() { return m_pImageProcParam; }
  62. public COTSXRayParam GetXRayParam() { return m_pXRayParam; }
  63. public CSEMStageData GetStageDataParam() { return m_pStageDataParam; }
  64. // get path name // file pathname
  65. public string GetPathName()
  66. {
  67. return m_strPathName;
  68. }
  69. public COTSGeneralParam GetGenParam() { return m_GenParam; }
  70. // set path name
  71. public void SetPathName(string a_strPathName)
  72. {
  73. m_strPathName = a_strPathName;
  74. }
  75. // get SEM stage data
  76. //CSEMStageDataPtr GetStageData() { return m_pStageData; }
  77. // Set SEM stage data
  78. //void SetStageData(CSEMStageDataPtr a_pStageData);
  79. // Read project manager information from project manager file
  80. public bool LoadInfoFromProgMgrFile(otsdataconst.OTS_SOFT_PACKAGE_ID a_nPackId)
  81. {
  82. // get software pack measure preference file pathname
  83. string strProgMgrParamFilePathName = GetOTSPackMeasurePrefFilePathName((otsdataconst.OTS_SOFT_PACKAGE_ID)a_nPackId);
  84. if (string.IsNullOrEmpty(strProgMgrParamFilePathName))
  85. {
  86. logger.Info("LoadInfoFromProgMgrFile: failed to find program manager param file pathname."); //LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to find program manager param file pathname."));
  87. return false;
  88. }
  89. // program manager param file exists?
  90. if (Exists(strProgMgrParamFilePathName))
  91. {
  92. // tried to load it
  93. if (!Load(strProgMgrParamFilePathName))
  94. {
  95. // failed to load the license info file
  96. logger.Info("LoadLicenseInfoFile: failed to load license info file. pathname:"+strProgMgrParamFilePathName+"."); //LogErrorTrace(__FILE__, __LINE__, _T("LoadLicenseInfoFile: failed to load license info file. pathname: %s"), strProgMgrParamFilePathName);
  97. return false;
  98. }
  99. }
  100. else
  101. {
  102. // get app system file path
  103. string strCompanySysDataPath = GetOTSPackSysDataPathName((otsdataconst.OTS_SOFT_PACKAGE_ID)a_nPackId);
  104. if (string.IsNullOrEmpty(strCompanySysDataPath))
  105. {
  106. // shouldn't happen, program manager param file pathname is empty, return nullptr
  107. logger.Info("LoadInfoFromProgMgrFile: failed to company system data pathname."); //LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to company system data pathname."));
  108. return false;
  109. }
  110. // company system data path exists?
  111. if (!Exists(strCompanySysDataPath))
  112. {
  113. // company system data path doesn't exists, create it
  114. Directory.CreateDirectory(strCompanySysDataPath);
  115. }
  116. // SEM stage
  117. CSEMStageData pStageData = new CSEMStageData();
  118. pStageData.SetScanFieldSize100(SCREEN_WIDTH_MAG100);
  119. CIntRange pXAxis = new CIntRange(Convert.ToInt32(STAGE_DATA_X_AXIS_START), Convert.ToInt32(STAGE_DATA_X_AXIS_END));
  120. pStageData.SetXAxis(pXAxis);
  121. CIntRange pYAxis = new CIntRange(Convert.ToInt32(STAGE_DATA_Y_AXIS_START), Convert.ToInt32(STAGE_DATA_Y_AXIS_END));
  122. pStageData.SetYAxis(pYAxis);
  123. pStageData.SetMinMag(otsdataconst.MAGNIFICATION_MIN);
  124. // general parameter
  125. COTSGeneralParam pGenParam = new COTSGeneralParam();
  126. pGenParam.SetSampleName(SAMPLE_NAME);
  127. pGenParam.SetMeasurementSwitch(MEASURE_SWITCH);
  128. // get software pack program data path
  129. string strOTSProDataPathName = GetOTSPackProgDataPathName((otsdataconst.OTS_SOFT_PACKAGE_ID)a_nPackId);
  130. if (string.IsNullOrEmpty(strOTSProDataPathName))
  131. {
  132. // shouldn't happen, software pack program data path is empty
  133. logger.Info("LoadInfoFromProgMgrFile: failed to get software pack program data path."); //LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to get software pack program data path."));
  134. return false;
  135. }
  136. pGenParam.SetMsrParamFileFolderName(strOTSProDataPathName);
  137. pGenParam.SetPartSTDLibFolderName(strOTSProDataPathName);
  138. //image scan parameter
  139. COTSImgScanPrm pImageScanParam = new COTSImgScanPrm ();
  140. pImageScanParam.SetStopMode(DataPublic.STOPT_MODE);
  141. pImageScanParam.SetStopParamMeasTime(DataPublic.MEASURE_TIME);
  142. pImageScanParam.SetStopParamFields(DataPublic.FIELDS_NUM);
  143. pImageScanParam.SetStopParamParticles(DataPublic.PARTICL_NUM);
  144. pImageScanParam.SetStartImageMode(DataPublic.FETCH_IMAGE_MODE);
  145. pImageScanParam.SetScanImageSpeed(DataPublic.SCAN_SPEED);
  146. pImageScanParam.SetImagePixelSize(DataPublic.IMAGE_WIDTH);
  147. //image process parameter
  148. COTSImageProcParam pImageProcParam = new COTSImageProcParam ();
  149. // particle area
  150. CDoubleRange INCA_AREA = new CDoubleRange(5, 100);
  151. // background gray
  152. CIntRange BACK_GRAY = new CIntRange(100, 255);
  153. // particle gray
  154. CIntRange INCA_GRAY = new CIntRange(5, 100);
  155. pImageProcParam.SetIncAreaRange(INCA_AREA);
  156. pImageProcParam.SetBGGray(BACK_GRAY);
  157. pImageProcParam.SetParticleGray(INCA_GRAY);
  158. // X-Ray parameter
  159. COTSXRayParam pXRayParam = new COTSXRayParam();
  160. pXRayParam.SetScanMode(DataPublic.SCAN_MODE);
  161. pXRayParam.SetSearchSpeed(DataPublic.SEARCH_SPEED);
  162. pXRayParam.SetXRaySearchCount(DataPublic.SEARCH_COUNT);
  163. pXRayParam.SetAnalySpeed(DataPublic.ANALYSIS_SPEED);
  164. pXRayParam.SetAnalyExpCount(DataPublic.ANALYSIS_EXPECT_COUNT);
  165. CSampleParam msrParam = new CSampleParam();
  166. msrParam.SetImageProcessParam(pImageProcParam);
  167. msrParam.SetImageScanParam(pImageScanParam);
  168. msrParam.SetXRayParam(pXRayParam);
  169. pGenParam.SetMsrParam(msrParam);
  170. // create the program (preference) file
  171. if (!Save(strProgMgrParamFilePathName))
  172. {
  173. // failed to create
  174. logger.Info("LoadInfoFromProgMgrFile: create program manager file failed."); //LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: create program manager file failed."));
  175. return false;
  176. }
  177. }
  178. // ok, return the program (preference) file
  179. return true;
  180. }
  181. // get software pack program data path
  182. public String GetOTSPackProgDataPathName(OTS_SOFT_PACKAGE_ID a_nPackId)
  183. {
  184. // get common data pathname string
  185. String strCommonDataPathName = GetOSCommonDataPathName();
  186. if (strCommonDataPathName=="")
  187. {
  188. // can't common data path
  189. return "";
  190. }
  191. // software package program data pathname
  192. String strOTSProDataPathName = strCommonDataPathName + STR_COFIGPATH + "\\" + STR_PROG_DATA + "\\";
  193. // return software package program data path
  194. return strOTSProDataPathName;
  195. }
  196. // creates a folder.
  197. public bool CreateFolder(string a_strFolder)
  198. {
  199. // create the folder
  200. // bool bRet = CreateDirectory(strFolder, null) == true;
  201. Directory.CreateDirectory(a_strFolder);
  202. // return folder create result
  203. return true;
  204. }
  205. // check if the given string is valid file name or not
  206. // check if the given string is valid file name or not
  207. // get software pack preferece file path name
  208. // get software pack preference file path name
  209. public String GetOTSPackMeasurePrefFilePathName(OTS_SOFT_PACKAGE_ID a_nPackId)
  210. {
  211. // get software package system data pathname
  212. String strOTSPackSysDataPathName = GetOTSPackSysDataPathName(a_nPackId);
  213. // check if software package system data pathname is right
  214. if (strOTSPackSysDataPathName=="")
  215. {
  216. // failed to get software package system data pathname
  217. return "";
  218. }
  219. // software package project manager file pathname
  220. // i.e. "c:\ProgramData\OPTON\OTSIncA\SysData\OTSProgMgrParam.pmf"
  221. String strOTSPackProgMgrPathName = strOTSPackSysDataPathName + STR_MEASURE_PREFERENCE_FILE_NAME;
  222. // return software package license file pathname
  223. return strOTSPackProgMgrPathName;
  224. }
  225. // get software pack system data path
  226. public String GetOTSPackSysDataPathName(OTS_SOFT_PACKAGE_ID a_nPackId)//deprecated,since we have build one new solution for the particle system.
  227. {
  228. // get app package name
  229. String strAppPackageName="";
  230. switch (a_nPackId)
  231. {
  232. case OTS_SOFT_PACKAGE_ID.OTSIncA:
  233. strAppPackageName = STR_APPNAME_OTSINCA;
  234. break;
  235. case OTS_SOFT_PACKAGE_ID.OTSPartA:
  236. strAppPackageName = STR_APPNAME_OTSINCA;
  237. break;
  238. default:
  239. return "";
  240. }
  241. // get common data pathname string
  242. String strCommonDataPathName = GetOSCommonDataPathName();
  243. if (strCommonDataPathName=="")
  244. {
  245. // can't common data path
  246. return "";
  247. }
  248. // software package system data pathname
  249. // e.g. "c:\ProgramData\OPTON\OTSIncA\SysData\"
  250. //CString strOTSSysDataPathName = strCommonDataPathName + STR_COFIGPATH + _T("\\") + strAppPackageName + _T("\\") + STR_SYSTEM_DATA + _T("\\");
  251. String strOTSSysDataPathName = strCommonDataPathName + STR_COFIGPATH + "\\" + STR_SYSTEM_DATA + "\\";
  252. // return software package system data path
  253. return strOTSSysDataPathName;
  254. }
  255. // get system common data folder pathname
  256. // return "" if failed
  257. public String GetOSCommonDataPathName()
  258. {
  259. String strPathName = ".\\";
  260. return strPathName;
  261. }
  262. // Save project manager information to project manager file
  263. // safe parameters into program preference file
  264. public bool SaveInfoToProgMgrFile(otsdataconst.OTS_SOFT_PACKAGE_ID a_nPackId)
  265. {
  266. // get software package system data path
  267. string strSoftwareSysDataPath = GetOTSPackSysDataPathName((otsdataconst.OTS_SOFT_PACKAGE_ID)a_nPackId);
  268. if (string.IsNullOrEmpty(strSoftwareSysDataPath))
  269. {
  270. // shouldn't happen, software package system data path string is empty
  271. logger.Info("SaveInfoToProgMgrFile: failed to software package system data path string."); //LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to software package system data path string."));
  272. return false;
  273. }
  274. //// software package system data path exists?
  275. //if (!Exists(strSoftwareSysDataPath))
  276. //{
  277. // // software package system data path doesn't exists, create it
  278. // if (!CreateFolder(strSoftwareSysDataPath))
  279. // {
  280. // // failed to create software package system data path, return FALSE
  281. // logger.Info("SaveInfoToProgMgrFile: failed to create software package system data path."); //LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to create software package system data path."));
  282. // return false;
  283. // }
  284. //}
  285. // get software pack measure preference file pathname
  286. string strProgMgrParamFilePathName = GetOTSPackMeasurePrefFilePathName((otsdataconst.OTS_SOFT_PACKAGE_ID)a_nPackId);
  287. if (string.IsNullOrEmpty(strProgMgrParamFilePathName))
  288. {
  289. // shouldn't happen, software pack measure preference file pathname is empty, return nullptr
  290. logger.Info("SaveInfoToProgMgrFile: failed to find program manager param file pathname."); //LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to find program manager param file pathname."));
  291. return false;
  292. }
  293. // save parameters into program preference file
  294. if (!Save(strProgMgrParamFilePathName))
  295. {
  296. // failed to save program preference file, return FALSE
  297. logger.Info("SaveInfoToProgMgrFile: failed to save program preference file."); //LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to save program preference file."));
  298. return false;
  299. }
  300. // ok, return TRUE
  301. return true;
  302. }
  303. // creates a folder.
  304. // check if the file exists or not
  305. public bool Exists(string a_sPath)
  306. {
  307. //return ::PathFileExists(a_sPath) == TRUE;
  308. if (File.Exists(a_sPath))
  309. {
  310. //MessageBox.Show(filePath + " not exists!");
  311. //FileStream fs = File.Create(a_sPath);//创建文件
  312. //fs.Close();
  313. return true;
  314. }
  315. else
  316. {
  317. //System.Windows.Forms.MessageBox.Show(a_sPath + " exists!");
  318. //执行读写操作
  319. return false;
  320. }
  321. }
  322. // load program manager file
  323. // NOTE: be sure a_strPathName is a valid file pathname
  324. public bool Load(string a_strPathName)
  325. {
  326. // file pathname
  327. m_strPathName = a_strPathName;
  328. m_pStageDataParam = new CSEMStageData();
  329. m_GenParam = new COTSGeneralParam();
  330. // image scan parameter
  331. m_pImageScanParam = new COTSImgScanPrm();
  332. // image process parameter
  333. m_pImageProcParam = new COTSImageProcParam();
  334. // X-Ray parameter
  335. m_pXRayParam = new COTSXRayParam();
  336. XmlDocument doc = new XmlDocument();
  337. //载入xml文件
  338. doc.Load(a_strPathName);
  339. XmlNode root = doc.SelectSingleNode("XMLData");
  340. Serialize(false, doc, root);
  341. return true;
  342. }
  343. // save program manager file
  344. public bool Save(string a_strPathName)
  345. {
  346. //ASSERT(m_pStageData);
  347. //Debug.Assert(m_pParam);
  348. XmlDocument doc = new XmlDocument();
  349. doc.Load(a_strPathName);
  350. doc.RemoveAll();
  351. //添加xml文件头申明
  352. XmlDeclaration xmldecl = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
  353. doc.AppendChild(xmldecl);
  354. XmlElement rootNode = doc.CreateElement("XMLData");
  355. doc.AppendChild(rootNode);
  356. Serialize(true, doc, rootNode);
  357. try
  358. {
  359. doc.Save(a_strPathName);
  360. }
  361. catch
  362. {
  363. return false;
  364. }
  365. // file pathname
  366. m_strPathName = a_strPathName;
  367. // ok, return TRUE
  368. return true;
  369. }
  370. // serialization
  371. public override void Serialize(bool isStoring, XmlDocument classDoc, XmlNode rootNode)
  372. {
  373. xInt xProgMgrFileMark = new xInt();
  374. xString xProgMgrFileVersion = new xString();
  375. Slo slo = new Slo();
  376. slo.Register("ProgMgrFileMark", xProgMgrFileMark);
  377. slo.Register("ProgMgrFileVersion", xProgMgrFileVersion);
  378. slo.Register("StageData", m_pStageDataParam);
  379. slo.Register("GenParam", m_GenParam);
  380. slo.Register("ImageScanParam", m_pImageScanParam);
  381. slo.Register("ImageProcParam", m_pImageProcParam);
  382. slo.Register("XrayParam", m_pXRayParam);
  383. if (isStoring)
  384. {
  385. xProgMgrFileMark.AssignValue(PROG_MGR_FILE_MARK);
  386. xProgMgrFileVersion.AssignValue(PROG_MGR_FILE_VERSION);
  387. slo.Serialize(true, classDoc, rootNode);
  388. }
  389. else
  390. {
  391. slo.Serialize(false, classDoc, rootNode);
  392. }
  393. }
  394. public COTSGeneralParam GetDefaultParam()
  395. {
  396. return m_GenParam;
  397. }
  398. public void SetDefaultParam(COTSGeneralParam val)
  399. {
  400. m_GenParam = val;
  401. }
  402. // cleanup
  403. //protected void Cleanup()
  404. //{
  405. //}
  406. // initialization
  407. protected void Init()
  408. {
  409. m_strPathName = "";
  410. }
  411. // duplication
  412. protected void Duplicate(COTSDefaultParam a_oSource)
  413. {
  414. // initialization
  415. Init();
  416. // copy data over
  417. m_strPathName = a_oSource.m_strPathName;
  418. m_GenParam = new COTSGeneralParam(a_oSource.m_GenParam);
  419. }
  420. }
  421. }