wizard calculation to extra file
This commit is contained in:
parent
b7dfabbe11
commit
9f1bbd35bd
3 changed files with 118 additions and 49 deletions
|
@ -45,6 +45,7 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
|
||||||
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
|
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
|
||||||
import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal;
|
import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal;
|
||||||
import info.nightscout.client.data.NSProfile;
|
import info.nightscout.client.data.NSProfile;
|
||||||
|
import info.nightscout.utils.BolusWizard;
|
||||||
import info.nightscout.utils.DateUtil;
|
import info.nightscout.utils.DateUtil;
|
||||||
import info.nightscout.utils.DecimalFormatter;
|
import info.nightscout.utils.DecimalFormatter;
|
||||||
import info.nightscout.utils.PlusMinusEditText;
|
import info.nightscout.utils.PlusMinusEditText;
|
||||||
|
@ -356,59 +357,32 @@ public class WizardDialog extends DialogFragment implements OnClickListener {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c_bg = bgCheckbox.isChecked() ? c_bg : 0d;
|
||||||
|
|
||||||
// Insulin from BG
|
BolusWizard wizard = new BolusWizard();
|
||||||
Double sens = profile.getIsf(specificProfile, NSProfile.secondsFromMidnight());
|
wizard.doCalc(specificProfile, carbsAfterConstraint, c_bg, corrAfterConstraint, bolusIobCheckbox.isChecked(), basalIobCheckbox.isChecked());
|
||||||
Double targetBGLow = profile.getTargetLow(specificProfile, NSProfile.secondsFromMidnight());
|
|
||||||
Double targetBGHigh = profile.getTargetHigh(specificProfile, NSProfile.secondsFromMidnight());
|
|
||||||
Double bgDiff;
|
|
||||||
if (c_bg <= targetBGLow) {
|
|
||||||
bgDiff = c_bg - targetBGLow;
|
|
||||||
} else {
|
|
||||||
bgDiff = c_bg - targetBGHigh;
|
|
||||||
}
|
|
||||||
Double insulinFromBG = (bgCheckbox.isChecked() && c_bg != 0d) ? bgDiff / sens : 0d;
|
|
||||||
bg.setText(c_bg + " ISF: " + DecimalFormatter.to0Decimal(sens));
|
|
||||||
bgInsulin.setText(DecimalFormatter.to2Decimal(insulinFromBG) + "U");
|
|
||||||
|
|
||||||
// Insuling from carbs
|
bg.setText(c_bg + " ISF: " + DecimalFormatter.to0Decimal(wizard.sens));
|
||||||
Double ic = profile.getIc(specificProfile, NSProfile.secondsFromMidnight());
|
bgInsulin.setText(DecimalFormatter.to2Decimal(wizard.insulinFromBG) + "U");
|
||||||
Double insulinFromCarbs = c_carbs / ic;
|
|
||||||
carbs.setText(DecimalFormatter.to0Decimal(c_carbs) + "g IC: " + DecimalFormatter.to0Decimal(ic));
|
|
||||||
carbsInsulin.setText(DecimalFormatter.to2Decimal(insulinFromCarbs) + "U");
|
|
||||||
|
|
||||||
// Insulin from IOB
|
carbs.setText(DecimalFormatter.to0Decimal(c_carbs) + "g IC: " + DecimalFormatter.to0Decimal(wizard.ic));
|
||||||
TreatmentsInterface treatments = MainApp.getConfigBuilder().getActiveTreatments();
|
carbsInsulin.setText(DecimalFormatter.to2Decimal(wizard.insulinFromCarbs) + "U");
|
||||||
TempBasalsInterface tempBasals = MainApp.getConfigBuilder().getActiveTempBasals();
|
|
||||||
treatments.updateTotalIOB();
|
|
||||||
tempBasals.updateTotalIOB();
|
|
||||||
IobTotal bolusIob = treatments.getLastCalculation();
|
|
||||||
IobTotal basalIob = tempBasals.getLastCalculation();
|
|
||||||
|
|
||||||
Double insulingFromBolusIOB = bolusIobCheckbox.isChecked() ? -bolusIob.iob : 0d;
|
bolusIobInsulin.setText(DecimalFormatter.to2Decimal(wizard.insulingFromBolusIOB) + "U");
|
||||||
Double insulingFromBasalsIOB = basalIobCheckbox.isChecked() ? -basalIob.basaliob : 0d;
|
basalIobInsulin.setText(DecimalFormatter.to2Decimal(wizard.insulingFromBasalsIOB) + "U");
|
||||||
bolusIobInsulin.setText(DecimalFormatter.to2Decimal(insulingFromBolusIOB) + "U");
|
|
||||||
basalIobInsulin.setText(DecimalFormatter.to2Decimal(insulingFromBasalsIOB) + "U");
|
|
||||||
|
|
||||||
// Insulin from correction
|
correctionInsulin.setText(DecimalFormatter.to2Decimal(wizard.insulinFromCorrection) + "U");
|
||||||
Double insulinFromCorrection = corrAfterConstraint;
|
|
||||||
correctionInsulin.setText(DecimalFormatter.to2Decimal(insulinFromCorrection) + "U");
|
|
||||||
|
|
||||||
// Total
|
|
||||||
calculatedTotalInsulin = insulinFromBG + insulinFromCarbs + insulingFromBolusIOB + insulingFromBasalsIOB + insulinFromCorrection;
|
|
||||||
|
|
||||||
if (calculatedTotalInsulin < 0) {
|
if (calculatedTotalInsulin < 0) {
|
||||||
Double carbsEquivalent = -calculatedTotalInsulin * ic;
|
total.setText(getString(R.string.missing) + " " + DecimalFormatter.to0Decimal(wizard.carbsEquivalent) + "g");
|
||||||
total.setText(getString(R.string.missing) + " " + DecimalFormatter.to0Decimal(carbsEquivalent) + "g");
|
|
||||||
calculatedTotalInsulin = 0d;
|
|
||||||
totalInsulin.setText("");
|
totalInsulin.setText("");
|
||||||
} else {
|
} else {
|
||||||
calculatedTotalInsulin = Round.roundTo(calculatedTotalInsulin, 0.05d);
|
|
||||||
total.setText("");
|
total.setText("");
|
||||||
totalInsulin.setText(DecimalFormatter.to2Decimal(calculatedTotalInsulin) + "U");
|
totalInsulin.setText(DecimalFormatter.to2Decimal(calculatedTotalInsulin) + "U");
|
||||||
}
|
}
|
||||||
|
|
||||||
calculatedCarbs = c_carbs;
|
calculatedCarbs = carbsAfterConstraint;
|
||||||
|
calculatedTotalInsulin = wizard.calculatedTotalInsulin;
|
||||||
|
|
||||||
if (calculatedTotalInsulin > 0d || calculatedCarbs > 0d) {
|
if (calculatedTotalInsulin > 0d || calculatedCarbs > 0d) {
|
||||||
String insulinText = calculatedTotalInsulin > 0d ? (DecimalFormatter.to2Decimal(calculatedTotalInsulin) + "U") : "";
|
String insulinText = calculatedTotalInsulin > 0d ? (DecimalFormatter.to2Decimal(calculatedTotalInsulin) + "U") : "";
|
||||||
|
@ -423,18 +397,18 @@ public class WizardDialog extends DialogFragment implements OnClickListener {
|
||||||
try {
|
try {
|
||||||
boluscalcJSON.put("profile", selectedAlternativeProfile);
|
boluscalcJSON.put("profile", selectedAlternativeProfile);
|
||||||
boluscalcJSON.put("eventTime", DateUtil.toISOString(new Date()));
|
boluscalcJSON.put("eventTime", DateUtil.toISOString(new Date()));
|
||||||
boluscalcJSON.put("targetBGLow", targetBGLow);
|
boluscalcJSON.put("targetBGLow", wizard.targetBGLow);
|
||||||
boluscalcJSON.put("targetBGHigh", targetBGHigh);
|
boluscalcJSON.put("targetBGHigh", wizard.targetBGHigh);
|
||||||
boluscalcJSON.put("isf", sens);
|
boluscalcJSON.put("isf", wizard.sens);
|
||||||
boluscalcJSON.put("ic", ic);
|
boluscalcJSON.put("ic", wizard.ic);
|
||||||
boluscalcJSON.put("iob", -(insulingFromBolusIOB + insulingFromBasalsIOB));
|
boluscalcJSON.put("iob", -(wizard.insulingFromBolusIOB + wizard.insulingFromBasalsIOB));
|
||||||
boluscalcJSON.put("bolusiobused", bolusIobCheckbox.isChecked());
|
boluscalcJSON.put("bolusiobused", bolusIobCheckbox.isChecked());
|
||||||
boluscalcJSON.put("basaliobused", basalIobCheckbox.isChecked());
|
boluscalcJSON.put("basaliobused", basalIobCheckbox.isChecked());
|
||||||
boluscalcJSON.put("bg", c_bg);
|
boluscalcJSON.put("bg", c_bg);
|
||||||
boluscalcJSON.put("insulinbg", insulinFromBG);
|
boluscalcJSON.put("insulinbg", wizard.insulinFromBG);
|
||||||
boluscalcJSON.put("insulinbgused", bgCheckbox.isChecked());
|
boluscalcJSON.put("insulinbgused", bgCheckbox.isChecked());
|
||||||
boluscalcJSON.put("bgdiff", bgDiff);
|
boluscalcJSON.put("bgdiff", wizard.bgDiff);
|
||||||
boluscalcJSON.put("insulincarbs", insulinFromCarbs);
|
boluscalcJSON.put("insulincarbs", wizard.insulinFromCarbs);
|
||||||
boluscalcJSON.put("carbs", c_carbs);
|
boluscalcJSON.put("carbs", c_carbs);
|
||||||
boluscalcJSON.put("othercorrection", corrAfterConstraint);
|
boluscalcJSON.put("othercorrection", corrAfterConstraint);
|
||||||
boluscalcJSON.put("insulin", calculatedTotalInsulin);
|
boluscalcJSON.put("insulin", calculatedTotalInsulin);
|
||||||
|
|
95
app/src/main/java/info/nightscout/utils/BolusWizard.java
Normal file
95
app/src/main/java/info/nightscout/utils/BolusWizard.java
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
package info.nightscout.utils;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.interfaces.TempBasalsInterface;
|
||||||
|
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
|
||||||
|
import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal;
|
||||||
|
import info.nightscout.client.data.NSProfile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by mike on 11.10.2016.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BolusWizard {
|
||||||
|
// Inputs
|
||||||
|
JSONObject specificProfile = null;
|
||||||
|
Integer carbs = 0;
|
||||||
|
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;
|
||||||
|
|
||||||
|
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
TreatmentsInterface treatments = MainApp.getConfigBuilder().getActiveTreatments();
|
||||||
|
TempBasalsInterface tempBasals = MainApp.getConfigBuilder().getActiveTempBasals();
|
||||||
|
treatments.updateTotalIOB();
|
||||||
|
tempBasals.updateTotalIOB();
|
||||||
|
bolusIob = treatments.getLastCalculation();
|
||||||
|
basalIob = tempBasals.getLastCalculation();
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,7 +5,7 @@ buildscript {
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.2.0'
|
classpath 'com.android.tools.build:gradle:2.2.1'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
|
Loading…
Reference in a new issue