|
@@ -1,23 +1,70 @@
|
|
|
import 'package:fis_measure/configs/cardiac.dart';
|
|
|
import 'package:fis_measure/configs/patient.dart';
|
|
|
import 'package:fis_measure/interfaces/enums/calcuator.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/items/item.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/terms.dart';
|
|
|
-import 'package:fis_measure/process/primitives/combos/straightline_group.dart';
|
|
|
+import 'package:fis_measure/process/items/top_item.dart';
|
|
|
+import 'package:fis_measure/process/primitives/combos/lv_study.dart';
|
|
|
+import 'package:fis_measure/process/primitives/combos/two_straightline.dart';
|
|
|
import 'package:fis_measure/process/primitives/straightline.dart';
|
|
|
+import 'package:flutter/foundation.dart';
|
|
|
import 'package:vid/us/vid_us_unit.dart';
|
|
|
import 'dart:math' as math;
|
|
|
|
|
|
import 'calculator.dart';
|
|
|
import 'formulas/cardiac.dart';
|
|
|
|
|
|
-class LvStudyDistanceGroupCal extends Calculator<StraightLineGroup, double> {
|
|
|
+class LvStudySimpleCal extends LvStudyCalculatorBase<LvStudy> {
|
|
|
+ late final StraightLine kidLVIDd;
|
|
|
+ late final StraightLine kidLVIDs;
|
|
|
+
|
|
|
+ LvStudySimpleCal(super.ref) {
|
|
|
+ kidLVIDd = ref.findChildByName("L1") as StraightLine;
|
|
|
+ kidLVIDs = ref.findChildByName("L2") as StraightLine;
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ void calculate() {
|
|
|
+ if (ref.feature == null) return;
|
|
|
+
|
|
|
+ final feature = ref.feature!;
|
|
|
+
|
|
|
+ v = _ValTemp();
|
|
|
+ v.lvidd = pickChildFloatValue(kidLVIDd);
|
|
|
+ v.lvids = pickChildFloatValue(kidLVIDs);
|
|
|
+
|
|
|
+ for (var output in ref.meta.outputs) {
|
|
|
+ switch (output.name) {
|
|
|
+ case MeasureTerms.LvStudySimple:
|
|
|
+ feature.updateStringValue(output, "");
|
|
|
+ break;
|
|
|
+ case MeasureTerms.LVEDV:
|
|
|
+ updateLVEDV();
|
|
|
+ break;
|
|
|
+ case MeasureTerms.LVESV:
|
|
|
+ updateLVESV();
|
|
|
+ break;
|
|
|
+ case MeasureTerms.SV:
|
|
|
+ updateSV();
|
|
|
+ break;
|
|
|
+ case MeasureTerms.EF:
|
|
|
+ updateEF();
|
|
|
+ break;
|
|
|
+ case MeasureTerms.FS:
|
|
|
+ updatePercentFS();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class LvStudyDistanceGroupCal extends LvStudyCalculatorBase<LvStudy> {
|
|
|
late final StraightLine kidIVSd;
|
|
|
late final StraightLine kidLVIDd;
|
|
|
late final StraightLine kidLVPWd;
|
|
|
late final StraightLine kidIVSs;
|
|
|
late final StraightLine kidLVIDs;
|
|
|
late final StraightLine kidLVPWs;
|
|
|
- late _ValTemp _v;
|
|
|
|
|
|
LvStudyDistanceGroupCal(super.ref) {
|
|
|
kidIVSd = ref.findChildByName(MeasureTerms.IVSd) as StraightLine;
|
|
@@ -34,13 +81,13 @@ class LvStudyDistanceGroupCal extends Calculator<StraightLineGroup, double> {
|
|
|
|
|
|
final feature = ref.feature!;
|
|
|
|
|
|
- _v = _ValTemp();
|
|
|
- _v.ivsd = pickChildFloatValue(kidIVSd);
|
|
|
- _v.ivss = pickChildFloatValue(kidIVSs);
|
|
|
- _v.lvidd = pickChildFloatValue(kidLVIDd);
|
|
|
- _v.lvids = pickChildFloatValue(kidLVIDs);
|
|
|
- _v.lvpwd = pickChildFloatValue(kidLVPWd);
|
|
|
- _v.lvpws = pickChildFloatValue(kidLVPWs);
|
|
|
+ v = _ValTemp();
|
|
|
+ v.ivsd = pickChildFloatValue(kidIVSd);
|
|
|
+ v.ivss = pickChildFloatValue(kidIVSs);
|
|
|
+ v.lvidd = pickChildFloatValue(kidLVIDd);
|
|
|
+ v.lvids = pickChildFloatValue(kidLVIDs);
|
|
|
+ v.lvpwd = pickChildFloatValue(kidLVPWd);
|
|
|
+ v.lvpws = pickChildFloatValue(kidLVPWs);
|
|
|
|
|
|
for (var output in ref.meta.outputs) {
|
|
|
switch (output.name) {
|
|
@@ -48,47 +95,61 @@ class LvStudyDistanceGroupCal extends Calculator<StraightLineGroup, double> {
|
|
|
feature.updateStringValue(output, "");
|
|
|
break;
|
|
|
case MeasureTerms.LVEDV:
|
|
|
- _updateLVEDV();
|
|
|
+ updateLVEDV();
|
|
|
break;
|
|
|
case MeasureTerms.LVESV:
|
|
|
- _updateLVESV();
|
|
|
+ updateLVESV();
|
|
|
break;
|
|
|
case MeasureTerms.LVdMass:
|
|
|
- _updateLVdMass();
|
|
|
+ updateLVdMass();
|
|
|
break;
|
|
|
case MeasureTerms.PercentIVS:
|
|
|
- _updatePercentIVS();
|
|
|
+ updatePercentIVS();
|
|
|
break;
|
|
|
case MeasureTerms.SV:
|
|
|
- _updateSV();
|
|
|
+ updateSV();
|
|
|
break;
|
|
|
case MeasureTerms.EF:
|
|
|
- _updateEF();
|
|
|
+ updateEF();
|
|
|
break;
|
|
|
case MeasureTerms.FS:
|
|
|
- _updatePercentFS();
|
|
|
+ updatePercentFS();
|
|
|
break;
|
|
|
case MeasureTerms.PercentLVPW:
|
|
|
- _updatePercentLVPW();
|
|
|
+ updatePercentLVPW();
|
|
|
break;
|
|
|
case MeasureTerms.CO:
|
|
|
- _updateCO();
|
|
|
+ updateCO();
|
|
|
break;
|
|
|
case MeasureTerms.CI:
|
|
|
- _updateCI();
|
|
|
+ updateCI();
|
|
|
break;
|
|
|
case MeasureTerms.SI:
|
|
|
- _updateSI();
|
|
|
+ updateSI();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+class LvStudyCalculatorBase<T extends TopMeasureItem>
|
|
|
+ extends Calculator<T, double> {
|
|
|
+ LvStudyCalculatorBase(super.ref);
|
|
|
+
|
|
|
+ @protected
|
|
|
+ late _ValTemp v;
|
|
|
+
|
|
|
+ @override
|
|
|
+ void calculate() {
|
|
|
+ // TODO: implement calculate
|
|
|
+ }
|
|
|
|
|
|
- void _updateLVEDV() {
|
|
|
- if (_v.lvidd == null) {
|
|
|
+ @protected
|
|
|
+ void updateLVEDV() {
|
|
|
+ if (v.lvidd == null) {
|
|
|
return;
|
|
|
}
|
|
|
- final lvidd = _v.lvidd!;
|
|
|
+ final lvidd = v.lvidd!;
|
|
|
|
|
|
double value = 0;
|
|
|
if (GlobalCardiacConfigs.EDVFormulaMode ==
|
|
@@ -98,15 +159,16 @@ class LvStudyDistanceGroupCal extends Calculator<StraightLineGroup, double> {
|
|
|
CardiacEDVFormulaMode.cube) {
|
|
|
value = CardiacFormulas.edvCube(lvidd);
|
|
|
}
|
|
|
- _updateFloatValueByName(MeasureTerms.LVEDV, value, unit: VidUsUnit.cm3);
|
|
|
- _v.lvedv = value;
|
|
|
+ updateFloatValueByName(MeasureTerms.LVEDV, value, unit: VidUsUnit.cm3);
|
|
|
+ v.lvedv = value;
|
|
|
}
|
|
|
|
|
|
- void _updateLVESV() {
|
|
|
- if (_v.lvids == null) {
|
|
|
+ @protected
|
|
|
+ void updateLVESV() {
|
|
|
+ if (v.lvids == null) {
|
|
|
return;
|
|
|
}
|
|
|
- final lvids = _v.lvids!;
|
|
|
+ final lvids = v.lvids!;
|
|
|
|
|
|
double value = 0;
|
|
|
if (GlobalCardiacConfigs.EDVFormulaMode ==
|
|
@@ -116,97 +178,107 @@ class LvStudyDistanceGroupCal extends Calculator<StraightLineGroup, double> {
|
|
|
CardiacEDVFormulaMode.cube) {
|
|
|
value = CardiacFormulas.esvCube(lvids);
|
|
|
}
|
|
|
- _updateFloatValueByName(MeasureTerms.LVESV, value, unit: VidUsUnit.cm3);
|
|
|
- _v.lvesv = value;
|
|
|
+ updateFloatValueByName(MeasureTerms.LVESV, value, unit: VidUsUnit.cm3);
|
|
|
+ v.lvesv = value;
|
|
|
}
|
|
|
|
|
|
- void _updateLVdMass() {
|
|
|
- if (_v.ivsd == null || _v.lvidd == null || _v.lvpwd == null) {
|
|
|
+ @protected
|
|
|
+ void updateLVdMass() {
|
|
|
+ if (v.ivsd == null || v.lvidd == null || v.lvpwd == null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- double value = CardiacFormulas.lvdMass(_v.ivsd!, _v.lvidd!, _v.lvpwd!);
|
|
|
- _updateFloatValueByName(MeasureTerms.LVdMass, value, unit: VidUsUnit.kg);
|
|
|
+ double value = CardiacFormulas.lvdMass(v.ivsd!, v.lvidd!, v.lvpwd!);
|
|
|
+ updateFloatValueByName(MeasureTerms.LVdMass, value, unit: VidUsUnit.kg);
|
|
|
}
|
|
|
|
|
|
- void _updatePercentIVS() {
|
|
|
- if (_v.ivsd == null || _v.ivss == null) {
|
|
|
+ @protected
|
|
|
+ void updatePercentIVS() {
|
|
|
+ if (v.ivsd == null || v.ivss == null) {
|
|
|
return;
|
|
|
}
|
|
|
- double value = CardiacFormulas.ivsPercent(_v.ivss!, _v.ivsd!);
|
|
|
- _updateFloatValueByName(MeasureTerms.PercentIVS, value);
|
|
|
+ double value = CardiacFormulas.ivsPercent(v.ivss!, v.ivsd!);
|
|
|
+ updateFloatValueByName(MeasureTerms.PercentIVS, value);
|
|
|
}
|
|
|
|
|
|
- void _updateSV() {
|
|
|
- if (_v.lvedv == null || _v.lvesv == null) {
|
|
|
+ @protected
|
|
|
+ void updateSV() {
|
|
|
+ if (v.lvedv == null || v.lvesv == null) {
|
|
|
return;
|
|
|
}
|
|
|
- final edv = _v.lvedv!;
|
|
|
- final esv = _v.lvesv!;
|
|
|
+ final edv = v.lvedv!;
|
|
|
+ final esv = v.lvesv!;
|
|
|
double value = CardiacFormulas.sv(edv, esv);
|
|
|
- _updateFloatValueByName(MeasureTerms.SV, value, unit: VidUsUnit.cm3);
|
|
|
- _v.sv = value;
|
|
|
+ updateFloatValueByName(MeasureTerms.SV, value, unit: VidUsUnit.cm3);
|
|
|
+ v.sv = value;
|
|
|
}
|
|
|
|
|
|
- void _updateEF() {
|
|
|
- if (_v.lvedv == null || _v.lvesv == null) {
|
|
|
+ @protected
|
|
|
+ void updateEF() {
|
|
|
+ if (v.lvedv == null || v.lvesv == null) {
|
|
|
return;
|
|
|
}
|
|
|
- final edv = _v.lvedv!;
|
|
|
- final esv = _v.lvesv!;
|
|
|
+ final edv = v.lvedv!;
|
|
|
+ final esv = v.lvesv!;
|
|
|
double value = CardiacFormulas.ef(edv, esv);
|
|
|
- _updateFloatValueByName(MeasureTerms.EF, value);
|
|
|
+ updateFloatValueByName(MeasureTerms.EF, value);
|
|
|
}
|
|
|
|
|
|
- void _updatePercentFS() {
|
|
|
- if (_v.lvidd == null || _v.lvids == null) {
|
|
|
+ @protected
|
|
|
+ void updatePercentFS() {
|
|
|
+ if (v.lvidd == null || v.lvids == null) {
|
|
|
return;
|
|
|
}
|
|
|
- final lvidd = _v.lvidd!;
|
|
|
- final lvids = _v.lvids!;
|
|
|
+ final lvidd = v.lvidd!;
|
|
|
+ final lvids = v.lvids!;
|
|
|
double value = CardiacFormulas.fsPercent(lvidd, lvids);
|
|
|
- _updateFloatValueByName(MeasureTerms.FS, value);
|
|
|
+ updateFloatValueByName(MeasureTerms.FS, value);
|
|
|
}
|
|
|
|
|
|
- void _updatePercentLVPW() {
|
|
|
- if (_v.lvpws == null || _v.lvpwd == null) {
|
|
|
+ @protected
|
|
|
+ void updatePercentLVPW() {
|
|
|
+ if (v.lvpws == null || v.lvpwd == null) {
|
|
|
return;
|
|
|
}
|
|
|
- final lvpws = _v.lvpws!;
|
|
|
- final lvpwd = _v.lvpwd!;
|
|
|
+ final lvpws = v.lvpws!;
|
|
|
+ final lvpwd = v.lvpwd!;
|
|
|
double value = CardiacFormulas.lvpwPercent(lvpws, lvpwd);
|
|
|
- _updateFloatValueByName(MeasureTerms.PercentLVPW, value);
|
|
|
+ updateFloatValueByName(MeasureTerms.PercentLVPW, value);
|
|
|
}
|
|
|
|
|
|
- void _updateCO() {
|
|
|
- if (_v.sv == null || _v.hr == null) {
|
|
|
+ @protected
|
|
|
+ void updateCO() {
|
|
|
+ if (v.sv == null || v.hr == null) {
|
|
|
return;
|
|
|
}
|
|
|
- double value = CardiacFormulas.co(_v.sv!, hr: _v.hr!);
|
|
|
- _updateFloatValueByName(MeasureTerms.CO, value);
|
|
|
+ double value = CardiacFormulas.co(v.sv!, hr: v.hr!);
|
|
|
+ updateFloatValueByName(MeasureTerms.CO, value);
|
|
|
}
|
|
|
|
|
|
- void _updateCI() {
|
|
|
- if (_v.sv == null || _v.hr == null) {
|
|
|
+ @protected
|
|
|
+ void updateCI() {
|
|
|
+ if (v.sv == null || v.hr == null) {
|
|
|
return;
|
|
|
}
|
|
|
if (GlobalPatientConfig.bsa == 0) {
|
|
|
return;
|
|
|
}
|
|
|
double value = CardiacFormulas.ci(
|
|
|
- _v.sv!,
|
|
|
- hr: _v.hr!,
|
|
|
+ v.sv!,
|
|
|
+ hr: v.hr!,
|
|
|
bsa: GlobalPatientConfig.bsa,
|
|
|
);
|
|
|
- _updateFloatValueByName(MeasureTerms.CI, value);
|
|
|
+ updateFloatValueByName(MeasureTerms.CI, value);
|
|
|
}
|
|
|
|
|
|
- void _updateSI() {
|
|
|
+ @protected
|
|
|
+ void updateSI() {
|
|
|
//_updateSI
|
|
|
// TODO:
|
|
|
}
|
|
|
|
|
|
- void _updateFloatValueByName(
|
|
|
+ @protected
|
|
|
+ void updateFloatValueByName(
|
|
|
String name,
|
|
|
double value, {
|
|
|
VidUsUnit? unit,
|