SpectrumCompareEngine.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "stdafx.h"
  2. #include "SpectrumCompareEngine.h"
  3. #include "OTSSTDLibFileMgr.h"
  4. #include "OTSClassifyOnSpectrumCompEng.h"
  5. #include "ExpressionParseEngine/ParticleSTD.h"
  6. namespace OTSClassifyEngine
  7. {
  8. bool CurveCompareEngine::Init()
  9. {
  10. CSTDLibFileMgrPtr pLibFileMgr = CSTDLibFileMgrPtr(new CSTDLibFileMgr(m_StrName));
  11. myLib->LoadSpectrumSTDFromDB(m_StrName);
  12. ParticleSTDPtr m_std = ParticleSTDPtr(new ParticleSTD());
  13. if (!pLibFileMgr->LoadPartSTD(m_std))
  14. {
  15. return FALSE;
  16. }
  17. for (int i = 0; i < myLib->GetSTDItemCount(); i++)
  18. {
  19. auto itm = myLib->GetSTDItem(i);
  20. auto expstditm = m_std->GetSTDItemById(itm->GetID());
  21. if (expstditm != nullptr)
  22. {
  23. itm->SetName(expstditm->GetName().c_str());
  24. DWORD r, g, b;
  25. sscanf(expstditm->GetColor().c_str(), "#%2X%2X%2X", &r, &g, &b);
  26. COLORREF rgb = RGB(r, g, b);
  27. itm->SetColor(rgb);
  28. //itm->SetElementsList(expstditm->GetKeyElementList());
  29. itm->SetBSEValue(expstditm->GetBSE());
  30. itm->SetDensity(expstditm->GetDensity());
  31. itm->SetFormula(expstditm->GetFormula().c_str());
  32. }
  33. }
  34. m_Engine = new CClassifyOnSpectrumCompEng(0,myLib);
  35. return TRUE;
  36. }
  37. bool CurveCompareEngine::ClassifyBySpectrum(COTSParticlePtr particle, CPosXrayPtr xray)
  38. {
  39. // similarity
  40. double dSim = 0;
  41. // classify Particles
  42. auto stditm = m_Engine->GetMatchingSTD( xray, dSim);
  43. if (dSim > 0.8)
  44. {
  45. if (stditm != nullptr)
  46. {
  47. particle->SetType(OTS_PARTICLE_TYPE::IDENTIFIED);
  48. particle->SetClassifyId(stditm->GetID());
  49. particle->SetClassifyName(stditm->GetName().GetBuffer());
  50. particle->SetColor(std::to_string(stditm->GetColor()));
  51. }
  52. else
  53. {
  54. particle->SetType(OTS_PARTICLE_TYPE::NOT_IDENTIFIED);
  55. particle->SetClassifyName("Not Identified");
  56. }
  57. }
  58. else
  59. {
  60. particle->SetType(OTS_PARTICLE_TYPE::NOT_IDENTIFIED);
  61. particle->SetClassifyName("Not Identified");
  62. }
  63. return true;
  64. }
  65. bool CurveCompareEngine::IfNeedMaxEDS(COTSParticlePtr particle, CPosXrayPtr xray, double& MaxEDSTime)
  66. {
  67. throw std::logic_error("The method or operation is not implemented.");
  68. }
  69. bool CurveCompareEngine::ClassifyExpression(COTSParticlePtr particle, CPosXrayPtr xray)
  70. {
  71. return false;
  72. }
  73. bool CurveCompareEngine::ClassifyByExpressionTemporarySpectrum(COTSParticlePtr particle, CPosXrayPtr xray)
  74. {
  75. return false;
  76. }
  77. bool CurveCompareEngine::ClassifyIncA(COTSParticlePtr particle, int SteelTech, CPosXrayPtr xray)
  78. {
  79. return false;
  80. }
  81. bool CurveCompareEngine::ZeroElementProcess(COTSParticlePtr particle)
  82. {
  83. return false;
  84. }
  85. OTSClassifyEngine::CLEEnginePtr GetCurveCompareEngine(std::string libName)
  86. {
  87. static CLEEnginePtr engine;
  88. if (engine == NULL)
  89. {
  90. engine = CLEEnginePtr(new CurveCompareEngine(libName));
  91. engine->Init();
  92. }
  93. return engine;
  94. }
  95. }