heart_rate.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import 'package:fis_measure/interfaces/process/items/terms.dart';
  2. import 'package:fis_measure/process/primitives/single_straightline.dart';
  3. import 'calculator.dart';
  4. class HeartRateCal extends Calculator<SingleStraightLine, double> {
  5. HeartRateCal(SingleStraightLine ref) : super(ref);
  6. @override
  7. void calculate() {
  8. if (ref.feature == null) return;
  9. if (ref.feature!.innerPoints.length < 2) return;
  10. final feature = ref.feature! as StraightLineHeartRateFeature;
  11. if (feature.startPoint == feature.endPoint) return;
  12. final heartCycle = feature.heartCycle;
  13. final viewport = feature.hostVisualArea!.viewport!;
  14. final p1 = feature.startPoint;
  15. final p2 = feature.endPoint;
  16. final pp1 = viewport.convert(p1);
  17. final pp2 = viewport.convert(p2);
  18. final time = (pp2.x - pp1.x).abs();
  19. double hr = (heartCycle / time) * 60;
  20. if (time == 0) hr = 0;
  21. for (var output in ref.meta.outputs) {
  22. if (output.name == MeasureTerms.HeartRate) {
  23. feature.updateFloatValue(output, hr, output.unit);
  24. } else if (output.name == "Heart Cycle") {
  25. feature.updateFloatValue(output, heartCycle.toDouble(), output.unit);
  26. } else if (output.name == MeasureTerms.Timespan) {
  27. feature.updateFloatValue(output, time, output.unit);
  28. }
  29. }
  30. }
  31. }