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.");
            }
        }
Beispiel #2
0
        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);
            }
        }