two_location.dart 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import 'package:fis_measure/interfaces/process/items/terms.dart';
  2. import 'package:fis_measure/process/primitives/combos/two_location.dart';
  3. import 'package:vid/us/vid_us_unit.dart';
  4. import 'calculator.dart';
  5. import 'formulas/general.dart';
  6. class PulsatilityIndexCal extends Calculator<TwoLocation, double> {
  7. PulsatilityIndexCal(super.ref);
  8. static const pulsatilityIndexKey = "PI(TCD)";
  9. @override
  10. void calculate() {
  11. if (ref.feature == null) return;
  12. final feature = ref.feature!;
  13. feature.values.clear();
  14. updateStringValue('');
  15. double pi = double.nan;
  16. double ps = double.nan;
  17. double ed = double.nan;
  18. double vMean = double.nan;
  19. final child1Feature = findChildFeature(ref.child1);
  20. final child2Feature = findChildFeature(ref.child2);
  21. if (child1Feature != null && child2Feature != null) {
  22. ps = pickChildFloatValue(ref.child1) ?? double.nan;
  23. ed = pickChildFloatValue(ref.child2) ?? double.nan;
  24. ps = roundDouble(ps);
  25. ed = roundDouble(ed);
  26. vMean = GeneralFormulas.medianVelocity(ps, ed);
  27. pi = GeneralFormulas.pi(ps, ed, vMean);
  28. }
  29. // 按照测试要求不显示数值
  30. // if (!pi.isNaN) {
  31. // updateFloatValue(pi);
  32. // }
  33. for (var output in ref.meta.outputs) {
  34. if (output.name == pulsatilityIndexKey) {
  35. if (!pi.isNaN) {
  36. feature.updateFloatValue(output, roundDouble(pi), VidUsUnit.None);
  37. }
  38. } else if (output.name == MeasureTerms.VelocityMean) {
  39. if (!vMean.isNaN) {
  40. feature.updateFloatValue(output, roundDouble(vMean), VidUsUnit.cms);
  41. }
  42. }
  43. }
  44. }
  45. }