Autotune: calculate CR directly #644
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently autotune categorizes glucose deviations data into buckets based on what is impacting things the most: basals, carbs, or insulin. It uses the mealtime data to calculate CSF, the IOB-without-COB data to calculate ISF, and then the remainder to adjust basals. This works fairly well, but due to the fuzzy line between carb-dominated and insulin-dominated deviations after a meal, it tends to overestimate ISF. CR is calculated as ISF/CSF, so that tends to be overestimated as well.
As an alternative, this change calculates CR directly. To do so, we use the BG and IOB at the time of carb entry, the BG and IOB after COB==0 and IOB is back down to low level, the total amount of carbs given, and the total amount of insulin given over the meal period. After adjusting for the BG and IOB changes, that allows a direct calculation of carb ratio as total carbs / total insulin at mealtime.
Additionally, this change adds some more error checking around bad carb ratios (falling back to the pump profile carb ratio if needed), and avoids setting new ISF, CSF, or CRs unless the new ones are valid. These should help with the occasional situation where someone's autotune gets messed up and their rig stops looping just after midnight.