Explorar el Código

adjusted readable calculation

Robert hace 1 año
padre
commit
9dc574a33e

+ 31 - 27
FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift

@@ -84,7 +84,7 @@ extension OverrideConfig {
             minValue = settingsManager.preferences.autosensMin
             settingHalfBasalTarget = settingsManager.preferences.halfBasalExerciseTarget
             halfBasalTarget = settingsManager.preferences.halfBasalExerciseTarget
-            percentage = Double(computePercentage() * 100)
+            percentage = Double(computeAdjustedPercentage() * 100)
             broadcaster.register(SettingsObserver.self, observer: self)
         }
 
@@ -741,30 +741,31 @@ extension OverrideConfig.StateModel {
     func handleAdjustSensToggle() {
         if !didAdjustSens {
             halfBasalTarget = settingHalfBasalTarget
-            percentage = Double(computePercentage(using: settingHalfBasalTarget) * 100)
+            percentage = Double(computeAdjustedPercentage(using: settingHalfBasalTarget) * 100)
         }
     }
 
     func computeHalfBasalTarget() -> Double {
-        let ratio = Decimal(percentage / 100)
+        let adjustmentRatio = Decimal(percentage / 100)
         let normalTarget: Decimal = 100
-        var target: Decimal = tempTargetTarget
+        var tempTargetValue: Decimal = tempTargetTarget
         if units == .mmolL {
-            target = target.asMgdL }
-        var hbtcalc = halfBasalTarget
-        if ratio != 1 {
-            hbtcalc = ((2 * ratio * normalTarget) - normalTarget - (ratio * target)) / (ratio - 1)
+            tempTargetValue = tempTargetValue.asMgdL }
+        var halfBasalTargetValue = halfBasalTarget
+        if adjustmentRatio != 1 {
+            halfBasalTargetValue = ((2 * adjustmentRatio * normalTarget) - normalTarget - (adjustmentRatio * tempTargetValue)) /
+                (adjustmentRatio - 1)
         }
-        return round(Double(hbtcalc))
+        return round(Double(halfBasalTargetValue))
     }
 
     func computeSliderLow() -> Double {
         var minSens: Double = 15
-        var target = tempTargetTarget
+        var tempTargetValue = tempTargetTarget
         if units == .mmolL {
-            target = Decimal(round(Double(tempTargetTarget.asMgdL))) }
-        if target == 0 { return minSens }
-        if target < 100 ||
+            tempTargetValue = Decimal(round(Double(tempTargetTarget.asMgdL))) }
+        if tempTargetValue == 0 { return minSens }
+        if tempTargetValue < 100 ||
             (
                 !settingsManager.preferences.highTemptargetRaisesSensitivity && !settingsManager.preferences
                     .exerciseMode
@@ -775,26 +776,29 @@ extension OverrideConfig.StateModel {
 
     func computeSliderHigh() -> Double {
         var maxSens = Double(maxValue * 100)
-        var target = tempTargetTarget
-        if target == 0 { return maxSens }
+        var tempTargetValue = tempTargetTarget
+        if tempTargetValue == 0 { return maxSens }
         if units == .mmolL {
-            target = Decimal(round(Double(tempTargetTarget.asMgdL))) }
-        if target > 100 || !settingsManager.preferences.lowTemptargetLowersSensitivity { maxSens = 100 }
+            tempTargetValue = Decimal(round(Double(tempTargetTarget.asMgdL))) }
+        if tempTargetValue > 100 || !settingsManager.preferences.lowTemptargetLowersSensitivity { maxSens = 100 }
         return maxSens
     }
 
-    func computePercentage(using initialHBT: Decimal? = nil) -> Decimal {
-        let hbt = initialHBT ?? halfBasalTarget
-        let c = (hbt - 100)
-        let target = tempTargetTarget
-        var ratio: Decimal = 1
-        if c * (c + target - 100) <= 0 {
-            ratio = maxValue
+    func computeAdjustedPercentage(using initialHalfBasalTarget: Decimal? = nil) -> Decimal {
+        let halfBasalTargetValue = initialHalfBasalTarget ?? halfBasalTarget
+        let normalTarget: Decimal = 100
+        let deviationFromNormal = (halfBasalTargetValue - normalTarget)
+        let tempTargetValue = tempTargetTarget
+        var adjustmentRatio: Decimal = 1
+
+        if deviationFromNormal * (deviationFromNormal + tempTargetValue - normalTarget) <= 0 {
+            adjustmentRatio = maxValue
         } else {
-            ratio = c / (c + target - 100)
+            adjustmentRatio = deviationFromNormal / (deviationFromNormal + tempTargetValue - normalTarget)
         }
-        ratio = min(ratio, maxValue)
-        return ratio
+
+        adjustmentRatio = min(adjustmentRatio, maxValue)
+        return adjustmentRatio
     }
 }
 

+ 1 - 1
FreeAPS/Sources/Modules/OverrideConfig/View/AddTempTargetForm.swift

@@ -116,7 +116,7 @@ struct AddTempTargetForm: View {
                     TextFieldWithToolBar(text: $state.tempTargetTarget, placeholder: "0", numberFormatter: glucoseFormatter)
                         .onChange(of: state.tempTargetTarget) { _ in
                             // Recalculate the percentage when tempTargetTarget changes
-                            state.percentage = Double(state.computePercentage() * 100)
+                            state.percentage = Double(state.computeAdjustedPercentage() * 100)
                         }
                     Text(state.units.rawValue).foregroundColor(.secondary)
                 }