public AnalyteGuidelineValue CalculateGuidelineValue( GuidelineCalculationRequestViewModel data, AnalyteGuideline guideline) { if (String.IsNullOrEmpty(guideline.GuidelineValue)) { throw new ArgumentNullException("System fail to calculate guideline value for " + guideline.AnalyteName); } if (guideline.ValueType == Constants.DoubleValueType || guideline.ValueType == Constants.RangeValueType) { return(this.CalculateStaticGuidelineValue(guideline)); } else if (guideline.ValueType == Constants.EquationValueType) { double?parsedValue = EvaluateEquation(guideline.GuidelineValue, data.ToEquationParameters()); return(new SimpleGuidelineValue(guideline.Guideline.Name, guideline.AnalyteName, guideline.ValueType, guideline.Unit, parsedValue)); } else if (guideline.ValueType == Constants.AmmoniaLookupTableValueType) { var ammoniaGuidelineCalculator = new AmmoniaGuidelineValueCalculator(); double?parsedValue = ammoniaGuidelineCalculator.CalculateGuidelineValue(guideline.GuidelineValue, data.Value.Value, data.ToEquationParameters()); return(new SimpleGuidelineValue(guideline.Guideline.Name, guideline.AnalyteName, guideline.ValueType, guideline.Unit, parsedValue)); } else { throw new ArgumentException(guideline.ValueType + " is not a supported value type for standard value calculator."); } }
public static bool Decide( ref GuidelineCalculationRequestViewModel data, IEnumerable <GuidelineCalculationRequestViewModel> dataset, DependentDecision decision, AnalyteGuideline guideline) { if (decision == DependentDecision.ExistingValue) { return(true); } if (guideline.ValueType == Constants.EquationValueType) { foreach (var analyte in ExtractDependAnalyteNames(guideline.GuidelineValue)) { var result = FindDependValue( ref data, dataset, analyte, dic[analyte] ); if (!result) { return(false); } } return(true); } return(true); }
private SimpleGuidelineValue CalculateStaticSimpleValue(AnalyteGuideline guideline) { try { var parsedValue = double.Parse(guideline.GuidelineValue); var data = new SimpleGuidelineValue(guideline.Guideline.Name, guideline.AnalyteName, guideline.ValueType, guideline.Unit, parsedValue); return(data); } catch (Exception) { throw new ArgumentException(guideline.GuidelineValue + " could not be parsed as double for guideline value."); } }
private AnalyteGuidelineValue CalculateStaticGuidelineValue(AnalyteGuideline guideline) { if (String.IsNullOrEmpty(guideline.GuidelineValue)) { throw new ArgumentNullException("System fail to calculate guideline value for " + guideline.AnalyteName); } switch (guideline.ValueType) { case Constants.DoubleValueType: return(CalculateStaticSimpleValue(guideline)); case Constants.RangeValueType: return(CalculateStaticRangeValue(guideline)); default: throw new ArgumentException("Sample guideline value calculate function could only support double value type/range value type."); } }
/// <summary> /// expected guideline value string "6.5<=[PH] and [PH]<=9.0" /// </summary> /// <param name="standardValue"></param> /// <returns></returns> private RangeGuidelineValue CalculateStaticRangeValue(AnalyteGuideline guideline) { string pattern = @"[\d]{1,10}(\.[\d]{1,4})?"; var matches = Regex.Matches(guideline.GuidelineValue, pattern, RegexOptions.IgnoreCase); try { var minValue = Double.Parse(matches[0].Value); var maxValue = Double.Parse(matches[1].Value); var data = new RangeGuidelineValue(guideline.Guideline.Name, guideline.AnalyteName, guideline.ValueType, guideline.Unit, minValue, maxValue); return(data); } catch (Exception) { throw new SystemException("System fails to parse range value " + guideline.GuidelineValue); } }