getCycleRegularityScore method
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;
}