123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- 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/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 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;
- LvStudyDistanceGroupCal(super.ref) {
- kidIVSd = ref.findChildByName(MeasureTerms.IVSd) as StraightLine;
- kidLVIDd = ref.findChildByName(MeasureTerms.LVIDd) as StraightLine;
- kidLVPWd = ref.findChildByName(MeasureTerms.LVPWd) as StraightLine;
- kidIVSs = ref.findChildByName(MeasureTerms.IVSs) as StraightLine;
- kidLVIDs = ref.findChildByName(MeasureTerms.LVIDs) as StraightLine;
- kidLVPWs = ref.findChildByName(MeasureTerms.LVPWs) as StraightLine;
- }
- @override
- void calculate() {
- if (ref.feature == null) return;
- 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);
- for (var output in ref.meta.outputs) {
- switch (output.name) {
- case MeasureTerms.LvStudy:
- feature.updateStringValue(output, "");
- break;
- case MeasureTerms.LVEDV:
- updateLVEDV();
- break;
- case MeasureTerms.LVESV:
- updateLVESV();
- break;
- case MeasureTerms.LVdMass:
- updateLVdMass();
- break;
- case MeasureTerms.PercentIVS:
- updatePercentIVS();
- break;
- case MeasureTerms.SV:
- updateSV();
- break;
- case MeasureTerms.EF:
- updateEF();
- break;
- case MeasureTerms.FS:
- updatePercentFS();
- break;
- case MeasureTerms.PercentLVPW:
- updatePercentLVPW();
- break;
- case MeasureTerms.CO:
- updateCO();
- break;
- case MeasureTerms.CI:
- updateCI();
- break;
- case MeasureTerms.SI:
- updateSI();
- break;
- }
- }
- }
- }
- class LvStudyCalculatorBase<T extends TopMeasureItem>
- extends Calculator<T, double> {
- LvStudyCalculatorBase(super.ref);
- @protected
- late _ValTemp v;
- @override
- void calculate() {
- // TODO: implement calculate
- }
- @protected
- void updateLVEDV() {
- if (v.lvidd == null) {
- return;
- }
- final lvidd = v.lvidd!;
- double value = 0;
- if (GlobalCardiacConfigs.EDVFormulaMode ==
- CardiacEDVFormulaMode.teichholz) {
- value = CardiacFormulas.edvTeichholz(lvidd);
- } else if (GlobalCardiacConfigs.EDVFormulaMode ==
- CardiacEDVFormulaMode.cube) {
- value = CardiacFormulas.edvCube(lvidd);
- }
- updateFloatValueByName(MeasureTerms.LVEDV, value, unit: VidUsUnit.cm3);
- v.lvedv = value;
- }
- @protected
- void updateLVESV() {
- if (v.lvids == null) {
- return;
- }
- final lvids = v.lvids!;
- double value = 0;
- if (GlobalCardiacConfigs.EDVFormulaMode ==
- CardiacEDVFormulaMode.teichholz) {
- value = CardiacFormulas.esvTeichholz(lvids);
- } else if (GlobalCardiacConfigs.EDVFormulaMode ==
- CardiacEDVFormulaMode.cube) {
- value = CardiacFormulas.esvCube(lvids);
- }
- updateFloatValueByName(MeasureTerms.LVESV, value, unit: VidUsUnit.cm3);
- v.lvesv = value;
- }
- @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);
- }
- @protected
- void updatePercentIVS() {
- if (v.ivsd == null || v.ivss == null) {
- return;
- }
- double value = CardiacFormulas.ivsPercent(v.ivss!, v.ivsd!);
- updateFloatValueByName(MeasureTerms.PercentIVS, value);
- }
- @protected
- void updateSV() {
- if (v.lvedv == null || v.lvesv == null) {
- return;
- }
- final edv = v.lvedv!;
- final esv = v.lvesv!;
- double value = CardiacFormulas.sv(edv, esv);
- updateFloatValueByName(MeasureTerms.SV, value, unit: VidUsUnit.cm3);
- v.sv = value;
- }
- @protected
- void updateEF() {
- if (v.lvedv == null || v.lvesv == null) {
- return;
- }
- final edv = v.lvedv!;
- final esv = v.lvesv!;
- double value = CardiacFormulas.ef(edv, esv);
- updateFloatValueByName(MeasureTerms.EF, value);
- }
- @protected
- void updatePercentFS() {
- if (v.lvidd == null || v.lvids == null) {
- return;
- }
- final lvidd = v.lvidd!;
- final lvids = v.lvids!;
- double value = CardiacFormulas.fsPercent(lvidd, lvids);
- updateFloatValueByName(MeasureTerms.FS, value);
- }
- @protected
- void updatePercentLVPW() {
- if (v.lvpws == null || v.lvpwd == null) {
- return;
- }
- final lvpws = v.lvpws!;
- final lvpwd = v.lvpwd!;
- double value = CardiacFormulas.lvpwPercent(lvpws, lvpwd);
- updateFloatValueByName(MeasureTerms.PercentLVPW, value);
- }
- @protected
- void updateCO() {
- if (v.sv == null || v.hr == null) {
- return;
- }
- double value = CardiacFormulas.co(v.sv!, hr: v.hr!);
- updateFloatValueByName(MeasureTerms.CO, value);
- }
- @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!,
- bsa: GlobalPatientConfig.bsa,
- );
- updateFloatValueByName(MeasureTerms.CI, value);
- }
- @protected
- void updateSI() {
- //_updateSI
- // TODO:
- }
- @protected
- void updateFloatValueByName(
- String name,
- double value, {
- VidUsUnit? unit,
- }) {
- ref.measuredFeatures;
- final feature = ref.feature!;
- final outputMeta = ref.meta.outputs.firstWhere((x) => x.name == name);
- feature.updateFloatValue(outputMeta, value, unit ?? outputMeta.unit);
- }
- }
- class _ValTemp {
- double? ivsd;
- double? lvidd;
- double? lvpwd;
- double? ivss;
- double? lvids;
- double? lvpws;
- double? lvedv;
- double? lvesv;
- double? sv;
- int? hr = GlobalPatientConfig.hr; // TODO: from vid ext
- }
|