diff --git a/Loop/Managers/LoopDataManager.swift b/Loop/Managers/LoopDataManager.swift index 43c4dca721..df086d0bcd 100644 --- a/Loop/Managers/LoopDataManager.swift +++ b/Loop/Managers/LoopDataManager.swift @@ -693,6 +693,7 @@ final class LoopDataManager: ObservableObject { dosingStrategy = settingsProvider.settings.automaticDosingStrategy } input.recommendationType = dosingStrategy.recommendationType + dosingDecision.algorithmExperiments = algorithmExperiments(for: dosingStrategy) guard let latestGlucose = input.glucoseHistory.last else { throw LoopError.missingDataError(.glucose) @@ -889,6 +890,7 @@ final class LoopDataManager: ObservableObject { if let output = displayState.output { var dosingDecision = StoredDosingDecision(date: now, reason: "updateRemoteRecommendation") + dosingDecision.algorithmExperiments = algorithmExperiments(for: currentDosingStrategy) dosingDecision.predictedGlucose = output.predictedGlucose dosingDecision.insulinOnBoard = displayState.activeInsulin dosingDecision.carbsOnBoard = displayState.activeCarbs @@ -1025,8 +1027,24 @@ extension LoopDataManager { } } + private var currentDosingStrategy: AutomaticDosingStrategy { + dosingStrategySelectionEnabled ? settingsProvider.settings.automaticDosingStrategy : .automaticBolus + } + + /// Glucose based partial application only affects automatic boluses, so it is in effect only with that strategy + private func algorithmExperiments(for dosingStrategy: AutomaticDosingStrategy) -> [AlgorithmExperiment] { + var experiments: [AlgorithmExperiment] = [] + if UserDefaults.standard.integralRetrospectiveCorrectionEnabled { + experiments.append(AlgorithmExperiment(identifier: "integralRetrospectiveCorrection")) + } + if UserDefaults.standard.glucoseBasedApplicationFactorEnabled && dosingStrategy == .automaticBolus { + experiments.append(AlgorithmExperiment(identifier: "glucoseBasedApplicationFactor")) + } + return experiments + } + func storeManualBolusDosingDecision(_ bolusDosingDecision: BolusDosingDecision, withDate date: Date) async { - let dosingDecision = StoredDosingDecision(id: bolusDosingDecision.id, + var dosingDecision = StoredDosingDecision(id: bolusDosingDecision.id, date: date, reason: bolusDosingDecision.reason.rawValue, settings: StoredDosingDecision.Settings(settingsProvider.settings), @@ -1045,6 +1063,7 @@ extension LoopDataManager { predictedGlucose: bolusDosingDecision.predictedGlucose, manualBolusRecommendation: bolusDosingDecision.manualBolusRecommendation, manualBolusRequested: bolusDosingDecision.manualBolusRequested) + dosingDecision.algorithmExperiments = algorithmExperiments(for: currentDosingStrategy) Task { await dosingDecisionStore.storeDosingDecision(dosingDecision) } }