OTSClassifyEng.h 4.8 KB

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