private void CreateSummaryFile(IOptions options) { var summaryData = new List <SummaryStats>(); var allResults = new List <CompoundData>(); foreach (var dataset in options.FilesToProcess) { var resultFilePath = GetOutputFileForDataset(options, dataset); if (!File.Exists(resultFilePath)) { continue; } var results = CompoundData.ReadCombinedResultsFile(resultFilePath).ToList(); var datasetName = Path.GetFileName(dataset); summaryData.Add(new SummaryStats(datasetName, results)); if (options.CreateThresholdsFile) { allResults.AddRange(results); } } SummaryStats.WriteToFile(options.SummaryStatsFilePath, summaryData); if (options.CreateThresholdsFile) { CreateThresholdsFile(options, allResults); } }
protected DailyStatList(IEnumerable <TStat> stats, string regionName) : this() { IEnumerable <DateTime> dates = stats.Select(x => x.StatDate).Distinct(); foreach (DateTime date in dates) { IEnumerable <TStat> oneDayStats = stats.Where(x => x.StatDate == date); TStat currentCityStat = oneDayStats.GetMergeStat(regionName); SummaryStats.Add(date, currentCityStat); RegionStats.Add(date, oneDayStats); IEnumerable <string> existedRegions = oneDayStats.Select(x => x.Region).Distinct(); foreach (string region in existedRegions) { if (Regions.FirstOrDefault(x => x == region) == null) { Regions.Add(region); } } } }
public async Task <SummaryStats> GetSummaryStats() { var generalStats = await _generalStatsRepository.GetAsync(); var mistakes = new List <Tuple <string, int> > { new Tuple <string, int>("Niepoprawnie wykryty obiekt", generalStats.IncorrectObjectsDetections), new Tuple <string, int>("Nieznaleziony obiekt", generalStats.NotFoundObjects), new Tuple <string, int>("Wielokrotnie znaleziony obiekt", generalStats.MultipleObjectsDetections), new Tuple <string, int>("Niepoprawne zaznaczenie", generalStats.IncorrectBoxDetections) }; mistakes.Sort((x, y) => y.Item2.CompareTo(x.Item2)); var labelList = new List <string>(); var valueList = new List <int>(); foreach (var item in generalStats.ObjectsFound.Take(10)) { labelList.Add(item.Key); valueList.Add(item.Value); } var correctAndAllMistakesChart = new ChartData { Title = "Bezbłędne wykrycia", Key = "correctAndAllMistakesChart", ChartType = "doughnut", Data = new Tuple <List <string>, List <int> > ( new List <string> { "Poprawne", "Niepoprawne" }, new List <int> { generalStats.CorrectObjectsDetections, generalStats.AllMistakes } ) }; var correctAndSmallMistakesChart = new ChartData { Title = "Wykrycia z małoistotnymi błędami", Key = "correctAndSmallMistakesChart", ChartType = "doughnut", Data = new Tuple <List <string>, List <int> > ( new List <string> { "Poprawne", "Niepoprawne" }, new List <int> { generalStats.CorrectObjectsDetections, generalStats.SmallMistakes } ) }; var topMistakes = new ChartData { Title = "Najczęsciej występujące błędy", Key = "topMistakes", ChartType = "Bar", Data = Unpack(mistakes) }; var topFoundObjects = new ChartData { Title = "Najczęsciej wykrywane obiekty", Key = "topFoundObjects", ChartType = "Bar", Data = new Tuple <List <string>, List <int> > ( labelList, valueList ) }; var chartsList = new List <ChartData> { correctAndAllMistakesChart, correctAndSmallMistakesChart, topMistakes, topFoundObjects }; var summaryStats = new SummaryStats { AverageTime = generalStats.AverageTime, ChartsData = chartsList, Effectiveness = (double)generalStats.CorrectObjectsDetections / (generalStats.ObjectsFoundByML + generalStats.NotFoundObjects) }; return(summaryStats); }
public IEnumerable <T> GetSummaryStats <T>(Func <TStat, T> selector) { return(SummaryStats.Select(x => x.Value).OrderBy(x => x.StatDate).Select(selector)); }
private void RunSimulations() { try { Status = "Status: Running simulations"; PlotsEnabled = false; Internals = new TreeViewModel(); Plots = new TabsViewModel(); Prints = new ObservableCollection <UIElement>(); var parseResult = SpiceHelper.GetSpiceSharpNetlist(Netlist, RandomSeed, HasTitle, Encoding); if (parseResult != null) { var model = new SpiceSharpParser.SpiceSharpReader().Read(parseResult.FinalModel); if (model == null) { Logs += $"Errors in lexing: {parseResult.ValidationResult.HasError}\n"; } else { SaveExportsToFile(model); Logs += $"Simulations found: {model.Simulations.Count}\n"; Logs += "Errors and warnings: \n"; foreach (var log in model.ValidationResult) { Logs += log.Message + ", line =" + log.LineInfo.LineNumber + "\n"; } int simulationNo = 0; Stopwatch simulationsWatch = new Stopwatch(); simulationsWatch.Start(); System.Threading.Tasks.Parallel.ForEach <Simulation>( model.Simulations, new ParallelOptions() { MaxDegreeOfParallelism = MaxDegreeOfParallelism }, simulation => RunSimulation(model, (Simulation)simulation, Interlocked.Increment(ref simulationNo))); simulationsWatch.Stop(); // Generate summary statistics Dispatcher.Invoke(() => { var summary = new SummarySimulationStatistics(); foreach (var stat in Stats) { summary.BehaviorCreationTime += stat.BehaviorCreationTime; summary.FinishTime += stat.FinishTime; summary.ExecutionTime += stat.ExecutionTime; summary.SetupTime += stat.SetupTime; summary.ValidationTime += stat.ValidationTime; } summary.TotalSimulationsTime = simulationsWatch.ElapsedMilliseconds; SummaryStats.Add(summary); }); // Generate plots if (model.XyPlots.Count > 0) { PlotsEnabled = true; Logs += $"Creating plots: {model.XyPlots.Count}\n"; if (model.XyPlots.Count > 0) { foreach (var plot in model.XyPlots) { Dispatcher.Invoke(() => { Plots.Items.Add(new TabItem() { Header = plot.Name, Content = new XyPlotControl() { Plot = plot } }); }); } } } // Generate plots if (model.MonteCarloResult.Enabled) { PlotsEnabled = true; Logs += $"Creating monte carlo plot\n"; Dispatcher.Invoke(() => { var plot = new HistogramPlotControl() { Data = model.MonteCarloResult }; plot.DataBind(); Plots.Items.Add(new TabItem() { Header = "Monte Carlo", Content = plot }); }); } Logs += $"Prints found: {model.Prints.Count}\n"; if (model.Prints.Count > 0) { foreach (var print in model.Prints) { Dispatcher.Invoke(() => { PrintControl control = new PrintControl(print); control.DataBind(); Prints.Add(control); }); } } } Status = "Status: Finished"; } } catch (Exception ex) { Logs += ex.ToString(); Status = "Status: Error"; } }
private void RunSimulations() { try { Status = "Status: Running simulations"; PlotsEnabled = false; Internals = new TreeViewModel(); Plots = new TabsViewModel(); Prints = new ObservableCollection <UIElement>(); var model = SpiceHelper.GetSpiceSharpNetlist(Netlist, Mode, RandomSeed, HasTitle); SaveExportsToFile(model); Logs += $"Simulations found: {model.Simulations.Count}\n"; int simulationNo = 0; Stopwatch simulationsWatch = new Stopwatch(); simulationsWatch.Start(); Parallel.ForEach <Simulation>( model.Simulations, new ParallelOptions() { MaxDegreeOfParallelism = MaxDegreeOfParallelism }, simulation => RunSimulation(model, (BaseSimulation)simulation, Interlocked.Increment(ref simulationNo))); simulationsWatch.Stop(); // Generate summary statistics Dispatcher.Invoke(() => { var summary = new SummarySimulationStatistics(); foreach (var stat in Stats) { summary.Iterations += stat.Iterations; summary.SolveTime += stat.SolveTime; summary.LoadTime += stat.LoadTime; summary.ReorderTime += stat.ReorderTime; summary.BehaviorCreationTime += stat.BehaviorCreationTime; summary.Timepoints += stat.Timepoints; summary.TransientIterations += stat.TransientIterations; summary.TransientTime += stat.TransientTime; summary.AcceptedTimepoints += stat.AcceptedTimepoints; summary.RejectedTimepoints += stat.RejectedTimepoints; } summary.TotalSimulationsTime = simulationsWatch.ElapsedMilliseconds; SummaryStats.Add(summary); }); // Generate plots if (model.XyPlots.Count > 0) { PlotsEnabled = true; Logs += $"Creating plots: {model.XyPlots.Count}\n"; if (model.XyPlots.Count > 0) { foreach (var plot in model.XyPlots) { Dispatcher.Invoke(() => { Plots.Items.Add(new TabItem() { Header = plot.Name, Content = new XyPlotControl() { Plot = plot } }); }); } } } // Generate plots if (model.MonteCarloResult.Enabled) { PlotsEnabled = true; Logs += $"Creating monte carlo plot\n"; Dispatcher.Invoke(() => { var plot = new HistogramPlotControl() { Data = model.MonteCarloResult }; plot.DataBind(); Plots.Items.Add(new TabItem() { Header = "Monte Carlo", Content = plot }); }); } Logs += $"Prints found: {model.Prints.Count}\n"; if (model.Prints.Count > 0) { foreach (var print in model.Prints) { Dispatcher.Invoke(() => { PrintControl control = new PrintControl(print); control.DataBind(); Prints.Add(control); }); } } foreach (var warning in model.Warnings) { Dispatcher.Invoke(() => { Logs += "Warning: " + warning + "\n"; }); } Status = "Status: Finished"; } catch (Exception ex) { Logs += ex.ToString(); Status = "Status: Error"; } }