use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class ReadingDataTest method testCalculateSmoothDataAllValues.
@Test
public void testCalculateSmoothDataAllValues() {
// Having a normal reading data. All data exists (due to further readings).
// No errors.
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
int[] times = { 0, 2, 4, 6, 7, 12, 15 };
int[] data = { 200, 220, 240, 260, 270, 320, 350 };
for (int i = 0; i < times.length; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 - times[i];
readingData.trend.get(i).glucoseLevelRaw = data[i];
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// for LibreTrendPoint add data to fill the gap.
times = new int[] { 1, 3, 5, 8, 9, 10, 11, 13, 14, 16 };
data = new int[] { 210, 230, 250, 280, 290, 300, 310, 330, 340, 360 };
for (int i = 0; i < times.length; i++) {
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
for (int i = 0; i < 20; i++) System.err.println(1000 - i + " " + libreTrendPoints.get(1000 - i).rawSensorValue);
readingData.calculateSmoothDataImproved(libreTrendPoints);
assertWithMessage("First 5 values should be used").that(readingData.trend.get(0).glucoseLevelRawSmoothed).isEqualTo((200 + 210 + 220 + 230 + 240) / 5);
assertWithMessage("First 5 values should be used (point 2)").that(readingData.trend.get(1).glucoseLevelRawSmoothed).isEqualTo((220 + 230 + 240 + 250 + 260) / 5);
assertWithMessage("First 5 values should be used (point 4)").that(readingData.trend.get(2).glucoseLevelRawSmoothed).isEqualTo((240 + 250 + 260 + 270 + 280) / 5);
assertWithMessage("First 5 values should be used (point 6)").that(readingData.trend.get(3).glucoseLevelRawSmoothed).isEqualTo((260 + 270 + 280 + 290 + 300) / 5);
assertWithMessage("First 5 values should be used (point 7)").that(readingData.trend.get(4).glucoseLevelRawSmoothed).isEqualTo((270 + 280 + 290 + 300 + 310) / 5);
assertWithMessage("First 5 values should be used (point 12)").that(readingData.trend.get(5).glucoseLevelRawSmoothed).isEqualTo((320 + 330 + 340 + 350 + 360) / 5);
assertWithMessage("First 5 values should be used (point 15)").that(readingData.trend.get(6).glucoseLevelRawSmoothed).isEqualTo((350 + 360) / 2);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class ReadingDataTest method testClearTrendTwoErrors.
@Test
public void testClearTrendTwoErrors() {
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
// Create a list of 10 points.
for (int i = 0; i < 10; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 + i;
libreTrendPoints.get((int) readingData.trend.get(i).sensorTime).rawSensorValue = 220;
}
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000, 1230, 800, GlucoseData.DataSource.FRAM);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
libreTrendPoint = new LibreTrendPoint(1003, 1230, 0x700, GlucoseData.DataSource.FRAM);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
libreTrendPoint = new LibreTrendPoint(1005, 1230, 0x700, GlucoseData.DataSource.FRAM);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
readingData.ClearErrors(libreTrendPoints);
assertWithMessage("4 objects should remain.").that(readingData.trend.size()).isEqualTo(4);
// object #4 is bad, so last goog object is 3.
assertWithMessage("span serialize reformed matches").that(readingData.trend.get(2).sensorTime).isEqualTo(1002);
// Next good object is 1009 (1005-1008 were removed)
assertWithMessage("span serialize reformed matches").that(readingData.trend.get(3).sensorTime).isEqualTo(1009);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class ReadingDataTest method testClearTrendErrorOnOtherPoint.
@Test
public void testClearTrendErrorOnOtherPoint() {
// A very simple case, we only have one reading containing sparsed data.
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
int[] times = { 0, 2, 4, 6, 7, 12, 15 };
int[] data = { 200, 210, 222, 230, 240, 250, 260 };
for (int i = 0; i < times.length; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 - times[i];
readingData.trend.get(i).glucoseLevelRaw = data[i];
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// Add a point with an error at 995. It should cause points '2', '4'
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(995, 0, 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
readingData.ClearErrors(libreTrendPoints);
assertWithMessage("5 objects should remain.").that(readingData.trend.size()).isEqualTo(5);
assertThat(readingData.trend.get(0).sensorTime).isEqualTo(1000);
assertThat(readingData.trend.get(1).sensorTime).isEqualTo(994);
assertThat(readingData.trend.get(2).sensorTime).isEqualTo(993);
assertThat(readingData.trend.get(3).sensorTime).isEqualTo(988);
assertThat(readingData.trend.get(4).sensorTime).isEqualTo(985);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class LibreTrendUtil method get.
@Override
public LibreTrendPoint get(int index) {
LibreTrendPoint v = super.get(index);
if (v == null) {
v = new LibreTrendPoint();
super.set(index, v);
}
return v;
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class LibreTrendUtil method getData.
public List<LibreTrendPoint> getData(long startTimestamp, long endTimestamp, boolean calculate_factor) {
Log.i(TAG, "getData called startTimestamp = " + JoH.dateTimeText(startTimestamp) + " endTimestamp = " + JoH.dateTimeText(endTimestamp) + " Size of array is " + m_points.size() + " this = " + this + " m_libreTrendLatest.timestamp " + JoH.dateTimeText(m_libreTrendLatest.timestamp));
long startTime = Math.max(startTimestamp, m_libreTrendLatest.timestamp);
// The extra 1 is to make sure we don't read the last packet again and again.
List<LibreBlock> latestBlocks = LibreBlock.getForTrend(startTime + 1, endTimestamp);
Log.i(TAG, "Size of latestBlocks is " + latestBlocks.size());
if (latestBlocks.size() > 0) {
Log.i(TAG, "Last packet timestamp is " + latestBlocks.get(latestBlocks.size() - 1).timestamp);
}
if (calculate_factor) {
CalculateFactor(latestBlocks);
}
// Go over all blocks from the earlier to the latest, and fill the data.
for (LibreBlock libreBlock : latestBlocks) {
AddLibreblock(libreBlock);
}
if (debug_per_minute) {
Log.i(TAG, "Here are the points that we have");
for (int i = 0; i < MAX_POINTS; i++) {
if (m_points.get(i).rawSensorValue != 0) {
if (i != m_points.get(i).sensorTime) {
Log.i(TAG, "Error in index i = " + i + " sensorTime = " + m_points.get(i).sensorTime);
}
// Only print last 60 minutes.
if (m_libreTrendLatest.id - i < 60) {
Log.i(TAG, "" + i + " " + m_points.get(i).rawSensorValue);
}
}
}
}
return m_points;
}
Aggregations