Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
allow forecast to go beyond dia, but dosing decisions should only use…
… eventual bg no further out than dia.
  • Loading branch information
ps2 committed Apr 21, 2017
commit d047bc6c426b952303128ace904d715f0c7f7d97
12 changes: 8 additions & 4 deletions Loop/Managers/DoseMath.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,15 @@ struct DoseMath {
glucoseTargetRange: GlucoseRangeSchedule,
insulinSensitivity: InsulinSensitivitySchedule,
basalRateSchedule: BasalRateSchedule,
minimumBGGuard: GlucoseThreshold
minimumBGGuard: GlucoseThreshold,
insulinActionDuration: TimeInterval
) -> (rate: Double, duration: TimeInterval)? {
guard glucose.count > 1 else {
return nil
}

let eventualGlucose = glucose.last!
let eventualGlucose = glucose.filter { $0.startDate < date.addingTimeInterval(insulinActionDuration) }.last!

let minGlucose = glucose.min { $0.quantity < $1.quantity }!

let eventualGlucoseTargets = glucoseTargetRange.value(at: eventualGlucose.startDate)
Expand Down Expand Up @@ -151,13 +153,15 @@ struct DoseMath {
insulinSensitivity: InsulinSensitivitySchedule,
basalRateSchedule: BasalRateSchedule,
pendingInsulin: Double,
minimumBGGuard: GlucoseThreshold
minimumBGGuard: GlucoseThreshold,
insulinActionDuration: TimeInterval
) -> BolusRecommendation {
guard glucose.count > 1 else {
return BolusRecommendation(amount: 0, pendingInsulin: pendingInsulin)
}

let eventualGlucose = glucose.last!
let eventualGlucose = glucose.filter { $0.startDate < date.addingTimeInterval(insulinActionDuration) }.last!

let minGlucose = glucose.min { $0.quantity < $1.quantity }!

let eventualGlucoseTargets = glucoseTargetRange.value(at: eventualGlucose.startDate)
Expand Down
21 changes: 11 additions & 10 deletions Loop/Managers/LoopDataManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -383,10 +383,6 @@ final class LoopDataManager {
throw LoopError.missingDataError(details: "Glucose data not available", recovery: "Check your CGM data source")
}

guard let insulinActionDuration = self.doseStore.insulinActionDuration else {
throw LoopError.configurationError("Missing insulin action duration.")
}

if glucoseChange == nil {
updateGroup.enter()
glucoseStore.getRecentGlucoseChange { (values, error) in
Expand Down Expand Up @@ -421,7 +417,7 @@ final class LoopDataManager {
self.logger.addError(error, fromSource: "CarbStore")
self.carbEffect = nil
} else {
self.carbEffect = effects.filterDateRange(effectStartDate, Date.init(timeIntervalSinceNow: insulinActionDuration))
self.carbEffect = effects
}

updateGroup.leave()
Expand Down Expand Up @@ -794,7 +790,8 @@ final class LoopDataManager {
maxBasal = settings.maximumBasalRatePerHour,
let glucoseTargetRange = settings.glucoseTargetRangeSchedule,
let insulinSensitivity = insulinSensitivitySchedule,
let basalRates = basalRateSchedule
let basalRates = basalRateSchedule,
let insulinActionDuration = insulinActionDuration
else {
error = LoopError.configurationError("Check settings")
throw error!
Expand All @@ -809,7 +806,8 @@ final class LoopDataManager {
glucoseTargetRange: glucoseTargetRange,
insulinSensitivity: insulinSensitivity,
basalRateSchedule: basalRates,
minimumBGGuard: minimumBGGuard
minimumBGGuard: minimumBGGuard,
insulinActionDuration: insulinActionDuration
)
else {
recommendedTempBasal = nil
Expand All @@ -830,7 +828,8 @@ final class LoopDataManager {
let maxBolus = settings.maximumBolus,
let glucoseTargetRange = settings.glucoseTargetRangeSchedule,
let insulinSensitivity = insulinSensitivitySchedule,
let basalRates = basalRateSchedule
let basalRates = basalRateSchedule,
let insulinActionDuration = insulinActionDuration
else {
throw LoopError.configurationError("Check Settings")
}
Expand All @@ -853,7 +852,8 @@ final class LoopDataManager {
insulinSensitivity: insulinSensitivity,
basalRateSchedule: basalRates,
pendingInsulin: pendingInsulin,
minimumBGGuard: minimumBGGuard
minimumBGGuard: minimumBGGuard,
insulinActionDuration: insulinActionDuration
)

let recommendationWithoutMomentum = DoseMath.recommendBolusFromPredictedGlucose(glucoseWithoutMomentum,
Expand All @@ -862,7 +862,8 @@ final class LoopDataManager {
insulinSensitivity: insulinSensitivity,
basalRateSchedule: basalRates,
pendingInsulin: pendingInsulin,
minimumBGGuard: minimumBGGuard
minimumBGGuard: minimumBGGuard,
insulinActionDuration: insulinActionDuration
)

if recommendationWithMomentum.amount > recommendationWithoutMomentum.amount {
Expand Down