Skip to content

Commit cc8f328

Browse files
authored
LOOP-4665 Fix bugs relating to determining span of time to use for ISF timeline (#716)
* Fix a couple of bugs in determining span of time to use for ISF timeline * Use isf interval helper, and fix bugs with bolus preview and forecast details
1 parent 7804046 commit cc8f328

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

Loop/Managers/LoopDataManager.swift

+22-6
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ final class LoopDataManager: ObservableObject {
343343
throw LoopError.configurationError(.basalRateSchedule)
344344
}
345345

346-
let forecastEndTime = baseTime.addingTimeInterval(InsulinMath.defaultInsulinActivityDuration).dateCeiledToTimeInterval(.minutes(GlucoseMath.defaultDelta))
346+
let forecastEndTime = baseTime.addingTimeInterval(InsulinMath.defaultInsulinActivityDuration).dateCeiledToTimeInterval(GlucoseMath.defaultDelta)
347347

348348
let carbsStart = baseTime.addingTimeInterval(CarbMath.dateAdjustmentPast + .minutes(-1)) // additional minute to handle difference in seconds between carb entry and carb ratio
349349

@@ -366,9 +366,24 @@ final class LoopDataManager: ObservableObject {
366366

367367
let glucose = try await glucoseStore.getGlucoseSamples(start: carbsStart, end: baseTime)
368368

369-
let sensitivityStart = min(carbsStart, dosesStart)
369+
let dosesWithModel = doses.map { $0.simpleDose(with: insulinModel(for: $0.insulinType)) }
370370

371-
let sensitivity = try await settingsProvider.getInsulinSensitivityHistory(startDate: sensitivityStart, endDate: forecastEndTime)
371+
let recommendationInsulinModel = insulinModel(for: deliveryDelegate?.pumpInsulinType ?? .novolog)
372+
373+
let recommendationEffectInterval = DateInterval(
374+
start: baseTime,
375+
duration: recommendationInsulinModel.effectDuration
376+
)
377+
let neededSensitivityTimeline = LoopAlgorithm.timelineIntervalForSensitivity(
378+
doses: dosesWithModel,
379+
glucoseHistoryStart: glucose.first?.startDate ?? baseTime,
380+
recommendationEffectInterval: recommendationEffectInterval
381+
)
382+
383+
let sensitivity = try await settingsProvider.getInsulinSensitivityHistory(
384+
startDate: neededSensitivityTimeline.start,
385+
endDate: neededSensitivityTimeline.end
386+
)
372387

373388
let target = try await settingsProvider.getTargetRangeHistory(startDate: baseTime, endDate: forecastEndTime)
374389

@@ -382,7 +397,7 @@ final class LoopDataManager: ObservableObject {
382397
throw LoopError.configurationError(.maximumBasalRatePerHour)
383398
}
384399

385-
var overrides = temporaryPresetsManager.overrideHistory.getOverrideHistory(startDate: sensitivityStart, endDate: forecastEndTime)
400+
var overrides = temporaryPresetsManager.overrideHistory.getOverrideHistory(startDate: neededSensitivityTimeline.start, endDate: forecastEndTime)
386401

387402
// Bug (https://tidepool.atlassian.net/browse/LOOP-4759) pre-meal is not recorded in override history
388403
// So currently we handle automatic forecast by manually adding it in, and when meal bolusing, we do not do this.
@@ -433,7 +448,7 @@ final class LoopDataManager: ObservableObject {
433448

434449
return StoredDataAlgorithmInput(
435450
glucoseHistory: glucose,
436-
doses: doses.map { $0.simpleDose(with: insulinModel(for: $0.insulinType)) },
451+
doses: dosesWithModel,
437452
carbEntries: carbEntries,
438453
predictionStart: baseTime,
439454
basal: basalWithOverrides,
@@ -446,7 +461,7 @@ final class LoopDataManager: ObservableObject {
446461
useIntegralRetrospectiveCorrection: UserDefaults.standard.integralRetrospectiveCorrectionEnabled,
447462
includePositiveVelocityAndRC: true,
448463
carbAbsorptionModel: carbAbsorptionModel,
449-
recommendationInsulinModel: insulinModel(for: deliveryDelegate?.pumpInsulinType ?? .novolog),
464+
recommendationInsulinModel: recommendationInsulinModel,
450465
recommendationType: .manualBolus,
451466
automaticBolusApplicationFactor: effectiveBolusApplicationFactor)
452467
}
@@ -1018,6 +1033,7 @@ extension StoredDataAlgorithmInput {
10181033
carbRatio: carbRatio,
10191034
algorithmEffectsOptions: effectsOptions,
10201035
useIntegralRetrospectiveCorrection: self.useIntegralRetrospectiveCorrection,
1036+
useMidAbsorptionISF: true,
10211037
carbAbsorptionModel: self.carbAbsorptionModel.model
10221038
)
10231039
return prediction.glucose

0 commit comments

Comments
 (0)