CGBLevel.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "otsdataconst.h"
  4. #include "CGBLevel.h"
  5. #include "GBFieldData.h"
  6. #include <map>
  7. namespace OTSGBCalculate
  8. {
  9. using namespace std;
  10. using namespace OTSDATA;
  11. CGBLevel::CGBLevel() // constructor
  12. {
  13. Init();
  14. }
  15. CGBLevel::CGBLevel(CGBFieldData* GBField, GB_CLASSIFY_TYPE a_nLevel)
  16. {
  17. m_GBField = GBField;
  18. m_nLevel = a_nLevel;
  19. }
  20. CGBLevel::CGBLevel(const CGBLevel& a_oSource) // copy constructor
  21. {
  22. // can't copy itself
  23. if (&a_oSource == this)
  24. {
  25. return;
  26. }
  27. // copy data over
  28. Duplicate(a_oSource);
  29. }
  30. CGBLevel::CGBLevel(CGBLevel* a_poSource) // copy constructor
  31. {
  32. // input check
  33. ASSERT(a_poSource);
  34. if (!a_poSource)
  35. {
  36. return;
  37. }
  38. // can't copy itself
  39. if (a_poSource == this)
  40. {
  41. return;
  42. }
  43. // copy data over
  44. Duplicate(*a_poSource);
  45. }
  46. CGBLevel& CGBLevel::operator=(const CGBLevel& a_oSource) // =operator
  47. {
  48. // cleanup
  49. Cleanup();
  50. // copy the class data over
  51. Duplicate(a_oSource);
  52. // return class
  53. return *this;
  54. }
  55. BOOL CGBLevel::operator==(const CGBLevel& a_oSource) // =operator
  56. {
  57. // return test result
  58. return(m_nLevel == a_oSource.m_nLevel);
  59. }
  60. CGBLevel::~CGBLevel() // detractor
  61. {
  62. Cleanup();
  63. }
  64. GB_GRADE_TYPE CGBLevel::GetThinGrade()
  65. {
  66. // get grade
  67. // A
  68. double dLengthAll = 0;
  69. int nSize;
  70. switch (m_nLevel)
  71. {
  72. case GB_CLASSIFY_TYPE::A_TYPE:
  73. for (auto pAparticle : m_GBField->listAThinParticles)
  74. {
  75. double dLength = pAparticle->GetDMax();
  76. dLengthAll += dLength;
  77. }
  78. return GetAGrade(dLengthAll);
  79. break;
  80. case GB_CLASSIFY_TYPE::B_TYPE:
  81. dLengthAll = 0;
  82. for (auto pBparticle : m_GBField->listBThinParticles)
  83. {
  84. double dLength = pBparticle->GetDMax();
  85. dLengthAll += dLength;
  86. }
  87. return GetBGrade(dLengthAll);
  88. case GB_CLASSIFY_TYPE::C_TYPE:
  89. dLengthAll = 0;
  90. for (auto pCparticle : m_GBField->listCThinParticles)
  91. {
  92. double dLength = pCparticle->GetDMax();
  93. dLengthAll += dLength;
  94. }
  95. return GetCGrade(dLengthAll);
  96. break;
  97. case GB_CLASSIFY_TYPE::D_TYPE:
  98. nSize = (int)m_GBField->listDThinParticles.size();
  99. return GetDGrade(nSize);
  100. break;
  101. case GB_CLASSIFY_TYPE::DSulfide_TYPE:
  102. nSize = (int)m_GBField->listDSulfideThinParticles.size();
  103. return GetDGrade(nSize);
  104. break;
  105. }
  106. return GB_GRADE_TYPE::INVALID;
  107. }
  108. GB_GRADE_TYPE CGBLevel::GetWideGrade()
  109. {
  110. double dLengthAll = 0;
  111. int nSize;
  112. switch (m_nLevel)
  113. {
  114. case GB_CLASSIFY_TYPE::A_TYPE:
  115. for (auto pAparticle : m_GBField->listAWideParticles)
  116. {
  117. double dLength = pAparticle->GetDMax();
  118. dLengthAll += dLength;
  119. }
  120. return GetAGrade(dLengthAll);
  121. break;
  122. case GB_CLASSIFY_TYPE::B_TYPE:
  123. dLengthAll = 0;
  124. for (auto pBparticle : m_GBField->listBWideParticles)
  125. {
  126. double dLength = pBparticle->GetDMax();
  127. dLengthAll += dLength;
  128. }
  129. return GetBGrade(dLengthAll);
  130. case GB_CLASSIFY_TYPE::C_TYPE:
  131. dLengthAll = 0;
  132. for (auto pCparticle : m_GBField->listCWideParticles)
  133. {
  134. double dLength = pCparticle->GetDMax();
  135. dLengthAll += dLength;
  136. }
  137. return GetCGrade(dLengthAll);
  138. break;
  139. case GB_CLASSIFY_TYPE::D_TYPE:
  140. nSize = (int)m_GBField->listDWideParticles.size();
  141. return GetDGrade(nSize);
  142. break;
  143. case GB_CLASSIFY_TYPE::DSulfide_TYPE:
  144. nSize = (int)m_GBField->listDSulfideWideParticles.size();
  145. return GetDGrade(nSize);
  146. break;
  147. }
  148. return GB_GRADE_TYPE::INVALID;
  149. }
  150. GB_GRADE_TYPE CGBLevel::GetSuperGrade()
  151. {
  152. double dLengthAll = 0;
  153. int nSize;
  154. switch (m_nLevel)
  155. {
  156. case GB_CLASSIFY_TYPE::A_TYPE:
  157. for (auto pAparticle : m_GBField->listASuperParticles)
  158. {
  159. double dLength = pAparticle->GetDMax();
  160. dLengthAll += dLength;
  161. }
  162. return GetAGrade(dLengthAll);
  163. break;
  164. case GB_CLASSIFY_TYPE::B_TYPE:
  165. dLengthAll = 0;
  166. for (auto pBparticle : m_GBField->listBSuperParticles)
  167. {
  168. double dLength = pBparticle->GetDMax();
  169. dLengthAll += dLength;
  170. }
  171. return GetBGrade(dLengthAll);
  172. case GB_CLASSIFY_TYPE::C_TYPE:
  173. dLengthAll = 0;
  174. for (auto pParticle : m_GBField->listCSuperParticles)
  175. {
  176. double dLength = pParticle->GetDMax();
  177. dLengthAll += dLength;
  178. }
  179. return GetCGrade(dLengthAll);
  180. break;
  181. case GB_CLASSIFY_TYPE::D_TYPE:
  182. nSize = (int)m_GBField->listDSuperParticles.size();
  183. return GetDGrade(nSize);
  184. break;
  185. case GB_CLASSIFY_TYPE::DSulfide_TYPE:
  186. nSize = (int)m_GBField->listDSulfideSuperParticles.size();
  187. return GetDGrade(nSize);
  188. break;
  189. }
  190. return GB_GRADE_TYPE::INVALID;
  191. }
  192. double CGBLevel::GetMaxFeretDiameter()
  193. {
  194. if (m_FeretDiameterMax == 0)
  195. {
  196. double dFeretDiameterMax = 0;
  197. for (auto pDSParticles : m_GBField->listDSParticles)
  198. {
  199. double dFeretDiameter = pDSParticles->GetFeretDiameter();
  200. if (dFeretDiameter > dFeretDiameterMax)
  201. {
  202. dFeretDiameterMax = dFeretDiameter;
  203. }
  204. }
  205. m_FeretDiameterMax = dFeretDiameterMax;
  206. }
  207. return m_FeretDiameterMax;
  208. }
  209. double CGBLevel::GetThinLength()
  210. {
  211. // get grade
  212. // A
  213. double dLengthAll = 0;
  214. int nSize;
  215. switch (m_nLevel)
  216. {
  217. case GB_CLASSIFY_TYPE::A_TYPE:
  218. for (auto pAparticle : m_GBField->listAThinParticles)
  219. {
  220. double dLength = pAparticle->GetDMax();
  221. dLengthAll += dLength;
  222. }
  223. return dLengthAll;
  224. break;
  225. case GB_CLASSIFY_TYPE::B_TYPE:
  226. dLengthAll = 0;
  227. for (auto pBparticle : m_GBField->listBThinParticles)
  228. {
  229. double dLength = pBparticle->GetDMax();
  230. dLengthAll += dLength;
  231. }
  232. return dLengthAll;
  233. case GB_CLASSIFY_TYPE::C_TYPE:
  234. dLengthAll = 0;
  235. for (auto pCparticle : m_GBField->listCThinParticles)
  236. {
  237. double dLength = pCparticle->GetDMax();
  238. dLengthAll += dLength;
  239. }
  240. return dLengthAll;
  241. break;
  242. case GB_CLASSIFY_TYPE::D_TYPE:
  243. nSize = (int)m_GBField->listDThinParticles.size();
  244. return nSize;
  245. break;
  246. case GB_CLASSIFY_TYPE::DSulfide_TYPE:
  247. nSize = (int)m_GBField->listDSulfideThinParticles.size();
  248. return nSize;
  249. break;
  250. }
  251. return 0;
  252. }
  253. double CGBLevel::GetWideLength()
  254. {
  255. double dLengthAll = 0;
  256. int nSize;
  257. switch (m_nLevel)
  258. {
  259. case GB_CLASSIFY_TYPE::A_TYPE:
  260. for (auto pAparticle : m_GBField->listAWideParticles)
  261. {
  262. double dLength = pAparticle->GetDMax();
  263. dLengthAll += dLength;
  264. }
  265. return dLengthAll;
  266. break;
  267. case GB_CLASSIFY_TYPE::B_TYPE:
  268. dLengthAll = 0;
  269. for (auto pBparticle : m_GBField->listBWideParticles)
  270. {
  271. double dLength = pBparticle->GetDMax();
  272. dLengthAll += dLength;
  273. }
  274. return dLengthAll;
  275. case GB_CLASSIFY_TYPE::C_TYPE:
  276. dLengthAll = 0;
  277. for (auto pCparticle : m_GBField->listCWideParticles)
  278. {
  279. double dLength = pCparticle->GetDMax();
  280. dLengthAll += dLength;
  281. }
  282. return dLengthAll;
  283. break;
  284. case GB_CLASSIFY_TYPE::D_TYPE:
  285. nSize = (int)m_GBField->listDWideParticles.size();
  286. return nSize;
  287. break;
  288. case GB_CLASSIFY_TYPE::DSulfide_TYPE:
  289. nSize = (int)m_GBField->listDSulfideWideParticles.size();
  290. return nSize;
  291. break;
  292. }
  293. return 0;
  294. }
  295. double CGBLevel::GetSuperLength()
  296. {
  297. double dLengthAll = 0;
  298. int nSize;
  299. switch (m_nLevel)
  300. {
  301. case GB_CLASSIFY_TYPE::A_TYPE:
  302. for (auto pAparticle : m_GBField->listASuperParticles)
  303. {
  304. double dLength = pAparticle->GetDMax();
  305. dLengthAll += dLength;
  306. }
  307. return dLengthAll;
  308. break;
  309. case GB_CLASSIFY_TYPE::B_TYPE:
  310. dLengthAll = 0;
  311. for (auto pBparticle : m_GBField->listBSuperParticles)
  312. {
  313. double dLength = pBparticle->GetDMax();
  314. dLengthAll += dLength;
  315. }
  316. return dLengthAll;
  317. case GB_CLASSIFY_TYPE::C_TYPE:
  318. dLengthAll = 0;
  319. for (auto pParticle : m_GBField->listCSuperParticles)
  320. {
  321. double dLength = pParticle->GetDMax();
  322. dLengthAll += dLength;
  323. }
  324. return dLengthAll;
  325. break;
  326. case GB_CLASSIFY_TYPE::D_TYPE:
  327. nSize = (int)m_GBField->listDSuperParticles.size();
  328. return nSize;
  329. break;
  330. case GB_CLASSIFY_TYPE::DSulfide_TYPE:
  331. nSize = (int)m_GBField->listDSulfideSuperParticles.size();
  332. return nSize;
  333. break;
  334. }
  335. return 0;
  336. }
  337. GB_GRADE_TYPE GetAGrade(double dLengthAll)
  338. {
  339. if (dLengthAll < 37)
  340. {
  341. return (GB_GRADE_TYPE::POINT_0_0);
  342. }
  343. else if (dLengthAll < 127 && dLengthAll >= 37)
  344. {
  345. return (GB_GRADE_TYPE::POINT_0_5);
  346. }
  347. else if (dLengthAll < 261 && dLengthAll >= 127)
  348. {
  349. return (GB_GRADE_TYPE::POINT_1_0);
  350. }
  351. else if (dLengthAll < 436 && dLengthAll >= 261)
  352. {
  353. return (GB_GRADE_TYPE::POINT_1_5);
  354. }
  355. else if (dLengthAll < 649 && dLengthAll >= 436)
  356. {
  357. return (GB_GRADE_TYPE::POINT_2_0);
  358. }
  359. else if (dLengthAll < 898 && dLengthAll >= 649)
  360. {
  361. return (GB_GRADE_TYPE::POINT_2_5);
  362. }
  363. else if (dLengthAll < 1181 && dLengthAll >= 898)
  364. {
  365. return (GB_GRADE_TYPE::POINT_3_0);
  366. }
  367. else if (dLengthAll < 1498 && dLengthAll >= 1181)
  368. {
  369. return (GB_GRADE_TYPE::POINT_3_5);
  370. }
  371. else if (dLengthAll < 1898 && dLengthAll >= 1489)
  372. {
  373. return (GB_GRADE_TYPE::POINT_4_0);
  374. }
  375. else if (dLengthAll < 2230 && dLengthAll >= 1898)
  376. {
  377. return (GB_GRADE_TYPE::POINT_4_5);
  378. }
  379. else if (dLengthAll >= 2230)
  380. {
  381. return (GB_GRADE_TYPE::POINT_5_0);
  382. }
  383. return GB_GRADE_TYPE::INVALID;
  384. }
  385. GB_GRADE_TYPE GetBGrade(double dLengthAll)
  386. {
  387. if (dLengthAll < 17)
  388. {
  389. return (GB_GRADE_TYPE::POINT_0_0);
  390. }
  391. else if (dLengthAll < 77 && dLengthAll >= 17)
  392. {
  393. return (GB_GRADE_TYPE::POINT_0_5);
  394. }
  395. else if (dLengthAll <= 184 && dLengthAll >= 77)
  396. {
  397. return (GB_GRADE_TYPE::POINT_1_0);
  398. }
  399. else if (dLengthAll < 343 && dLengthAll >= 184)
  400. {
  401. return (GB_GRADE_TYPE::POINT_1_5);
  402. }
  403. else if (dLengthAll < 555 && dLengthAll >= 343)
  404. {
  405. return (GB_GRADE_TYPE::POINT_2_0);
  406. }
  407. else if (dLengthAll < 822 && dLengthAll >= 555)
  408. {
  409. return (GB_GRADE_TYPE::POINT_2_5);
  410. }
  411. else if (dLengthAll < 1147 && dLengthAll >= 822)
  412. {
  413. return (GB_GRADE_TYPE::POINT_3_0);
  414. }
  415. else if (dLengthAll < 1530 && dLengthAll >= 1147)
  416. {
  417. return (GB_GRADE_TYPE::POINT_3_5);
  418. }
  419. else if (dLengthAll < 1973 && dLengthAll >= 1530)
  420. {
  421. return (GB_GRADE_TYPE::POINT_4_0);
  422. }
  423. else if (dLengthAll < 2476 && dLengthAll >= 1973)
  424. {
  425. return (GB_GRADE_TYPE::POINT_4_5);
  426. }
  427. else if (dLengthAll >= 2476)
  428. {
  429. return (GB_GRADE_TYPE::POINT_5_0);
  430. }
  431. return GB_GRADE_TYPE::INVALID;
  432. }
  433. GB_GRADE_TYPE GetCGrade(double dLengthAll)
  434. {
  435. if (dLengthAll < 18)
  436. {
  437. return (GB_GRADE_TYPE::POINT_0_0);
  438. }
  439. else if (dLengthAll < 76 && dLengthAll >= 18)
  440. {
  441. return (GB_GRADE_TYPE::POINT_0_5);
  442. }
  443. else if (dLengthAll < 176 && dLengthAll >= 76)
  444. {
  445. return (GB_GRADE_TYPE::POINT_1_0);
  446. }
  447. else if (dLengthAll < 320 && dLengthAll >= 176)
  448. {
  449. return (GB_GRADE_TYPE::POINT_1_5);
  450. }
  451. else if (dLengthAll < 510 && dLengthAll >= 320)
  452. {
  453. return (GB_GRADE_TYPE::POINT_2_0);
  454. }
  455. else if (dLengthAll < 746 && dLengthAll >= 510)
  456. {
  457. return (GB_GRADE_TYPE::POINT_2_5);
  458. }
  459. else if (dLengthAll < 1029 && dLengthAll >= 746)
  460. {
  461. return (GB_GRADE_TYPE::POINT_3_0);
  462. }
  463. else if (dLengthAll < 1359 && dLengthAll >= 1029)
  464. {
  465. return (GB_GRADE_TYPE::POINT_3_5);
  466. }
  467. else if (dLengthAll < 1737 && dLengthAll >= 1359)
  468. {
  469. return (GB_GRADE_TYPE::POINT_4_0);
  470. }
  471. else if (dLengthAll <= 2163 && dLengthAll >= 1737)
  472. {
  473. return (GB_GRADE_TYPE::POINT_4_5);
  474. }
  475. else if (dLengthAll >= 2163)
  476. {
  477. return (GB_GRADE_TYPE::POINT_5_0);
  478. }
  479. return GB_GRADE_TYPE::INVALID;
  480. }
  481. GB_GRADE_TYPE GetDGrade(int nSize)
  482. {
  483. if (nSize < 1)
  484. {
  485. return (GB_GRADE_TYPE::POINT_0_0);
  486. }
  487. else if (nSize < 4 && nSize >= 1)
  488. {
  489. return (GB_GRADE_TYPE::POINT_0_5);
  490. }
  491. else if (nSize < 9 && nSize >= 4)
  492. {
  493. return (GB_GRADE_TYPE::POINT_1_0);
  494. }
  495. else if (nSize < 16 && nSize >= 9)
  496. {
  497. return (GB_GRADE_TYPE::POINT_1_5);
  498. }
  499. else if (nSize < 25 && nSize >= 16)
  500. {
  501. return (GB_GRADE_TYPE::POINT_2_0);
  502. }
  503. else if (nSize < 36 && nSize >= 25)
  504. {
  505. return (GB_GRADE_TYPE::POINT_2_5);
  506. }
  507. else if (nSize < 49 && nSize >= 36)
  508. {
  509. return (GB_GRADE_TYPE::POINT_3_0);
  510. }
  511. else if (nSize < 64 && nSize >= 49)
  512. {
  513. return (GB_GRADE_TYPE::POINT_3_5);
  514. }
  515. else if (nSize < 81 && nSize >= 64)
  516. {
  517. return (GB_GRADE_TYPE::POINT_4_0);
  518. }
  519. else if (nSize < 100 && nSize >= 81)
  520. {
  521. return (GB_GRADE_TYPE::POINT_4_5);
  522. }
  523. else if (nSize >= 100)
  524. {
  525. return (GB_GRADE_TYPE::POINT_5_0);
  526. }
  527. return GB_GRADE_TYPE::INVALID;
  528. }
  529. CString GetDSGrade(double dFeretDiameterMax)
  530. {
  531. if (dFeretDiameterMax < 13)
  532. {
  533. return _T("0");
  534. }
  535. else if (dFeretDiameterMax < 19 && dFeretDiameterMax >= 13)
  536. {
  537. return _T("0.5");
  538. }
  539. else if (dFeretDiameterMax < 27 && dFeretDiameterMax >= 19)
  540. {
  541. return _T("1.0");
  542. }
  543. else if (dFeretDiameterMax < 38 && dFeretDiameterMax >= 27)
  544. {
  545. return _T("1.5");
  546. }
  547. else if (dFeretDiameterMax < 53 && dFeretDiameterMax >= 38)
  548. {
  549. return _T("2.0");
  550. }
  551. else if (dFeretDiameterMax < 76 && dFeretDiameterMax >= 53)
  552. {
  553. return _T("2.5");
  554. }
  555. else if (dFeretDiameterMax < 107 && dFeretDiameterMax >= 76)
  556. {
  557. return _T("3.0");
  558. }
  559. else if (dFeretDiameterMax < 151 && dFeretDiameterMax >= 107)
  560. {
  561. return _T("3.5");
  562. }
  563. else if (dFeretDiameterMax < 214 && dFeretDiameterMax >= 151)
  564. {
  565. return _T("4.0");
  566. }
  567. else if (dFeretDiameterMax < 303 && dFeretDiameterMax >= 214)
  568. {
  569. return _T("4.5");
  570. }
  571. else if (dFeretDiameterMax >= 303)
  572. {
  573. return _T("5.0");
  574. }
  575. return _T("0.0");
  576. }
  577. // cleanup
  578. void CGBLevel::Cleanup()
  579. {
  580. }
  581. // initialization
  582. void CGBLevel::Init()
  583. {
  584. m_nLevel = GB_CLASSIFY_TYPE::INVALID;
  585. }
  586. // duplication
  587. void CGBLevel::Duplicate(const CGBLevel& a_oSource)
  588. {
  589. // initialization
  590. Init();
  591. // copy data over
  592. m_nLevel = a_oSource.m_nLevel;
  593. }
  594. }