| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // LoopFollow
- // Stats.swift
- import Foundation
- class StatsData {
- var countLow: Int
- var percentLow: Float
- var percentRange: Float
- var percentHigh: Float
- var countRange: Int
- var countHigh: Int
- var totalGlucose: Int
- var avgBG: Float
- var a1C: Float
- var stdDev: Float
- var bgDataCount: Int
- var pie: [DataStructs.pieData]
- init(bgData: [ShareGlucoseData]) {
- countLow = 0
- countRange = 0
- countHigh = 0
- totalGlucose = 0
- a1C = 0.0
- for i in 0 ..< bgData.count {
- // Set low/range/high counts for pie chart and %'s
- if Double(bgData[i].sgv) <= Storage.shared.lowLine.value {
- countLow += 1
- } else if Double(bgData[i].sgv) >= Storage.shared.highLine.value {
- countHigh += 1
- } else {
- countRange += 1
- }
- // set total bg for average
- totalGlucose += bgData[i].sgv
- }
- // Set Percents
- percentLow = Float(countLow) / Float(bgData.count) * 100
- percentRange = Float(countRange) / Float(bgData.count) * 100
- percentHigh = Float(countHigh) / Float(bgData.count) * 100
- pie = [
- DataStructs.pieData(name: "low", value: Double(percentLow)),
- DataStructs.pieData(name: "range", value: Double(percentRange)),
- DataStructs.pieData(name: "high", value: Double(percentHigh)),
- ]
- // Set Average
- bgDataCount = bgData.count
- if bgDataCount < 1 { bgDataCount = 1 }
- avgBG = Float(totalGlucose / bgDataCount)
- // compute std dev (sigma)
- var partialSum: Float = 0
- for i in 0 ..< bgData.count {
- partialSum += (Float(bgData[i].sgv) - avgBG) * (Float(bgData[i].sgv) - avgBG)
- }
- stdDev = sqrt(partialSum / Float(bgData.count))
- if Storage.shared.units.value != "mg/dL" {
- stdDev = stdDev * Float(GlucoseConversion.mgDlToMmolL)
- }
- if Storage.shared.useIFCC.value {
- a1C = (((46.7 + Float(avgBG)) / 28.7) - 2.152) / 0.09148
- } else {
- a1C = (46.7 + Float(avgBG)) / 28.7
- }
- }
- }
|