#pragma once #include "InclutionSTDData.h" #include "OTSParticle.h" using namespace OTSDATA; namespace OTSClassifyEngine { 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; class __declspec(dllexport) COTSClassifyEng { public: COTSClassifyEng(CInclutionSTDDataPtr a_pPartSTDData); // constructor virtual ~COTSClassifyEng(); // detractor BOOL ClassifyXray(STEEL_TECHNOLOGY steelTech, CElementChemistriesList & a_listElementChemistries, int & a_nIncId, int& a_GrpId); // check if the x-ray is an inc x-ray BOOL FilterInvalidIncXRay( CElementChemistriesList a_listElementChemistries, CElementChemistriesList& a_listElChemsIncNoFe, double& a_dMolarSumNoFe, OTS_PARTICLE_TYPE& a_nIncId,NOT_INCLUTION_ID& notIncId); // system STD classification BOOL SystemClassify(STEEL_TECHNOLOGY steelTech, CElementChemistriesList& a_listElChemsIncNoFe, double a_dMolarSumNoFe, int& a_nIncId); BOOL GroupClassify(CElementChemistriesList& a_listElChemsIncNoFe,int incId, IDENTIFIED_INC_GRP_ID& a_GrpId); BOOL GroupClassify1(CElementChemistriesList& a_listElChemsIncNoFe, int incId, IDENTIFIED_INC_GRP_ID& a_GrpId); BOOL GetGroupNameAndColorById(int grpId, std::string& grpName, std::string& grpColor); // sulfides classification BOOL SulClassify( STEEL_TECHNOLOGY steelTech, CElementChemistriesList& a_listElChemsIncNoFe, double a_dMolarSumNoFe, int& a_nIncId); // oxides classification BOOL OxideClassify( CElementChemistriesList& a_listElChemsIncNoFe, double a_dSumNoFe, int& a_nIncId); // nitrides classification BOOL NitrideClassify( CElementChemistriesList& a_listElChemsIncNoFe, double a_dMolarSumNoFe, int& a_nIncId); // nominate element chemistries list BOOL NominateElChemsList(CElementChemistriesList& a_listElChemsInc, CElementChemistriesList& a_listNomiElChemsInc); protected: // check if this is a key element BOOL IsKeyElement(CElementChemistryPtr a_pElChem); // check if this is a sub element BOOL IsSubElement(CElementChemistryPtr a_pElChem); // get named element chemistry CElementChemistryPtr GetNamedElementChemistry(CElementChemistriesList& a_listChemistriesElements, const CString a_strElementName); // get STD item by name CSTDItemPtr GetSTDItemByName(CSTDItemsList& a_listSTDItems, CString a_strName); // get STD item name by id CString GetSTDItemNameById(CSTDItemsList& a_listSTDItems, int a_nItemId); // elements mapping BOOL ElementsMapping(double a_dMolarSumNoFe, double a_dMappingRadio, CElementChemistryPtr a_pFirstElChem, CElementChemistryPtr a_pSecondElChem, BOOL& a_bMapped); // check if is a simple BOOL IsASimpleOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& a_strSimOxName); // check if is a REOxide BOOL IsAREOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum); // check if is a REAlOxide BOOL IsAnREAlOxide(CElementChemistriesList& a_listElChems, double a_dMolarSum); // check if is a Spinel BOOL IsASpinel(CElementChemistriesList& a_listElChems, double a_dMolarSum); // check if is a Silicate BOOL IsASilicate(CElementChemistriesList& a_listElChems, double a_dMolarSum); // check if is a Aluminate BOOL IsAnCa_Aluminate(CElementChemistriesList& a_listElChems, double a_dMolarSum, CString& strName); // check if the element chemistries list matching the STD BOOL MatchingSTD(CElementChemistriesList& a_listElChems, CSTDItemPtr a_pSTDItem, double a_dMolarSum); // calculate 100% value double Cal100NorValue(double a_dValue, double a_dSumValue); private: CInclutionSTDDataPtr pPartSTDData; CSTDItemsList listSulfideSTD; CSTDItemsList listOxideSTD; CSTDItemsList listNitrideSTD; CSTDItemsList listCarbonSTD; // get classify STD items BOOL GetClassifySTDItem(CInclutionSTDDataPtr a_pPartSTDDataPtr, INC_CLASSIFY_TYPE a_nClassifyType, CSTDItemsList& a_listSTDItems); BOOL GetClassifyTypeOfSTDItem(int a_nIncId, INC_CLASSIFY_TYPE& a_nClassifyType); BOOL GetSulfildeOxideComplexItemId(CElementChemistriesList& a_listElChemsIncNoFe, double a_dMolarSumNoFe, CString strSulfideBaseName, int& nIncId); BOOL GetSulfildeNitrideComplexItemId(CElementChemistriesList& a_listElChemsIncNoFe, double a_dMolarSumNoFe, CString strSulfideBaseName, int& nIncId); void FilterOnSteelTech(STEEL_TECHNOLOGY steelTech, CElementChemistriesList& a_listElChemsInc); BOOL ElementMatching(double a_dMolarSumNoFe, CElementChemistriesList a_listElChemsInc, CElementChemistryPtr KeyEleChemistry, CString subEleName, double mappingRatio, double& dKeyEleResidualMolar100); BOOL ElementMatchingOnSteelTech(double a_dMolarSumNoFe, STEEL_TECHNOLOGY steelTech, CElementChemistriesList a_listElChemsIncNoFe, CElementChemistryPtr pSulElChem, CString& strProMappingSulName); }; }