/// <summary> /// Creates piecewise list from string /// </summary> /// <param name="piecewise">(age0, value0)(age1, value1)...</param> private void CreateList(string piecewise) { m_ageValueList = new List <AgeValue>(); string[] pairs = piecewise.Split(')'); foreach (string pair in pairs) { if (!string.IsNullOrWhiteSpace(pair)) { AgeValue ageValue = new AgeValue(pair, _isOMS); if (ageValue.Error != null) { this.Errors += ageValue.Error; } m_ageValueList.Add(ageValue); } } //Sort by age. m_ageValueList.Sort((x, y) => x.Age.CompareTo(y.Age)); //Remove bad values m_ageValueList.RemoveAll(delegate(AgeValue av) { return(av.Age < 0); }); m_ageValueList.RemoveAll(delegate(AgeValue av) { return(av.Value == double.NaN); }); SortByAgeAndValues(); }
/// <summary> /// Returns the current value adjusted for AGE (shift). /// </summary> /// <param name="value">Current value of dependent variable</param> /// <param name="age">Current age</param> /// <returns>Shifted value</returns> public AgeValue GetNextValue(double value, double age, double span) { AgeValue ageValue = null; double apparentAge = GetApparentAge(value); if (age > 0) { double ratio = apparentAge / age; double nextAge = apparentAge + ratio * span; double nextValue = GetValue(nextAge); ageValue = new AgeValue(nextAge, nextValue); } else { ageValue = m_yearlyAgeValue[0]; } return(ageValue); }