| 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("Ce2S3"),_T("La2S3")	};	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("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(CElementChemistriesList& a_listElChemsIncNoFe, 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);	};}   
 |