Stats.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // LoopFollow
  2. // Stats.swift
  3. import Foundation
  4. class StatsData {
  5. var countLow: Int
  6. var percentLow: Float
  7. var percentRange: Float
  8. var percentHigh: Float
  9. var countRange: Int
  10. var countHigh: Int
  11. var totalGlucose: Int
  12. var avgBG: Float
  13. var a1C: Float
  14. var stdDev: Float
  15. var bgDataCount: Int
  16. var pie: [DataStructs.pieData]
  17. init(bgData: [ShareGlucoseData]) {
  18. countLow = 0
  19. countRange = 0
  20. countHigh = 0
  21. totalGlucose = 0
  22. a1C = 0.0
  23. for i in 0 ..< bgData.count {
  24. // Set low/range/high counts for pie chart and %'s
  25. if Double(bgData[i].sgv) <= Storage.shared.lowLine.value {
  26. countLow += 1
  27. } else if Double(bgData[i].sgv) >= Storage.shared.highLine.value {
  28. countHigh += 1
  29. } else {
  30. countRange += 1
  31. }
  32. // set total bg for average
  33. totalGlucose += bgData[i].sgv
  34. }
  35. // Set Percents
  36. percentLow = Float(countLow) / Float(bgData.count) * 100
  37. percentRange = Float(countRange) / Float(bgData.count) * 100
  38. percentHigh = Float(countHigh) / Float(bgData.count) * 100
  39. pie = [
  40. DataStructs.pieData(name: "low", value: Double(percentLow)),
  41. DataStructs.pieData(name: "range", value: Double(percentRange)),
  42. DataStructs.pieData(name: "high", value: Double(percentHigh)),
  43. ]
  44. // Set Average
  45. bgDataCount = bgData.count
  46. if bgDataCount < 1 { bgDataCount = 1 }
  47. avgBG = Float(totalGlucose / bgDataCount)
  48. // compute std dev (sigma)
  49. var partialSum: Float = 0
  50. for i in 0 ..< bgData.count {
  51. partialSum += (Float(bgData[i].sgv) - avgBG) * (Float(bgData[i].sgv) - avgBG)
  52. }
  53. stdDev = sqrt(partialSum / Float(bgData.count))
  54. if Storage.shared.units.value != "mg/dL" {
  55. stdDev = stdDev * Float(GlucoseConversion.mgDlToMmolL)
  56. }
  57. if Storage.shared.useIFCC.value {
  58. a1C = (((46.7 + Float(avgBG)) / 28.7) - 2.152) / 0.09148
  59. } else {
  60. a1C = (46.7 + Float(avgBG)) / 28.7
  61. }
  62. }
  63. }