OTSClassifyEng.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #pragma once
  2. #include "InclutionSTDData.h"
  3. #include "OTSParticle.h"
  4. using namespace OTSDATA;
  5. namespace OTSClassifyEngine
  6. {
  7. typedef enum class __declspec(dllexport) INC_CLASSIFY_TYPE
  8. {
  9. INVALID = -1,
  10. MIN = 0,
  11. SIMPLE_OXIDE = 0,
  12. COMPLEX_OXIDE = 1,
  13. OXIDE = 2,
  14. SUL = 3,
  15. NITR = 4,
  16. USER = 5,
  17. CARBON = 6,
  18. MAX = 7
  19. } INC_CLASSIFY_TYPE;
  20. class __declspec(dllexport) COTSClassifyEng
  21. {
  22. public:
  23. COTSClassifyEng(CInclutionSTDDataPtr a_pPartSTDData); // constructor
  24. virtual ~COTSClassifyEng(); // detractor
  25. BOOL ClassifyXray(STEEL_TECHNOLOGY steelTech, CElementChemistriesList & a_listElementChemistries, int & a_nIncId, int& a_GrpId);
  26. // check if the x-ray is an inc x-ray
  27. BOOL FilterInvalidIncXRay( CElementChemistriesList a_listElementChemistries,
  28. CElementChemistriesList& a_listElChemsIncNoFe,
  29. double& a_dMolarSumNoFe,
  30. OTS_PARTICLE_TYPE& a_nIncId,NOT_INCLUTION_ID& notIncId);
  31. // system STD classification
  32. BOOL SystemClassify(STEEL_TECHNOLOGY steelTech,
  33. CElementChemistriesList& a_listElChemsIncNoFe,
  34. double a_dMolarSumNoFe,
  35. int& a_nIncId);
  36. BOOL GroupClassify(CElementChemistriesList& a_listElChemsIncNoFe,int incId, IDENTIFIED_INC_GRP_ID& a_GrpId);
  37. BOOL GetGroupNameAndColorById(int grpId, std::string& grpName, std::string& grpColor);
  38. // sulfides classification
  39. BOOL SulClassify(
  40. STEEL_TECHNOLOGY steelTech,
  41. CElementChemistriesList& a_listElChemsIncNoFe,
  42. double a_dMolarSumNoFe,
  43. int& a_nIncId);
  44. // oxides classification
  45. BOOL OxideClassify(
  46. CElementChemistriesList& a_listElChemsIncNoFe,
  47. double a_dSumNoFe,
  48. int& a_nIncId);
  49. // nitrides classification
  50. BOOL NitrideClassify(
  51. CElementChemistriesList& a_listElChemsIncNoFe,
  52. double a_dMolarSumNoFe,
  53. int& a_nIncId);
  54. // carbon classification
  55. BOOL CarbonClassify(
  56. CElementChemistriesList& a_listElChemsIncNoFe,
  57. double a_dMolarSumNoFe,
  58. int& a_nIncId);
  59. // nominate element chemistries list
  60. BOOL NomiNateElChemsList( CElementChemistriesList& a_listElChemsInc,
  61. CElementChemistriesList& a_listNomiElChemsInc);
  62. protected:
  63. // check if this is a key element
  64. BOOL IsKeyElement(CElementChemistryPtr a_pElChem);
  65. // check if this is a sub element
  66. BOOL IsSubElement(CElementChemistryPtr a_pElChem);
  67. // get named element chemistry
  68. CElementChemistryPtr GetNamedElementChemistry(CElementChemistriesList& a_listChemistriesElements, const CString a_strElementName);
  69. // get STD item by name
  70. CSTDItemPtr GetSTDItemByName(CSTDItemsList& a_listSTDItems, CString a_strName);
  71. // get STD item name by id
  72. CString GetSTDItemNameById(CSTDItemsList& a_listSTDItems, int a_nItemId);
  73. // elements mapping
  74. BOOL ElementsMapping(double a_dMolarSumNoFe, double a_dMappingRadio, CElementChemistryPtr a_pFirstElChem, CElementChemistryPtr a_pSecondElChem, BOOL& a_bMapped);
  75. // check if is a simple
  76. BOOL IsASimpleOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& a_strSimOxName);
  77. // check if is a REOxide
  78. BOOL IsAREOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  79. // check if is a REAlOxide
  80. BOOL IsAnREAlOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  81. // check if is a Spinel
  82. BOOL IsASpinel(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  83. // check if is a Silicate
  84. BOOL IsASilicate(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  85. // check if is a Aluminate
  86. BOOL IsAnCa_Aluminate(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& strName);
  87. // check if the element chemistries list matching the STD
  88. BOOL MatchingSTD(CElementChemistriesList& a_listElChems, CSTDItemPtr a_pSTDItem, double a_dMolarSum);
  89. // calculate 100% value
  90. double Cal100NorValue(double a_dValue, double a_dSumValue);
  91. private:
  92. CInclutionSTDDataPtr pPartSTDData;
  93. CSTDItemsList listSulfideSTD;
  94. CSTDItemsList listOxideSTD;
  95. CSTDItemsList listNitrideSTD;
  96. CSTDItemsList listCarbonSTD;
  97. //CSTDItemsList listUserSTD;
  98. // get classify STD items
  99. BOOL GetClassifySTDItem(CInclutionSTDDataPtr a_pPartSTDDataPtr, INC_CLASSIFY_TYPE a_nClassifyType, CSTDItemsList& a_listSTDItems);
  100. BOOL GetSulfildeOxideComplexItemId(CElementChemistriesList& a_listElChemsIncNoFe,
  101. double a_dMolarSumNoFe, CString strSulfideBaseName,
  102. int& nIncId);
  103. BOOL GetSulfildeNitrideComplexItemId(CElementChemistriesList& a_listElChemsIncNoFe,
  104. double a_dMolarSumNoFe, CString strSulfideBaseName,
  105. int& nIncId);
  106. void FilterOnSteelTech(STEEL_TECHNOLOGY steelTech,
  107. CElementChemistriesList& a_listElChemsInc);
  108. BOOL ElementMatching(double a_dMolarSumNoFe, CElementChemistriesList a_listElChemsInc, CElementChemistryPtr KeyEleChemistry, CString subEleName, double mappingRatio, double& dKeyEleResidualMolar100);
  109. BOOL ElementMatchingOnSteelTech(double a_dMolarSumNoFe, STEEL_TECHNOLOGY steelTech, CElementChemistriesList a_listElChemsIncNoFe, CElementChemistryPtr pSulElChem, CString& strProMappingSulName);
  110. };
  111. }