OTSEDSBrucker.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. #include "stdafx.h"
  2. #include "OTSEDSBrucker.h"
  3. namespace OTSController {
  4. // constructor
  5. COTSEDSBrucker::COTSEDSBrucker(void)
  6. {
  7. Init();
  8. }
  9. // destructor
  10. COTSEDSBrucker::~COTSEDSBrucker(void)
  11. {
  12. }
  13. // initialization
  14. BOOL COTSEDSBrucker::Init()
  15. {
  16. // create bruker controller if necessary
  17. if (!m_pBrukerImpl)
  18. {
  19. // create bruker controller
  20. m_pBrukerImpl = COTSBrukerImpl::GetInstance();
  21. }
  22. // check if bruker controller is alright
  23. ASSERT(m_pBrukerImpl);
  24. if (!m_pBrukerImpl)
  25. {
  26. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::Init: failed to create bruker controller."));
  27. return FALSE;
  28. }
  29. // initialize bruker controller (as xray controller)
  30. if (!m_pBrukerImpl->Init(CONTROL_TYPE::BRUKER_XRAY))
  31. {
  32. // failed to initialize bruker controller
  33. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::Init: failed to initialize bruker controller."));
  34. return FALSE;
  35. }
  36. // ok, return TRUE
  37. return TRUE;
  38. }
  39. // collect spectrum at the given position (to controller buffer)
  40. BOOL COTSEDSBrucker::CollectSpectrum(DWORD a_nMilliseconds, const CPoint& a_oPoint)
  41. {
  42. // check bruker controller
  43. ASSERT(m_pBrukerImpl);
  44. if (!m_pBrukerImpl)
  45. {
  46. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: invalid m_pBrukerImpl."));
  47. return FALSE;
  48. }
  49. // collect spectrum data
  50. if (!m_pBrukerImpl->CollectOneXRayPoint(a_oPoint, a_nMilliseconds, (long*)m_nRayData, (DWORD)EDSConst::XANA_CHANNELS))
  51. {
  52. // failed to call bruker controller CollectOneXRayPoint method
  53. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: failed to call bruker controller CollectOneXRayPoint method."));
  54. return FALSE;
  55. }
  56. // ok, return TRUE
  57. return TRUE;
  58. }
  59. // collects spectrum (to controller buffer)
  60. BOOL COTSEDSBrucker::CollectSpectrum(DWORD a_nMilliseconds)
  61. {
  62. // check bruker controller
  63. ASSERT(m_pBrukerImpl);
  64. if (!m_pBrukerImpl)
  65. {
  66. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: invalid m_pBrukerImpl."));
  67. return FALSE;
  68. }
  69. // collect spectrum data
  70. if (!m_pBrukerImpl->CollectSpectrum(a_nMilliseconds, (long*)m_nRayData, (DWORD)EDSConst::XANA_CHANNELS))
  71. {
  72. // failed to call bruker controller CollectSpectrum method
  73. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: failed to call bruker controller CollectSpectrum method."));
  74. return FALSE;
  75. }
  76. // ok, return TRUE
  77. return TRUE;
  78. }
  79. // collects spectrum (to given buffer)
  80. BOOL COTSEDSBrucker::CollectSpectrum(DWORD a_nMilliseconds, long* a_pCounts, DWORD a_nBufferSize)
  81. {
  82. // input check
  83. ASSERT(a_pCounts);
  84. if (!a_pCounts)
  85. {
  86. // invalid input data buffer
  87. LogTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: invalid input data buffer."));
  88. return FALSE;
  89. }
  90. // check bruker controller
  91. ASSERT(m_pBrukerImpl);
  92. if (!m_pBrukerImpl)
  93. {
  94. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: invalid m_pBrukerImpl."));
  95. return FALSE;
  96. }
  97. // collect spectrum data
  98. if (!m_pBrukerImpl->CollectSpectrum(a_nMilliseconds, a_pCounts, a_nBufferSize))
  99. {
  100. // failed to call bruker controller CollectSpectrum method
  101. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: failed to call bruker controller CollectSpectrum method."));
  102. return FALSE;
  103. }
  104. // ok, return TRUE
  105. return TRUE;
  106. }
  107. BOOL COTSEDSBrucker::StopXrayAcquistion()
  108. {
  109. ASSERT(m_pBrukerImpl);
  110. if (!m_pBrukerImpl)
  111. {
  112. LogErrorTrace(__FILE__, __LINE__, _T(" invalid m_pBrukerImpl."));
  113. return FALSE;
  114. }
  115. return m_pBrukerImpl->StopSpectrumMeasure();
  116. }
  117. // get live time
  118. float COTSEDSBrucker::GetLiveTime()
  119. {
  120. // check bruker controller
  121. ASSERT(m_pBrukerImpl);
  122. if (!m_pBrukerImpl)
  123. {
  124. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectSpectrum: invalid m_pBrukerImpl."));
  125. return 0.0;
  126. }
  127. // get time value from the controller
  128. float fRet;
  129. fRet = m_pBrukerImpl->GetLiveTime();
  130. return fRet;
  131. }
  132. BOOL COTSEDSBrucker::GetQuantificationMethods(std::vector<CString>& a_vMethods)
  133. {
  134. // check bruker controller
  135. ASSERT(m_pBrukerImpl);
  136. if (!m_pBrukerImpl)
  137. {
  138. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::GetQuantificationMethods: invalid m_pBrukerImpl."));
  139. return FALSE;
  140. }
  141. return m_pBrukerImpl->GetQuantificationMethods(a_vMethods);
  142. }
  143. BOOL COTSEDSBrucker::QuantifyXrayPoint(CPosXray* a_pXRayPoint, LPCTSTR a_sMethodName)
  144. {
  145. // check bruker controller
  146. ASSERT(m_pBrukerImpl);
  147. if (!m_pBrukerImpl)
  148. {
  149. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::QuantifyXrayPoint: invalid m_pBrukerImpl."));
  150. return FALSE;
  151. }
  152. return m_pBrukerImpl->QuantifyXrayPoint(a_pXRayPoint, a_sMethodName);
  153. }
  154. BOOL COTSEDSBrucker::QuantifySpectrumFile(LPCTSTR a_sFilePathName, LPCTSTR a_sMethodName, CElementChemistriesList& a_listElementChemistry)
  155. {
  156. // check bruker controller
  157. ASSERT(m_pBrukerImpl);
  158. if (!m_pBrukerImpl)
  159. {
  160. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::QuantifySpectrumFile: invalid m_pBrukerImpl."));
  161. return FALSE;
  162. }
  163. return m_pBrukerImpl->QuantifySpectrumFile(a_sFilePathName, a_sMethodName, a_listElementChemistry);
  164. }
  165. BOOL COTSEDSBrucker::QuantifySpectrumOut(DWORD a_nMilliseconds, long* a_pCounts, DWORD a_nBufferSize, CElementChemistriesList& a_listElementChemistry)
  166. {
  167. // check bruker controller
  168. ASSERT(m_pBrukerImpl);
  169. if (!m_pBrukerImpl)
  170. {
  171. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::QuantifySpectrumOut: invalid m_pBrukerImpl."));
  172. return FALSE;
  173. }
  174. return m_pBrukerImpl->QuantifySpectrumOut(a_nMilliseconds, a_pCounts, a_nBufferSize, a_listElementChemistry);
  175. }
  176. BOOL COTSEDSBrucker::GetXRayByPoints(std::vector<CPosXrayPtr>& a_vXRayPoints, const DWORD a_nXRayAQTime)
  177. {
  178. // check Bruker controller
  179. ASSERT(m_pBrukerImpl);
  180. if (!m_pBrukerImpl)
  181. {
  182. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::GetXRayByPoints: invalid m_pBrukerImpl."));
  183. return FALSE;
  184. }
  185. std::vector<CPosXrayPtr> listXRayPointsTemp;
  186. if (!m_pBrukerImpl->GetXRayByPoints(a_vXRayPoints, a_nXRayAQTime))// one point per time,or we cann't get the full element data. gsp 2020-11-30
  187. {
  188. LogErrorTrace(__FILE__, __LINE__, _T("GetXRayByPoints: failed to get element."));
  189. }
  190. return TRUE;
  191. }
  192. BOOL COTSEDSBrucker::QuantifyXrays(std::vector<CPosXrayPtr>& a_vXRayParts)
  193. {
  194. m_pBrukerImpl->QuantifyPosXrayPointsOnLine(a_vXRayParts);
  195. return true;
  196. }
  197. BOOL COTSEDSBrucker::QuantifyXray(CPosXrayPtr& a_vXRayPart)
  198. {
  199. m_pBrukerImpl->QuantifyPosXrayPointOnLine(a_vXRayPart);
  200. return true;
  201. }
  202. BOOL COTSEDSBrucker::GetXRayByFeatures(std::vector<CPosXrayPtr>& a_listXRayPoints,
  203. std::vector<BrukerFeature>& a_listFeatures,
  204. const DWORD a_nXRayAQTime)
  205. {
  206. // check bruker controller
  207. ASSERT(m_pBrukerImpl);
  208. if (!m_pBrukerImpl)
  209. {
  210. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::GetXRayByFeatures: invalid m_pBrukerImpl."));
  211. return FALSE;
  212. }
  213. // turn SEM to external
  214. if (!m_pBrukerImpl->SetSEMExternalOn())
  215. {
  216. // failed to call SetSEMExternalOn method
  217. LogTrace(__FILE__, __LINE__, _T("COTSBrukerImpl::GetXRayByPoints: failed to call SetSEMExternalOn method."));
  218. return FALSE;
  219. }
  220. if (!m_pBrukerImpl->GetXRayByFeatures(a_listXRayPoints, a_listFeatures, a_nXRayAQTime))
  221. {
  222. // failed to call bruker controller CollectXRayPointsByFeatures method.
  223. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::CollectXRayPointsByFeatures: failed to call bruker controller CollectXRayPointsByFeatures method."));
  224. }
  225. if (!m_pBrukerImpl->SetSEMExternalOff())
  226. {
  227. // failed to call SetSEMExternalOn method
  228. LogTrace(__FILE__, __LINE__, _T("COTSBrukerImpl::GetXRayByPoints: failed to call SetSEMExternalOff method."));
  229. }
  230. // ok, return TRUE
  231. return TRUE;
  232. }
  233. // Quatification
  234. void COTSEDSBrucker::SetQuantification(BOOL a_bQuantification)
  235. {
  236. // check bruker controller
  237. ASSERT(m_pBrukerImpl);
  238. if (!m_pBrukerImpl)
  239. {
  240. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::SetQuantification: invalid m_pBrukerImpl."));
  241. return;
  242. }
  243. // collect x-Ray points (area scan)
  244. m_pBrukerImpl->SetQuantificationFlag(a_bQuantification);
  245. }
  246. BOOL COTSEDSBrucker::GetQuantification()
  247. {
  248. // check bruker controller
  249. ASSERT(m_pBrukerImpl);
  250. if (!m_pBrukerImpl)
  251. {
  252. LogErrorTrace(__FILE__, __LINE__, _T("COTSEDSBrucker::GetQuantification: invalid m_pBrukerImpl."));
  253. return FALSE;
  254. }
  255. // collect x-Ray points (area scan)
  256. return m_pBrukerImpl->GetQuantificationFlag();
  257. }
  258. // Get number of channels
  259. DWORD COTSEDSBrucker::GetNumberOfChannels(void)
  260. {
  261. return (DWORD)2000;
  262. }
  263. // Get the x-Ray data
  264. DWORD* COTSEDSBrucker::GetXRayData()
  265. {
  266. return m_nRayData;
  267. }
  268. void COTSEDSBrucker::SetExpectCount(int expectcount)
  269. {
  270. m_pBrukerImpl->SetExpectCount(expectcount);
  271. }
  272. int COTSEDSBrucker::GetExpectCount()
  273. {
  274. return m_pBrukerImpl->GetExpectCount();
  275. }
  276. }