Stats.swift 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // Stats.swift
  3. // LoopFollow
  4. //
  5. // Created by Jon Fawcett on 6/23/20.
  6. // Copyright © 2020 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. class StatsData {
  10. var countLow: Int
  11. var percentLow: Float
  12. var percentRange: Float
  13. var percentHigh: Float
  14. var countRange: Int
  15. var countHigh: Int
  16. var totalGlucose: Int
  17. var avgBG: Float
  18. var a1C: Float
  19. var pie: [DataStructs.pieData]
  20. init(bgData: [DataStructs.sgvData]) {
  21. self.countLow = 0
  22. self.countRange = 0
  23. self.countHigh = 0
  24. self.totalGlucose = 0
  25. self.a1C = 0.0
  26. for i in 0..<bgData.count {
  27. // Set low/range/high counts for pie chart and %'s
  28. if Float(bgData[i].sgv) <= UserDefaultsRepository.lowLine.value {
  29. self.countLow += 1
  30. } else if Float(bgData[i].sgv) >= UserDefaultsRepository.highLine.value {
  31. self.countHigh += 1
  32. } else {
  33. self.countRange += 1
  34. }
  35. // set total bg for average
  36. totalGlucose += bgData[i].sgv
  37. }
  38. // Set Percents
  39. percentLow = Float(countLow) / Float(bgData.count) * 100
  40. percentRange = Float(countRange) / Float(bgData.count) * 100
  41. percentHigh = Float(countHigh) / Float(bgData.count) * 100
  42. pie = [
  43. DataStructs.pieData(name: "low", value: Double(percentLow)),
  44. DataStructs.pieData(name: "range", value: Double(percentRange)),
  45. DataStructs.pieData(name: "high", value: Double(percentHigh))]
  46. // Set Average
  47. avgBG = Float(totalGlucose / bgData.count)
  48. if UserDefaultsRepository.units.value == "mg/dL" {
  49. a1C = (46.7 + Float(avgBG)) / 28.7
  50. } else {
  51. a1C = (((46.7 + Float(avgBG)) / 28.7) - 2.152) / 0.09148
  52. }
  53. }
  54. /*
  55. func countLowResults() -> Int {
  56. var count = 0
  57. for i in 0..<bgData.count {
  58. if Float(bgData[i].sgv) >= UserDefaultsRepository.lowLine.value {
  59. count += 1
  60. }
  61. }
  62. return count
  63. }
  64. func countHighResults() -> Int{
  65. var count = 0
  66. for i in 0..<bgData.count {
  67. if Float(bgData[i].sgv) >= UserDefaultsRepository.highLine.value {
  68. count += 1
  69. }
  70. }
  71. return count
  72. }
  73. func totalGlucoseResult() -> Int {
  74. var total = 0
  75. for i in 0..<bgData.count {
  76. total += bgData[i].sgv
  77. }
  78. return total
  79. }
  80. func totalGlucoseCount() -> Int {
  81. return bgData.count
  82. }
  83. func averageBGResults() -> Int {
  84. return totalGlucose() / totalGlucoseCount()
  85. }
  86. func a1CResults() -> Double {
  87. if UserDefaultsRepository.units.value == "mg/dL" {
  88. return (46.7 + Double(averageBGResults())) / 28.7
  89. } else {
  90. return (((46.7 + Double(averageBGResults())) / 28.7) - 2.152) / 0.09148
  91. }
  92. }
  93. */
  94. }