OTSClassifyEng.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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 GroupClassify1(CElementChemistriesList& a_listElChemsIncNoFe, int incId, IDENTIFIED_INC_GRP_ID& a_GrpId);
  38. BOOL GetGroupNameAndColorById(int grpId, std::string& grpName, std::string& grpColor);
  39. // sulfides classification
  40. BOOL SulClassify(
  41. STEEL_TECHNOLOGY steelTech,
  42. CElementChemistriesList& a_listElChemsIncNoFe,
  43. double a_dMolarSumNoFe,
  44. int& a_nIncId);
  45. // oxides classification
  46. BOOL OxideClassify(
  47. CElementChemistriesList& a_listElChemsIncNoFe,
  48. double a_dSumNoFe,
  49. int& a_nIncId);
  50. // nitrides classification
  51. BOOL NitrideClassify(
  52. CElementChemistriesList& a_listElChemsIncNoFe,
  53. double a_dMolarSumNoFe,
  54. int& a_nIncId);
  55. // nominate element chemistries list
  56. BOOL NominateElChemsList(CElementChemistriesList& a_listElChemsInc,
  57. CElementChemistriesList& a_listNomiElChemsInc);
  58. protected:
  59. // check if this is a key element
  60. BOOL IsKeyElement(CElementChemistryPtr a_pElChem);
  61. // check if this is a sub element
  62. BOOL IsSubElement(CElementChemistryPtr a_pElChem);
  63. // get named element chemistry
  64. CElementChemistryPtr GetNamedElementChemistry(CElementChemistriesList& a_listChemistriesElements, const CString a_strElementName);
  65. // get STD item by name
  66. CSTDItemPtr GetSTDItemByName(CSTDItemsList& a_listSTDItems, CString a_strName);
  67. // get STD item name by id
  68. CString GetSTDItemNameById(CSTDItemsList& a_listSTDItems, int a_nItemId);
  69. // elements mapping
  70. BOOL ElementsMapping(double a_dMolarSumNoFe, double a_dMappingRadio, CElementChemistryPtr a_pFirstElChem, CElementChemistryPtr a_pSecondElChem, BOOL& a_bMapped);
  71. // check if is a simple
  72. BOOL IsASimpleOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& a_strSimOxName);
  73. // check if is a REOxide
  74. BOOL IsAREOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  75. // check if is a REAlOxide
  76. BOOL IsAnREAlOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  77. // check if is a Spinel
  78. BOOL IsASpinel(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  79. // check if is a Silicate
  80. BOOL IsASilicate(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  81. // check if is a Aluminate
  82. BOOL IsAnCa_Aluminate(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& strName);
  83. // check if the element chemistries list matching the STD
  84. BOOL MatchingSTD(CElementChemistriesList& a_listElChems, CSTDItemPtr a_pSTDItem, double a_dMolarSum);
  85. // calculate 100% value
  86. double Cal100NorValue(double a_dValue, double a_dSumValue);
  87. private:
  88. CInclutionSTDDataPtr pPartSTDData;
  89. CSTDItemsList listSulfideSTD;
  90. CSTDItemsList listOxideSTD;
  91. CSTDItemsList listNitrideSTD;
  92. CSTDItemsList listCarbonSTD;
  93. // get classify STD items
  94. BOOL GetClassifySTDItem(CInclutionSTDDataPtr a_pPartSTDDataPtr, INC_CLASSIFY_TYPE a_nClassifyType, CSTDItemsList& a_listSTDItems);
  95. BOOL GetClassifyTypeOfSTDItem(int a_nIncId, INC_CLASSIFY_TYPE& a_nClassifyType);
  96. BOOL GetSulfildeOxideComplexItemId(CElementChemistriesList& a_listElChemsIncNoFe,
  97. double a_dMolarSumNoFe, CString strSulfideBaseName,
  98. int& nIncId);
  99. BOOL GetSulfildeNitrideComplexItemId(CElementChemistriesList& a_listElChemsIncNoFe,
  100. double a_dMolarSumNoFe, CString strSulfideBaseName,
  101. int& nIncId);
  102. void FilterOnSteelTech(STEEL_TECHNOLOGY steelTech,
  103. CElementChemistriesList& a_listElChemsInc);
  104. BOOL ElementMatching(double a_dMolarSumNoFe, CElementChemistriesList a_listElChemsInc, CElementChemistryPtr KeyEleChemistry, CString subEleName, double mappingRatio, double& dKeyEleResidualMolar100);
  105. BOOL ElementMatchingOnSteelTech(double a_dMolarSumNoFe, STEEL_TECHNOLOGY steelTech, CElementChemistriesList a_listElChemsIncNoFe, CElementChemistryPtr pSulElChem, CString& strProMappingSulName);
  106. };
  107. }