private bool Check(AnalyzeOption o, RealizationResult rn, ResearchResult rr) { Debug.Assert(rn.Result.ContainsKey(o)); Debug.Assert(rn.Result[o] != null); Debug.Assert(rr.EnsembleResults.Count() > 0); if (!rr.EnsembleResults[0].Result.ContainsKey(o)) return true; Debug.Assert(rr.EnsembleResults[0].Result[o] != null); AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])o.GetType().GetField(o.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); OptionType ot = info[0].OptionType; switch (ot) { case OptionType.Global: Double v1 = Convert.ToDouble(rn.Result[o]); Double v2 = Convert.ToDouble(rr.EnsembleResults[0].Result[o]); return Math.Round(v1, 4) == v2; case OptionType.Distribution: case OptionType.Trajectory: Debug.Assert(rn.Result[o] is SortedDictionary<Double, Double>); Debug.Assert(rr.EnsembleResults[0].Result[o] is SortedDictionary<Double, Double>); SortedDictionary<Double, Double> d1 = rn.Result[o] as SortedDictionary<Double, Double>; SortedDictionary<Double, Double> d2 = rr.EnsembleResults[0].Result[o] as SortedDictionary<Double, Double>; return CheckDictionary(d1, d2); default: Debug.Assert(false); break; } return true; }
private void LoadEnsembleResults(ResearchResult r) { while (reader.Read()) { if (reader.Name == "Ensemble" && !reader.IsEmptyElement) { EnsembleResult e = new EnsembleResult(r.Size); //e.NetworkSize = r.Size; e.EdgesCount = r.Edges; e.Result = new Dictionary <AnalyzeOption, Object>(); reader.Read(); while (reader.NodeType != XmlNodeType.EndElement) { AnalyzeOption opt = (AnalyzeOption)Enum.Parse(typeof(AnalyzeOption), reader.Name); AnalyzeOptionInfo optInfo = (AnalyzeOptionInfo)(opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false)[0]); switch (optInfo.OptionType) { case OptionType.Global: e.Result.Add(opt, reader.ReadElementContentAsDouble()); break; case OptionType.ValueList: case OptionType.Centrality: e.Result.Add(opt, LoadValueList()); reader.Read(); break; case OptionType.Distribution: case OptionType.Trajectory: e.Result.Add(opt, LoadDistribution()); reader.Read(); break; default: break; } } r.EnsembleResults.Add(e); } } }
/// <summary> /// Calculates the average value of specified global analyze option. /// </summary> /// <param name="opt">Analyze option.</param> public void CalculateGlobalOption(AnalyzeOption opt) { if (EnsembleResultsAvg.Count != 0 && EnsembleResultsAvg[0].Result.ContainsKey(opt)) { return; } ResearchResult tr = null; AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); Debug.Assert(info[0].OptionType == OptionType.Global); double avg = 0; foreach (Guid id in researches) { tr = StatSessionManager.GetResearchResult(id); Debug.Assert(tr.EnsembleResults.Count == 1); // TODO fix it if (!tr.EnsembleResults[0].Result.ContainsKey(opt)) { continue; } Debug.Assert(tr.EnsembleResults[0].Result[opt] != null); avg += Convert.ToDouble(tr.EnsembleResults[0].Result[opt]) * tr.RealizationCount; } avg /= RealizationCountSum; EnsembleResult er = null; if (EnsembleResultsAvg.Count == 0) { er = new EnsembleResult(0); EnsembleResultsAvg.Add(er); } else { er = EnsembleResultsAvg[0]; } er.Result.Add(opt, Math.Round(avg, 4)); }
/// <summary> /// Calculates the average distribution of specified distributed analyze option. /// </summary> /// <param name="opt">Analyze option.</param> public void CalculateDistributedOption(AnalyzeOption opt) { if (EnsembleResultsAvg.Count != 0 && EnsembleResultsAvg[0].Result.ContainsKey(opt)) { return; } AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); Debug.Assert(info[0].OptionType == OptionType.Distribution); EnsembleResult er = null; if (EnsembleResultsAvg.Count == 0) { er = new EnsembleResult(0); EnsembleResultsAvg.Add(er); } else { er = EnsembleResultsAvg[0]; } er.Result.Add(opt, CalculateDoubleAverage(opt)); }
private bool Check(AnalyzeOption o, RealizationResult rn, ResearchResult rr) { Debug.Assert(rn.Result.ContainsKey(o)); Debug.Assert(rn.Result[o] != null); Debug.Assert(rr.EnsembleResults.Count() > 0); if (!rr.EnsembleResults[0].Result.ContainsKey(o)) { return(true); } Debug.Assert(rr.EnsembleResults[0].Result[o] != null); AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])o.GetType().GetField(o.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); OptionType ot = info[0].OptionType; switch (ot) { case OptionType.Global: Double v1 = Convert.ToDouble(rn.Result[o]); Double v2 = Convert.ToDouble(rr.EnsembleResults[0].Result[o]); return(Math.Round(v1, 4) == v2); case OptionType.Distribution: case OptionType.Trajectory: Debug.Assert(rn.Result[o] is SortedDictionary <Double, Double>); Debug.Assert(rr.EnsembleResults[0].Result[o] is SortedDictionary <Double, Double>); SortedDictionary <Double, Double> d1 = rn.Result[o] as SortedDictionary <Double, Double>; SortedDictionary <Double, Double> d2 = rr.EnsembleResults[0].Result[o] as SortedDictionary <Double, Double>; return(CheckDictionary(d1, d2)); default: Debug.Assert(false); break; } return(true); }
/// <summary> /// Checks if specified option has specified option type/ /// </summary> /// <param name="opt">Analyze option.</param> /// <param name="ot">Analyze option type.</param> /// <returns></returns> public static bool HasOptionType(AnalyzeOption opt, OptionType ot) { AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); return(info[0].OptionType == ot); }
/// <summary> /// Checks if specified option has specified option type/ /// </summary> /// <param name="opt">Analyze option.</param> /// <param name="ot">Analyze option type.</param> /// <returns></returns> public static bool HasOptionType(AnalyzeOption opt, OptionType ot) { AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); return (info[0].OptionType == ot); }
private void InitializeAxis() { AnalyzeOptionInfo[] oInfo = (AnalyzeOptionInfo[])option.GetType().GetField(option.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); graphic.ChartAreas[0].AxisX.Title = oInfo[0].XAxisName; graphic.ChartAreas[0].AxisY.Title = oInfo[0].YAxisName; }
/// <summary> /// Calculates the average value of specified global analyze option. /// </summary> /// <param name="opt">Analyze option.</param> public void CalculateGlobalOption(AnalyzeOption opt) { if (EnsembleResultsAvg.Count != 0 && EnsembleResultsAvg[0].Result.ContainsKey(opt)) return; ResearchResult tr = null; AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); Debug.Assert(info[0].OptionType == OptionType.Global); double avg = 0; foreach (Guid id in researches) { tr = StatSessionManager.GetResearchResult(id); Debug.Assert(tr.EnsembleResults.Count == 1); Debug.Assert(tr.EnsembleResults[0].Result[opt] != null); avg += Convert.ToDouble(tr.EnsembleResults[0].Result[opt]) * tr.RealizationCount; } avg /= RealizationCountSum; EnsembleResult er = null; if (EnsembleResultsAvg.Count == 0) { er = new EnsembleResult(); EnsembleResultsAvg.Add(er); } else er = EnsembleResultsAvg[0]; er.Result.Add(opt, Math.Round(avg, 4)); }
/// <summary> /// Calculates the average distribution of specified distributed analyze option. /// </summary> /// <param name="opt">Analyze option.</param> public void CalculateDistributedOption(AnalyzeOption opt) { if (EnsembleResultsAvg.Count != 0 && EnsembleResultsAvg[0].Result.ContainsKey(opt)) return; AnalyzeOptionInfo[] info = (AnalyzeOptionInfo[])opt.GetType().GetField(opt.ToString()).GetCustomAttributes(typeof(AnalyzeOptionInfo), false); Debug.Assert(info[0].OptionType == OptionType.Distribution); EnsembleResult er = null; if (EnsembleResultsAvg.Count == 0) { er = new EnsembleResult(); EnsembleResultsAvg.Add(er); } else er = EnsembleResultsAvg[0]; er.Result.Add(opt, CalculateDoubleAverage(opt)); }