|
@@ -1,6 +1,7 @@
|
|
|
import 'package:fis_measure/interfaces/date_types/vector.dart';
|
|
|
import 'package:fis_measure/interfaces/process/calculators/values.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/terms.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/formulas/cardiac.dart';
|
|
|
import 'package:fis_measure/process/calcuators/formulas/urology.dart';
|
|
|
import 'package:fis_measure/process/primitives/combos/two_straightline.dart';
|
|
|
import 'package:fis_measure/process/primitives/straightline.dart';
|
|
@@ -176,3 +177,33 @@ class IvsThckCal extends Calculator<TwoStraightLine, double> {
|
|
|
return (ivss - ivsd) / ivsd * 100;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+abstract class EFCal extends Calculator<TwoStraightLine, double> {
|
|
|
+ EFCal(TwoStraightLine twoStraightLine) : super(twoStraightLine);
|
|
|
+
|
|
|
+ @override
|
|
|
+ void calculate() {
|
|
|
+ if (ref.feature == null) return;
|
|
|
+ double lvidd = pickChildFloatValue(ref.child1) ?? 0;
|
|
|
+ double lvids = pickChildFloatValue(ref.child2) ?? 0;
|
|
|
+ List<double> edvAndEsv = onCalculateEdvEsv(lvidd, lvids);
|
|
|
+ assert(edvAndEsv.length == 2, 'edvAndEsv.length == 2');
|
|
|
+ double edv = edvAndEsv[0];
|
|
|
+ double esv = edvAndEsv[1];
|
|
|
+ double ef = CardiacFormulas.ef(edv, esv);
|
|
|
+ updateFloatValue(ef, unit: VidUsUnit.percent, useRound: true);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<double> onCalculateEdvEsv(double lvidd, double lvids);
|
|
|
+}
|
|
|
+
|
|
|
+class EfTeichCal extends EFCal {
|
|
|
+ EfTeichCal(TwoStraightLine ref) : super(ref);
|
|
|
+
|
|
|
+ @override
|
|
|
+ List<double> onCalculateEdvEsv(double lvidd, double lvids) {
|
|
|
+ double edv = CardiacFormulas.edvTeichholz(lvidd);
|
|
|
+ double esv = CardiacFormulas.edvTeichholz(lvids);
|
|
|
+ return [edv, esv];
|
|
|
+ }
|
|
|
+}
|