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);
            }
        }
示例#2
0
        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);
                    }
                }
            }
        }
示例#3
0
        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);
        }
示例#4
0
 public IEnumerable <T> GetSummaryStats <T>(Func <TStat, T> selector)
 {
     return(SummaryStats.Select(x => x.Value).OrderBy(x => x.StatDate).Select(selector));
 }
示例#5
0
        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";
            }
        }
示例#6
0
        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";
            }
        }