123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- #pragma once
- #include "InclutionSTDData.h"
- #include "OTSParticle.h"
- using namespace OTSDATA;
- namespace OTSClassifyEngine
- {
- // min sum
- const double MIN_ELEMENT_SUM = 0.02;
- const long INC_DEFAULTSIZE = 100;
- const long INC_ELEMENTSIZE_MIN = 0;
- const CString STR_CONNECT = _T("-");
- const CString STR_FE = _T("Fe");
- const CString STR_C = _T("C");
- const CString STR_SI = _T("Si");
- const CString STR_O = _T("O");
- const CString STR_SUL = _T("S");
- const CString STR_N = _T("N");
- const double SIC_MOLAR_CUTOFF = 85.0;
- const double FEO_MOLAR_CUTOFF = 85.0;
- // key element
- const long INC_KEY_ELEMENT_MAX = 4;
- const double INC_KEY_ELEMENT_CUT_OFF = 0.02; // weight%
- const double INC_KEY_ELEMENT_TOTAL_100 = 5.0; // total molar value
- const CString INC_KEY_ELEMENT_NAMES[INC_KEY_ELEMENT_MAX] =
- {
- _T("S"),_T("N"),_T("O"),_T("C")
- };
- // sub element
- const long INC_SUB_ELEMENT_MAX = 13;
- const double INC_SUB_ELEMENT_CUT_OFF = 0.02; // weight%
- const double INC_SUB_ELEMENT_TOTAL_100 = 5.0; // molar value
- const CString INC_SUB_ELEMENT_NAMES[INC_SUB_ELEMENT_MAX] =
- {
- _T("Mg"),_T("Al"),_T("Si"),_T("Ca"),_T("Ti"),_T("V"),_T("Cr"),_T("Mn"),_T("Zr"),_T("Nb"),_T("Mo"),_T("Ce"),_T("La")
- };
- // element 100 % molar value mapping cut off
- const double ELEMENT_MAPPING_100MOLAR = 2.0;
- // sulfur classification
-
- const double MIN_SUL_MOLAR = ELEMENT_MAPPING_100MOLAR;
- const double MIN_SUL_SUB_MOLAR = ELEMENT_MAPPING_100MOLAR;
- const long INC_SUL_SUB_ELEMENT_MAX = 5;
- const CString INC_SUL_SUB_ELEMENT_NAMES[INC_SUL_SUB_ELEMENT_MAX] =
- {
- _T("Mn"),_T("Ca"),_T("Mg"),_T("Ce"),_T("La")
- };
- const CString INC_SULFILSES_NAMES[INC_SUL_SUB_ELEMENT_MAX] =
- {
- _T("MnS"),_T("CaS"),_T("MgS"),_T("Ce(La)2S3"),_T("Ce(La)2S3")
- };
- const double INC_SULFILSES_MAPPING_RATIO[INC_SUL_SUB_ELEMENT_MAX] =
- {
- 1.0, 1.0, 1.0, 1.5, 1.5
- };
- const double SULFIDE_MOLAR_CUTOFF = 5.0;
- const CString SULFIDE_STR = _T("Sulfide");
- // O classification
- const long INC_OXIDE_SUB_ELEMENT_MAX = 9;
- const CString INC_OXIDE_SUB_ELEMENT_NAMES[INC_OXIDE_SUB_ELEMENT_MAX] =
- {
- _T("Al"),_T("Mg"),_T("Si"),_T("Mn"),_T("Ca"),_T("Ce"),_T("Cr"),_T("Ti"),_T("La")
- };
- const CString INC_OXIDE_NAMES[INC_OXIDE_SUB_ELEMENT_MAX] =
- {
- _T("Al2O3"),_T("MgO"),_T("SiO2"),_T("MnO"),_T("CaO"),_T("CeO"),_T("Oxide"),_T("Oxide"),_T("REOxide")
- };
- const double SIMPLE_OXIDE_MOLAR_CUTOFF = 90.0;
- const long REOXIDE_KEY_ELEMENT_MAX = 2;
- const CString REOXIDE_KEY_ELEMENT_NAMES[REOXIDE_KEY_ELEMENT_MAX] =
- {
- _T("Ce"),_T("La")
- };
- const CString REOXIDE_STR = _T("REOxide");
- const long REALOXIDE_SUB_ELEMENT_MAX = 2;
- const CString REALOXIDE_SUB_ELEMENT_NAMES[REALOXIDE_SUB_ELEMENT_MAX] =
- {
- _T("Si"),_T("Al")
- };
- const double REALOXIDE_ELEMELTS_MOLAR_CUTOFF = 90.0;
- const CString REALOXIDE_STR = _T("REAlOxide");
- const long SPINEL_KEY_ELEMENT_MAX = 2;
- const double REALOXIDE_ELEMENT_MOLAR_LOW_CUTOFF = 20;
- const CString SPINEL_KEY_ELEMENT_NAMES[SPINEL_KEY_ELEMENT_MAX] =
- {
- _T("Mg"),_T("Al")
- };
- const double SPINEL_KEY_ELEMENT_MOLAR_TOTAL = 90.0;
- const double SPINEL_ELEMENT_RATIO_MIN = 1.6;
- const double SPINEL_ELEMENT_RATIO_MAX = 2.4;
- const CString SPINEL_STR = _T("Spinel");
- const CString SILICATE_KEY_ELEMENT_NAME = _T("Si");
- const double SILICATE_KEY_ELEMENT_MOLAR_TOTAL_MIN = 10.0;
- const double SILICATE_KEY_ELEMENT_MOLAR_TOTAL_MAX = 90.0;
- const CString SILICATE_STR = _T("Silicate");
- const long ALUMINATE_KEY_ELEMENT_MAX = 2;
- const CString ALUMINATE_KEY_ELEMENT_NAME[ALUMINATE_KEY_ELEMENT_MAX] =
- {
- _T("Al"),_T("Ca")
- };
- const double ALUMINAT_KEY_ELEMENT_MOLAR_TOTAL_MIN = 10.0;
- const double ALUMINAT_KEY_ELEMENT_MOLAR_TOTAL_MAX = 90.0;
- const CString ALUMINATE12CaO_7Al2O3_STR = _T("12CaO-7Al2O3");
- const CString ALUMINATE3CaO_Al2O3_STR = _T("3CaO-Al2O3");
- const CString ALUMINATE_STR = _T("Aluminate");
- const CString Ca_ALUMINATE_STR = _T("Ca-Aluminate");
- const CString STR_OXIDE = _T("O");
- const double MIN_OXIDE_MOLAR = 5.0;
- const double MIN_OXIDE_SUB_MOLAR_TOTAL = 5.0;
- const double MIN_OXIDE_SUB_MOLAR_CUTOFF = ELEMENT_MAPPING_100MOLAR;
- const CString OXIDE_STR = _T("Oxide");
- // nitrogen classification
- const long INC_NITR_SUB_ELEMENT_MAX = 8;
- const CString INC_NITR_SUB_ELEMENT_NAMES[INC_NITR_SUB_ELEMENT_MAX] =
- {
- _T("Ti"),_T("V"),_T("Nb"),_T("Al"),_T("Zr"),_T("Cr"),_T("La"),_T("Ce")
- };
- const CString INC_NITR_NAMES[INC_NITR_SUB_ELEMENT_MAX] =
- {
- _T("TiN"),_T("VN"),_T("NbN"),_T("AlN"),_T("Nitride"),_T("Nitride"),_T("Nitride"),_T("Nitride")
- };
- const double INC_NITR_MAPPING_RATIO[INC_NITR_SUB_ELEMENT_MAX] =
- {
- 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0
- };
- const CString STR_NITR = _T("N");
- const CString STR_Nb = _T("Nb");
- const double MIN_NITR_MOLAR = ELEMENT_MAPPING_100MOLAR;
- const double MIN_NITR_SUB_MOLAR = ELEMENT_MAPPING_100MOLAR;
- const double NITRIDE_MOLAR_CUTOFF = 5.0;
- const CString NITRIDE_STR = _T("Nitride");
- #pragma region ÐÂÌí¼ÓµÄ̼ÄÚÈÝ
- // carbon classification
- const long INC_CAR_SUB_ELEMENT_MAX = 1;
- const CString INC_CAR_SUB_ELEMENT_NAMES[INC_CAR_SUB_ELEMENT_MAX] =
- {
- _T("Nb")
- };
- const CString INC_CAR_NAMES[INC_CAR_SUB_ELEMENT_MAX] =
- {
- _T("NbC")
- };
- const double INC_CAR_MAPPING_RATIO[INC_CAR_SUB_ELEMENT_MAX] =
- {
- 1.0
- };
- const CString STR_CAR = _T("C");
- const double MIN_CAR_MOLAR = ELEMENT_MAPPING_100MOLAR;
- const double MIN_CAR_SUB_MOLAR = ELEMENT_MAPPING_100MOLAR;
- const double CARBON_MOLAR_CUTOFF = 5.0;
- const CString CARBON_STR = _T("Carbon");
- #pragma endregion
- typedef enum class __declspec(dllexport) INC_CLASSIFY_TYPE
- {
- INVALID = -1,
- MIN = 0,
- SIMPLE_OXIDE = 0,
- COMPLEX_OXIDE = 1,
- OXIDE = 2,
- SUL = 3,
- NITR = 4,
- USER = 5,
- CARBON = 6,
- MAX = 7
- } INC_CLASSIFY_TYPE;
- typedef enum class __declspec(dllexport) INC_COMMON_CLASSIFY_TYPE
- {
- INVALID = -1,
- MIN = 0,
- SULFIDE_OXIDE = 0,
- OXIDE = 1,
- SULFIDE = 2,
- NITRIDE = 3,
- SPINEL = 4,
- CARBON = 5,
- MAX = 5
- } INC_COMMON_CLASSIFY_TYPE;
- class __declspec(dllexport) COTSClassifyEng
- {
- public:
-
- COTSClassifyEng(); // constructor
- virtual ~COTSClassifyEng(); // detractor
- static BOOL ClassifyXray(CInclutionSTDDataPtr a_pPartSTDData, STEEL_TECHNOLOGY steelTech, CElementChemistriesList & a_listElementChemistries, int & a_nIncId, int& a_GrpId);
-
- // check if the x-ray is an inc x-ray
- static BOOL IsAnValidIncXRay( CElementChemistriesList& a_listElementChemistries,
- CElementChemistriesList& a_listElChemsInc,
- CElementChemistriesList& a_listElChemsIncNoFe,
- double& a_dMolarSum,
- double& a_dMolarSumNoFe,
- OTS_PARTICLE_TYPE& a_nIncId,NOT_INCLUTION_ID& notIncId);
- // system STD classification
- static BOOL SystemClassify( CInclutionSTDDataPtr a_pPartSTDData,
- STEEL_TECHNOLOGY steelTech,
- CElementChemistriesList& a_listElChemsIncNoFe,
- double a_dMolarSumNoFe,
- int& a_nIncId);
- static BOOL GroupClassify(CInclutionSTDDataPtr a_pPartSTDData,CElementChemistriesList& a_listElChemsIncNoFe,int incId, IDENTIFIED_INC_GRP_ID& a_GrpId);
- static BOOL GetGroupNameAndColorById(int grpId, std::string& grpName, std::string& grpColor);
- // sulfides classification
- static BOOL SulClassify( CInclutionSTDDataPtr a_pPartSTDData,
- STEEL_TECHNOLOGY steelTech,
- CElementChemistriesList& a_listElChemsIncNoFe,
- double a_dMolarSumNoFe,
- int& a_nIncId);
- // oxides classification
- static BOOL OxideClassify( CInclutionSTDDataPtr a_pPartSTDData,
- CElementChemistriesList& a_listElChemsIncNoFe,
- double a_dSumNoFe,
- int& a_nIncId);
- // nitrides classification
- static BOOL NitrideClassify( CInclutionSTDDataPtr a_pPartSTDData,
- CElementChemistriesList& a_listElChemsIncNoFe,
- double a_dMolarSumNoFe,
- int& a_nIncId);
- // carbon classification
- static BOOL CarbonClassify(CInclutionSTDDataPtr a_pPartSTDData,
- CElementChemistriesList& a_listElChemsIncNoFe,
- double a_dMolarSumNoFe,
- int& a_nIncId);
- // user STD items classification
- static BOOL UserClassify( CInclutionSTDDataPtr a_pPartSTDData,
- CElementChemistriesList& a_listEltChemsInc,
- double a_dSum,
- int& a_nIncId);
- // nominate element chemistries list
- static BOOL NomiNateElChemsList( CElementChemistriesList& a_listElChemsInc,
- CElementChemistriesList& a_listNomiElChemsInc);
-
- protected:
-
- // check if this is a key element
- static BOOL IsKeyElement(CElementChemistryPtr a_pElChem);
- // check if this is a sub element
- static BOOL IsSubElement(CElementChemistryPtr a_pElChem);
- // get named element chemistry
- static CElementChemistryPtr GetNamedElementChemistry(CElementChemistriesList& a_listChemistriesElements, const CString a_strElementName);
- // get classify STD items
- static BOOL GetClassifySTDItem(CInclutionSTDDataPtr a_pPartSTDDataPtr, INC_CLASSIFY_TYPE a_nClassifyType, CSTDItemsList& a_listSTDItems);
- // get STD item by name
- static CSTDItemPtr GetSTDItemByName(CSTDItemsList& a_listSTDItems, CString a_strName);
- // get STD item name by id
- static CString GetSTDItemNameById(CSTDItemsList& a_listSTDItems, int a_nItemId);
- // elements mapping
- static BOOL ElementsMapping(double a_dMolarSumNoFe, double a_dMappingRadio, CElementChemistryPtr a_pFirstElChem, CElementChemistryPtr a_pSecondElChem, BOOL& a_bMapped);
- // check if is a simple
- static BOOL IsASimpleOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& a_strSimOxName);
- // check if is a REOxide
- static BOOL IsAREOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
- // check if is a REAlOxide
- static BOOL IsAnREAlOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum);
- // check if is a Spinel
- static BOOL IsASpinel(CElementChemistriesList& a_listElChems, double a_dMolarSum);
- // check if is a Silicate
- static BOOL IsASilicate(CElementChemistriesList& a_listElChems, double a_dMolarSum);
- // check if is a Aluminate
- static BOOL IsAnCa_Aluminate(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& strName);
- // check if the element chemistries list matching the STD
- static BOOL MatchingSTD(CElementChemistriesList& a_listElChems, CSTDItemPtr a_pSTDItem, double a_dMolarSum);
- // calculate 100% value
- static double Cal100NorValue(double a_dValue, double a_dSumValue);
- };
- }
|