calculateNDecelerations method

void calculateNDecelerations()

Calculates the number of decelerations.

Implementation

void calculateNDecelerations() {
  List<MarkerIndices> decelerations = [];
  int size = millisecondsEpoch.length;

  MarkerIndices deceleration = MarkerIndices();
  int counter1 = 0, counter2 = 0, n = 0;
  //List<int> beatsBpm = new int[size];
  bool isDeacceleration = false;

  /*for (int j = 0; j < size; j++) {

          if (beats[j] != 0)
              beatsBpm[j] = SIXTY_THOUSAND_MS / (int) beats[j];
          else
              beatsBpm[j] = 0;
      }*/

  for (int i = 0; i < size; i++) {
    if ((millisecondsEpoch[i]! - baselineFHRDR![i]!) == 0) {
      if (isDeacceleration) {
        deceleration = MarkerIndices();
        deceleration.setFrom(((i - counter1) * factor).truncate());
        deceleration.setTo(((i) * factor).truncate());
        decelerations.add(deceleration);
      }
      counter1 = 0;
      isDeacceleration = false;
      continue;
    }
    /** first criteria **/
    if (SIXTY_THOUSAND_MS /
            (millisecondsEpoch[i]! - baselineFHRDR![i]!).truncate() >=
        10) {
      counter1++;
      if (counter1 >= 16 && !isDeacceleration) {
        // 60 seconds = 16 samples
        isDeacceleration = true;
        n++;
      }
    } else {
      if (isDeacceleration) {
        deceleration = MarkerIndices();
        deceleration.setFrom(((i - counter1) * factor).truncate());
        deceleration.setTo(((i) * factor).truncate());
        decelerations.add(deceleration);
      }
      counter1 = 0;
      isDeacceleration = false;
    }
  }

  isDeacceleration = false; //restore after first for loop

  for (int i = 0; i < size; i++) {
    if ((millisecondsEpoch[i]! - baselineFHRDR![i]!) == 0) {
      if (isDeacceleration) {
        deceleration = MarkerIndices();
        deceleration.setFrom(((i - counter2) * factor).truncate());
        deceleration.setTo(((i) * factor).truncate());
        decelerations.add(deceleration);
      }
      counter2 = 0;
      isDeacceleration = false;
      continue;
    }
    /** second criteria **/
    if (SIXTY_THOUSAND_MS / (millisecondsEpoch[i]! - baselineFHRDR![i]!) >= 20) {
      counter2++;
      if (counter2 >= 8 && counter2 < 16 && !isDeacceleration) {
        // 30 seconds = 8 samples
        isDeacceleration = true;
        n++;
      } else {
        if (isDeacceleration) {
          deceleration = MarkerIndices();
          deceleration.setFrom(((i - counter2) * factor).truncate());
          deceleration.setTo(((i) * factor).truncate());
          decelerations.add(deceleration);
        }
        counter2 = 0;
        isDeacceleration = false;
      }
    }
  }

  nDeaccelerations = n;
  nDecelerationList = decelerations;
  return;
}