ParticleSTD.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #pragma once
  2. #include <string>
  3. #include <vector>
  4. #include "element.h"
  5. #include <map>
  6. using namespace std;
  7. using namespace OTSDATA;
  8. class MaxEDSRule :public xmls::ISlo
  9. {
  10. public:
  11. virtual void Serialize(bool isStoring, tinyxml2::XMLDocument *classDoc, tinyxml2::XMLElement *rootNode) override;
  12. CElementsList m_elementList;
  13. std::vector<std::string> m_ImgPropertyList;
  14. std::vector<std::string> m_OtherpropertyList;
  15. std::vector<std::string> m_usingConstants;
  16. std::string m_expressionStr;
  17. double m_MaxEDSTime;
  18. };
  19. typedef std::shared_ptr<MaxEDSRule> MaxEDSRulePtr;
  20. typedef std::vector<MaxEDSRulePtr> MaxEDSRuleList;
  21. class ZeroElementRule :public xmls::ISlo
  22. {
  23. public:
  24. virtual void Serialize(bool isStoring, tinyxml2::XMLDocument *classDoc, tinyxml2::XMLElement *rootNode) override;
  25. CElementsList GetUsingElementList() const { return m_UsingelementList; }
  26. void SetUsingElementList(CElementsList val) { m_UsingelementList = val; }
  27. std::vector<std::string> GetImgPropertyList() const { return m_ImgPropertyList; }
  28. void SetImgPropertyList(std::vector<std::string> val) { m_ImgPropertyList = val; }
  29. std::vector<std::string> GetOtherpropertyList() const { return m_OtherpropertyList; }
  30. void SetOtherpropertyList(std::vector<std::string> val) { m_OtherpropertyList = val; }
  31. std::vector<std::string> GetUsingConstants() const { return m_usingConstants; }
  32. void SetUsingConstants(std::vector<std::string> val) { m_usingConstants = val; }
  33. std::string GetExpressionStr() const { return m_expressionStr; }
  34. void SetExpressionStr(std::string val) { m_expressionStr = val; }
  35. std::string GetZeroElementName() const { return m_ZeroElementName; }
  36. void SetZeroElementName(std::string val) { m_ZeroElementName = val; }
  37. private:
  38. CElementsList m_UsingelementList;
  39. std::vector<std::string> m_ImgPropertyList;
  40. std::vector<std::string> m_OtherpropertyList;
  41. std::vector<std::string> m_usingConstants;
  42. std::string m_expressionStr;
  43. std::string m_ZeroElementName;
  44. };
  45. typedef std::shared_ptr<ZeroElementRule> ZeroElementRulePtr;
  46. typedef std::vector<ZeroElementRulePtr> ZeroElementRuleList;
  47. class PartSTDItem :public xmls::ISlo
  48. {
  49. public:
  50. std::map<std::string, CElementPtr>& GetMapElements();
  51. virtual void Serialize(bool isStoring, tinyxml2::XMLDocument *classDoc, tinyxml2::XMLElement *rootNode) override;
  52. std::string GetHardness() const { return m_Hardness; }
  53. void SetHardness(std::string val) { m_Hardness = val; }
  54. std::string GetDensity() const { return m_Density; }
  55. void SetDensity(std::string val) { m_Density = val; }
  56. std::string GetElectrical_conductivity() const { return m_Electrical_conductivity; }
  57. void SetElectrical_conductivity(std::string val) { m_Electrical_conductivity = val; }
  58. int GetID() const { return ID; }
  59. void SetID(int val) { ID = val; }
  60. std::string GetName() const { return m_name; }
  61. void SetName(std::string val) { m_name = val; }
  62. std::string GetColor() const { return m_color; }
  63. void SetColor(std::string val) { m_color = val; }
  64. std::vector<std::string> GetUsingImgPropertyNameList() { return m_ImgPropertyList; }
  65. void SetUsingImgPropertyNameList(std::vector<std::string> val) { m_ImgPropertyList= val; }
  66. std::vector<std::string> GetUsingOtherpropertyList() { return m_OtherpropertyList; }
  67. void SetUsingOtherpropertyList(std::vector<std::string> val) { m_OtherpropertyList = val; }
  68. std::vector<std::string> GetUsingConstants() const { return m_usingConstants; }
  69. std::string GetExpressionStr() const { return m_expressionStr; }
  70. void SetExpressionStr(std::string val) { m_expressionStr = val; }
  71. CElementsList GetKeyElementList() const { return m_KeyelementList; }
  72. void SetKeyElementList(CElementsList val) { m_KeyelementList=val; }
  73. CElementsList GetSubElementList() const { return m_SubelementList; }
  74. void SetSubElementList(CElementsList val) { m_SubelementList = val; }
  75. CElementsList GetAllSortedEleList()
  76. {
  77. std::multimap<int, CElementPtr> mapEles;// sorted all the using elements by the name's length,so that we can always handle the longer name element first.
  78. //because if we handle short name element first ,we may treat "Cu" as "C" or other have the same character in name element.
  79. for (auto ele : m_KeyelementList)
  80. {
  81. mapEles.insert(std::pair<int, CElementPtr>(ele->GetName().GetLength(), ele));
  82. }
  83. for (auto ele : m_SubelementList)
  84. {
  85. mapEles.insert(std::pair<int, CElementPtr>(ele->GetName().GetLength(), ele));
  86. }
  87. CElementsList eleList;
  88. for (auto itr = mapEles.rbegin(); itr != mapEles.rend(); itr++)
  89. {
  90. eleList.push_back(itr->second);
  91. }
  92. return eleList;
  93. }
  94. /*CElementsList m_SubelementList;*/
  95. std::string GetFormula() const { return m_Formula; }
  96. void SetFormula(std::string val) { m_Formula = val; }
  97. std::string GetElement() const { return m_Element; }
  98. void SetElement(std::string val) { m_Element = val; }
  99. double GetBSE() const { return m_BSE; }
  100. void SetBSE(double val) { m_BSE = val; }
  101. private:
  102. int ID;
  103. std::string m_name;
  104. std::string m_color;
  105. CElementsList m_KeyelementList;
  106. CElementsList m_SubelementList;
  107. std::vector<std::string> m_ImgPropertyList;
  108. std::vector<std::string> m_OtherpropertyList;
  109. std::vector<std::string> m_usingConstants;
  110. std::string m_expressionStr;
  111. std::map <std::string, CElementPtr> m_mapEleItems;
  112. std::string m_Hardness;
  113. std::string m_Density;
  114. std::string m_Electrical_conductivity;
  115. double m_BSE;
  116. std::string m_Formula;
  117. std::string m_Element;
  118. };
  119. typedef std::shared_ptr<PartSTDItem> PartSTDItemPtr;
  120. typedef std::vector<PartSTDItemPtr> PartSTDItemList;
  121. class ParticleSTD:public xmls::ISlo
  122. {
  123. public:
  124. ParticleSTD() {};
  125. ~ParticleSTD() {};
  126. //void AddItem();
  127. std::vector<PartSTDItemPtr> GetSTDItems();
  128. ZeroElementRuleList GetZeroRules();
  129. MaxEDSRuleList GetMaxEDSRules();
  130. bool LoadItemsFromFile();
  131. void PartSTDItemListClear();
  132. void ZeroElementRuleListClear();
  133. void MaxEDSRuleListClear();
  134. void ConstantsMapClear();
  135. void setSTDList(PartSTDItemList listSTDItem);
  136. void setZeroElementRuleList(ZeroElementRuleList listZeroElementRuleItem);
  137. void setMaxEDSRuleList(MaxEDSRuleList listMaxEDSRuleItem);
  138. void setConstantsMap(map<std::string, double> listConstantsItem);
  139. std::map<std::string, double>& GetMapConstants();
  140. virtual void Serialize(bool isStoring, tinyxml2::XMLDocument *classDoc, tinyxml2::XMLElement *rootNode) override;
  141. PartSTDItemPtr GetSTDItemById(int id);
  142. PartSTDItemList m_stdItems;
  143. ZeroElementRuleList m_zeroRules;
  144. std::map<std::string, double> m_mapConstants;
  145. MaxEDSRuleList m_MaxRules;
  146. };
  147. typedef std::shared_ptr<ParticleSTD> ParticleSTDPtr;
  148. typedef std::vector<ParticleSTDPtr> ParticleSTDList;