calculateLowVariationAvg method

int calculateLowVariationAvg(
  1. List<int?> list,
  2. int avgHR
)

Implementation

int calculateLowVariationAvg(List<int?> list, int avgHR) {
  /*if(bpmList.length/correctionCount <2){
          //todo: remove
      }*/

  int minutes = (list.length / NO_OF_SAMPLES_PER_MINUTE).truncate();
  minutes *= 3;
  if (minutes == 0) return minutes;
  List<int?> minuteRanges = List.filled(minutes, null, growable: false);
  for (int interval = 0; interval < minutes; interval++) {
    int max = 0;
    int min = 0;
    int start = (interval * (NO_OF_SAMPLES_PER_MINUTE / 3)).truncate();
    int limit = ((1 + interval) * (NO_OF_SAMPLES_PER_MINUTE / 3)).truncate();
    for (int i = start; i < limit; i++) {
      int diff = avgHR - list[i]!;
      if (diff > 0) {
        if (max < diff) max = diff;
      } else {
        if (min > diff) min = diff;
      }
    }

    minuteRanges[interval] = (max).abs() + (min).abs();
  }

  int sum = 0;
  int count = 0;
  for (int i = 0; i < minuteRanges.length; i++) {
    if (minuteRanges[i]! < 30) {
      int start = (i * (NO_OF_SAMPLES_PER_MINUTE / 3)).truncate();
      int limit = (((1 + i) * (NO_OF_SAMPLES_PER_MINUTE / 3))).truncate();
      int divisor = 0;
      int value = 0;
      for (int j = start; j < limit - 1; j++) {
        if (list[i] != 0) {
          divisor++;
          value += list[i]!;
        }
      }
      if (divisor != 0) {
        value = (value / divisor).truncate();
        count++;
      }
      sum += value;
    }
  }
  if(!sum.isNaN && !count.isNaN) {
    sum = (sum / count).isNaN?0:(sum/count).truncate();
  } else {
    sum = 0;
  }

  return sum;
}