getCycleRegularityScore method

Future<double> getCycleRegularityScore()

Calculate cycle regularity score

Implementation

Future<double> getCycleRegularityScore() async {
  List<int> cycleLengths = [];
  List<PeriodsDateRange> allPeriodRange = await getAllPeriodsDetails();

  if (allPeriodRange.length > 1) {
    for (int i = 1; i < allPeriodRange.length; i++) {
      // printMenstrualCycleLogs("Len: ${allPeriodRange[i].cycleLength!}");
      cycleLengths.add(allPeriodRange[i].cycleLength!);
    }
  }

  if (cycleLengths.isNotEmpty) {
    //Calculate Average Cycle Length (ACL)
    double avgCycleLength = _average(cycleLengths);
    //  Calculate Standard Deviation (SD)
    double standardDeviation = _stdDev(cycleLengths, avgCycleLength);
    //  Calculate Cycle Regularity Score (CRS)
    double crs = 100 - ((standardDeviation / avgCycleLength) * 100);
    // Ensure CRS is in the range of 0 to 100
    return crs.clamp(0, 100);
  }
  return 0.0;
}