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. protected:
  56. // check if this is a key element
  57. BOOL IsKeyElement(CElementChemistryPtr a_pElChem);
  58. // check if this is a sub element
  59. BOOL IsSubElement(CElementChemistryPtr a_pElChem);
  60. // get named element chemistry
  61. CElementChemistryPtr GetNamedElementChemistry(CElementChemistriesList& a_listChemistriesElements, const CString a_strElementName);
  62. // get STD item by name
  63. CSTDItemPtr GetSTDItemByName(CSTDItemsList& a_listSTDItems, CString a_strName);
  64. // get STD item name by id
  65. CString GetSTDItemNameById(CSTDItemsList& a_listSTDItems, int a_nItemId);
  66. // elements mapping
  67. BOOL ElementsMapping(double a_dMolarSumNoFe, double a_dMappingRadio, CElementChemistryPtr a_pFirstElChem, CElementChemistryPtr a_pSecondElChem, BOOL& a_bMapped);
  68. // check if is a simple
  69. BOOL IsASimpleOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& a_strSimOxName);
  70. // check if is a REOxide
  71. BOOL IsAREOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  72. // check if is a REAlOxide
  73. BOOL IsAnREAlOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  74. // check if is a Spinel
  75. BOOL IsASpinel(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  76. // check if is a Silicate
  77. BOOL IsASilicate(CElementChemistriesList& a_listElChems, double a_dMolarSum);
  78. // check if is a Aluminate
  79. BOOL IsAnCa_Aluminate(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& strName);
  80. // check if the element chemistries list matching the STD
  81. BOOL MatchingSTD(CElementChemistriesList& a_listElChems, CSTDItemPtr a_pSTDItem, double a_dMolarSum);
  82. // calculate 100% value
  83. double Cal100NorValue(double a_dValue, double a_dSumValue);
  84. private:
  85. CInclutionSTDDataPtr pPartSTDData;
  86. CSTDItemsList listSulfideSTD;
  87. CSTDItemsList listOxideSTD;
  88. CSTDItemsList listNitrideSTD;
  89. CSTDItemsList listCarbonSTD;
  90. // nominate element chemistries list
  91. BOOL NomiNateElChemsList(CElementChemistriesList& a_listElChemsInc,
  92. CElementChemistriesList& a_listNomiElChemsInc);
  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. }