AndroidAPS/app/src/main/java/info/nightscout/utils/BolusWizard.java

102 lines
3.4 KiB
Java
Raw Normal View History

2016-10-11 22:47:48 +02:00
package info.nightscout.utils;
import org.json.JSONObject;
2017-02-23 20:00:33 +01:00
import java.util.Date;
2016-10-11 22:47:48 +02:00
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.interfaces.TempBasalsInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
2017-01-04 22:33:17 +01:00
import info.nightscout.androidaps.data.IobTotal;
2017-02-23 20:00:33 +01:00
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
2017-02-17 13:18:36 +01:00
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
2016-10-11 22:47:48 +02:00
/**
* Created by mike on 11.10.2016.
*/
public class BolusWizard {
// Inputs
JSONObject specificProfile = null;
2017-02-10 06:07:31 +01:00
public Integer carbs = 0;
2016-10-11 22:47:48 +02:00
Double bg = 0d;
Double correction;
Boolean includeBolusIOB = true;
Boolean includeBasalIOB = true;
// Intermediate
public Double sens = 0d;
public Double ic = 0d;
public Double targetBGLow = 0d;
public Double targetBGHigh = 0d;
public Double bgDiff = 0d;
IobTotal bolusIob;
IobTotal basalIob;
public Double insulinFromBG = 0d;
public Double insulinFromCarbs = 0d;
public Double insulingFromBolusIOB = 0d;
public Double insulingFromBasalsIOB = 0d;
public Double insulinFromCorrection = 0d;
// Result
public Double calculatedTotalInsulin = 0d;
public Double carbsEquivalent = 0d;
public Double doCalc(JSONObject specificProfile, Integer carbs, Double bg, Double correction, Boolean includeBolusIOB, Boolean includeBasalIOB) {
this.specificProfile = specificProfile;
this.carbs = carbs;
this.bg = bg;
this.correction = correction;
2017-02-23 20:00:33 +01:00
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile();
2016-10-11 22:47:48 +02:00
// Insulin from BG
sens = profile.getIsf(specificProfile, NSProfile.secondsFromMidnight());
targetBGLow = profile.getTargetLow(specificProfile, NSProfile.secondsFromMidnight());
targetBGHigh = profile.getTargetHigh(specificProfile, NSProfile.secondsFromMidnight());
if (bg <= targetBGLow) {
bgDiff = bg - targetBGLow;
} else {
bgDiff = bg - targetBGHigh;
}
insulinFromBG = bg != 0d ? bgDiff / sens : 0d;
// Insuling from carbs
ic = profile.getIc(specificProfile, NSProfile.secondsFromMidnight());
insulinFromCarbs = carbs / ic;
// Insulin from IOB
2017-02-23 20:00:33 +01:00
// IOB calculation
TreatmentsInterface treatments = ConfigBuilderPlugin.getActiveTreatments();
2016-10-11 22:47:48 +02:00
treatments.updateTotalIOB();
2017-02-23 20:00:33 +01:00
IobTotal bolusIob = treatments.getLastCalculation();
TempBasalsInterface tempBasals = ConfigBuilderPlugin.getActiveTempBasals();
IobTotal basalIob = new IobTotal(new Date().getTime());
if (tempBasals != null) {
tempBasals.updateTotalIOB();
basalIob = tempBasals.getLastCalculation().round();
}
2016-10-11 22:47:48 +02:00
insulingFromBolusIOB = includeBolusIOB ? -bolusIob.iob : 0d;
insulingFromBasalsIOB = includeBasalIOB ? -basalIob.basaliob : 0d;
// Insulin from correction
insulinFromCorrection = correction;
// Total
calculatedTotalInsulin = insulinFromBG + insulinFromCarbs + insulingFromBolusIOB + insulingFromBasalsIOB + insulinFromCorrection;
if (calculatedTotalInsulin < 0) {
carbsEquivalent = -calculatedTotalInsulin * ic;
calculatedTotalInsulin = 0d;
}
calculatedTotalInsulin = Round.roundTo(calculatedTotalInsulin, 0.05d);
return calculatedTotalInsulin;
}
}