public void Export(StringBuilder sb) { var eDict = Experts.ToDictionary(x => x, x => new List <ExpertAnswer>()); var maxLength = Experts.Max(x => x.Name.Length); foreach (var ea in base.ExpertAnswer) { eDict[ea.Expert].Add(ea); } const string qTitle = "Вопросы"; string spaces; if (maxLength > qTitle.Length) { spaces = new string(' ', maxLength - qTitle.Length); } else { spaces = String.Empty; } sb.Append(spaces + qTitle); int number = 0; foreach (var q in Questions) { sb.Append('\t'); sb.Append(++number); } foreach (var e in eDict) { sb.AppendLine(); sb.Append(e.Key.Name); var answers = e.Value.OrderBy(x => x.Question.Key).ToArray(); foreach (var ea in answers) { sb.Append('\t'); sb.Append(ea.Answer.Name); } } sb.AppendLine(); }
void GetBounds(ExpertVariable var, out double vmin, out double vmax) { var min = Experts.Min(x => x.Estimates[var].GetQuantile(0)); var max = Experts.Max(x => x.Estimates[var].GetQuantile(1)); if (var is CalibrationVariable) { var cVar = (CalibrationVariable)var; min = Math.Min(min, cVar.TrueValue); max = Math.Max(max, cVar.TrueValue); } var overshoot = (max - min) * K / 100.0; vmin = min - overshoot; vmax = max + overshoot; }