123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import 'package:fis_measure/configs/patient.dart';
- import 'package:fis_measure/interfaces/process/items/terms.dart';
- import 'package:fis_measure/process/calcuators/formulas/cardiac.dart';
- import 'package:fis_measure/process/primitives/combos/sv.dart';
- import 'package:fis_measure/process/primitives/multi_method/multiple_trace.dart';
- import 'package:vid/us/vid_us_unit.dart';
- import 'calculator.dart';
- import 'formulas/general.dart';
- import 'trace.dart';
- class SvCal extends Calculator<Sv, double> {
- SvCal(super.ref);
- @override
- void calculate() {
- if (ref.feature == null) return;
- final feature = ref.feature!;
- final diam = pickChildFloatValue(ref.l);
- if (diam == null) {
- updateStringValue("");
- return;
- }
- double? vti;
- double? sv;
- int? hr;
- double? co;
- final bsa = GlobalPatientConfig.bsa;
- TraceItemFeatureAbstract? traceFeature = ref.trace.feature;
- if (traceFeature == null) {
- if (ref.trace.measuredFeatures.isNotEmpty) {
- traceFeature = ref.trace.measuredFeatures.first;
- }
- }
- if (traceFeature != null) {
- final countVTIResult = TraceCal.getCountVTI(traceFeature);
- var outputVTI = countVTIResult[0];
- var outputHR = countVTIResult[5];
- vti = outputVTI;
- hr = outputHR.toInt();
- sv = GeneralFormulas.svDiam(diam, vti);
- }
- if (sv != null) {
- updateFloatValue(sv, unit: VidUsUnit.cm3);
- } else {
- updateStringValue("");
- }
- // Diam 输出
- // feature.updateFloatValue(ref.l.meta.outputs[0], diam, VidUsUnit.cm);
- if (traceFeature != null) {
- // Trace 输出
- for (var output in ref.trace.meta.outputs) {
- if (output.name == MeasureTerms.SV_Trace) {
- // feature.updateStringValue(output, '', VidUsUnit.None);
- } else if (output.name == MeasureTerms.VTI) {
- if (vti != null) {
- feature.updateFloatValue(output, vti, VidUsUnit.cm);
- }
- } else if (output.name == MeasureTerms.HeartRate) {
- if (hr != null) {
- feature.updateFloatValue(output, hr.toDouble(), VidUsUnit.HR);
- }
- }
- }
- }
- if (sv != null) {
- for (var output in ref.meta.outputs) {
- switch (output.name) {
- case MeasureTerms.SI:
- if (bsa > 0) {
- final si = CardiacFormulas.si(sv, bsa);
- feature.updateFloatValue(output, si, VidUsUnit.mlm2);
- }
- break;
- case MeasureTerms.CO:
- if (hr != null) {
- co = CardiacFormulas.co(sv, hr: hr);
- feature.updateFloatValue(output, co, VidUsUnit.Lmin);
- }
- break;
- case MeasureTerms.CI:
- if (co != null && bsa > 0) {
- final ci = CardiacFormulas.ci(sv, hr: hr!, bsa: bsa);
- feature.updateFloatValue(output, ci, VidUsUnit.Lminm2);
- }
- break;
- }
- }
- }
- final csaIndex =
- ref.meta.outputs.indexWhere((e) => e.name == MeasureTerms.CSA);
- if (csaIndex > -1) {
- final output = ref.meta.outputs[csaIndex];
- final csa = GeneralFormulas.csa(diam);
- feature.updateFloatValue(output, csa, VidUsUnit.cm2);
- }
- }
- }
|