/*
         * private static double FindMinimumTargetLoad([NotNull] Profile bkw, [NotNull] Profile residualAfterPv, double storageSize)
         * {
         *  if (Math.Abs(storageSize) < 0.00001) {
         *      return bkw.Values.Max();
         *  }
         *  double targetLoad =0;
         *  double peakLoad = Double.MaxValue;
         *  while (peakLoad > targetLoad) {
         *      var withStorage10KWhPredictive =
         *          residualAfterPv.IntegrateStorageWithAdjustedCurrentValue(storageSize * 4000,
         *              "10kwhStoragePredictive-target-" + targetLoad,
         *              out var _, targetLoad);
         *      peakLoad = withStorage10KWhPredictive.Values.Max();
         *      if (peakLoad > targetLoad) {
         *          targetLoad += 50;
         *      }
         *      //logger.Info("trying targete load of " + targetLoad);
         *  }
         *  return targetLoad;
         * }*/

        private void VisualizeStackedProfiles([NotNull] string targetDir, [ItemNotNull][NotNull] List <Profile> ps, [NotNull] PlotMaker pm, [NotNull] string name, [NotNull] Profile residual)
        {
            if (!Directory.Exists(targetDir))
            {
                Directory.CreateDirectory(targetDir);
                Thread.Sleep(500);
            }

            var    filename          = Path.Combine(targetDir, name + ".png");
            var    filenameCsv       = Path.Combine(targetDir, name + ".csv");
            var    filenameHourlyCsv = Path.Combine(targetDir, name + ".hourly.csv");
            var    allLs             = new List <LineSeriesEntry>();
            double min     = 0;
            var    allBars = new List <BarSeriesEntry>();

            foreach (var profile in ps)
            {
                var ls = profile.GetLineSeriesEntry();
                allLs.Add(ls);
                if (profile.Values.Min() < min)
                {
                    min = profile.Values.Min();
                }

                allBars.Add(profile.MakeDailyAverages().GetBarSeries());
            }

            pm.MakeLineChart(filename, name, allLs, new List <PlotMaker.AnnotationEntry>(), min);

            pm.MakeBarChart(filename + ".bars.png", name, allBars, new List <string>());
            {
                using (var sw = new StreamWriter(filenameCsv)) {
                    var sb1 = new StringBuilder();
                    foreach (var profile in ps)
                    {
                        sb1.Append(profile.Name).Append(";");
                    }

                    sw.WriteLine(sb1);
                    var dailyProfiles = new List <Profile>();
                    foreach (var profile in ps)
                    {
                        dailyProfiles.Add(profile.MakeDailyAverages());
                    }

                    for (var i = 0; i < 365; i++)
                    {
                        var sb = new StringBuilder();
                        foreach (var profile in dailyProfiles)
                        {
                            sb.Append(profile.Values[i]).Append(";");
                        }

                        sw.WriteLine(sb);
                    }

                    sw.Close();
                }
            }
            {
                using (var sw = new StreamWriter(filenameHourlyCsv)) {
                    var sb1 = new StringBuilder();
                    ps.Add(residual);
                    foreach (var profile in ps)
                    {
                        sb1.Append(profile.Name).Append(";");
                    }

                    sw.WriteLine(sb1);
                    for (var i = 0; i < 8760; i++)
                    {
                        var sb = new StringBuilder();
                        foreach (var profile in ps)
                        {
                            sb.Append(profile.Values[i]).Append(";");
                        }

                        sw.WriteLine(sb);
                    }

                    sw.Close();
                }
            }
        }
        private void VisualizeOneProfile([NotNull] string targetDir, [NotNull] Profile p, [NotNull] PlotMaker pm, bool limitToZero)
        {
            if (!Directory.Exists(targetDir))
            {
                Directory.CreateDirectory(targetDir);
                Thread.Sleep(500);
            }

            var filename    = Path.Combine(targetDir, p.Name + ".png");
            var filenameCsv = Path.Combine(targetDir, p.Name + ".csv");
            var ls          = p.GetLineSeriesEntry();
            var allLs       = new List <LineSeriesEntry> {
                ls
            };

            pm.MakeLineChart(filename, p.Name, allLs, new List <PlotMaker.AnnotationEntry>(), limitToZero ? 0 : p.Values.Min());

            if (p.Values.Count < 8700)
            {
                using (var sw1 = new StreamWriter(filenameCsv)) {
                    for (var i = 0; i < p.Values.Count; i++)
                    {
                        sw1.WriteLine(p.Values[i]);
                    }

                    sw1.Close();
                    return;
                }
            }

            var oneDayProfile = p.MakeDailyAverages();
            var bs            = oneDayProfile.GetBarSeries();
            var lbs           = new List <BarSeriesEntry> {
                bs
            };
            var times = new List <string>();

            for (var i = 0; i < oneDayProfile.Values.Count; i++)
            {
                if (i % 30 == 0)
                {
                    times.Add(i.ToString());
                }
                else
                {
                    times.Add("");
                }
            }

            pm.MakeBarChart(filename + ".bar.png", p.Name, lbs, times);

            var negatives = p.GetOnlyNegative("load").MakeDailyAverages().GetBarSeries();
            var positives = p.GetOnlyPositive("feedin").MakeDailyAverages().GetBarSeries();

            var lbs2 = new List <BarSeriesEntry> {
                negatives,
                positives
            };

            pm.MakeBarChart(filename + ".barSplit.png", p.Name, lbs2, times);

            using (var sw = new StreamWriter(filenameCsv)) {
                foreach (var value in p.Values)
                {
                    sw.WriteLine(value);
                }

                sw.Close();
            }
        }
Exemple #3
0
        // ReSharper disable once FunctionComplexityOverflow
        public void Run()
        {
            var logger = new Logging.Logger(null);

            using (var db = new Database("Data Source=v:\\Test.sqlite", DatabaseType.SQLite, System.Data.SQLite.SQLiteFactory.Instance)) {
                var          ebd  = db.Fetch <RasterDatenEnergiebedarfKanton>();
                var          dict = GetLongNames();
                var          pm   = new PlotMaker(new MapDrawer(logger), logger, null);
                const string path = "v:\\plots\\";
                //anzahl gebäude
                var bses     = new List <BarSeriesEntry>();
                var colNames = new List <string>();
                var col      = 0;
                colNames.Add("Summe");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_gwr)], ebd.Sum(x => x.wg_gwr), col));
                col++;
                colNames.Add("GEAK");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_geak)], ebd.Sum(x => x.wg_geak), col));
                col++;
                colNames.Add("Gebäude nach Typ");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1010)], ebd.Sum(x => x.wg_1010), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1021)], ebd.Sum(x => x.wg_1021), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1025)], ebd.Sum(x => x.wg_1025), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1030)], ebd.Sum(x => x.wg_1030), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1040)], ebd.Sum(x => x.wg_1040), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1060)], ebd.Sum(x => x.wg_1060), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1080)], ebd.Sum(x => x.wg_1080), col));
                pm.MakeBarChart(Path.Combine(path, "Gebäudeanzahl" + ".png"), "Gebäude-Anzahl", bses, colNames);

                //wärme/energiebedarfe
                bses     = new List <BarSeriesEntry>();
                colNames = new List <string>();
                col      = 0;
                colNames.Add("Wärmebedarf für \nHeizen und\nWarmwasser ");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.whzww)], ebd.Sum(x => x.whzww), col));
                col++;
                colNames.Add("Wärmebedarf \naufgeteilt");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.whz)], ebd.Sum(x => x.whz), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.www)], ebd.Sum(x => x.www), col));
                col++;
                colNames.Add("Energiebedarf \nGesamt");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww)], ebd.Sum(x => x.ehzww), col));
                col++;
                colNames.Add("Energiebedarf \nWarmwasser und\nHeizen");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz)], ebd.Sum(x => x.ehz), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww)], ebd.Sum(x => x.eww), col));
                col++;
                colNames.Add("Energiebedarf \nHeizen \naufteilt");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ol)], ebd.Sum(x => x.ehz_ol), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_gz)], ebd.Sum(x => x.ehz_gz), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ho)], ebd.Sum(x => x.ehz_ho), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_el)], ebd.Sum(x => x.ehz_el), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ko)], ebd.Sum(x => x.ehz_ko), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_wp)], ebd.Sum(x => x.ehz_wp), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_so)], ebd.Sum(x => x.ehz_so), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_fw)], ebd.Sum(x => x.ehz_fw), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_a)], ebd.Sum(x => x.ehz_a), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_u)], ebd.Sum(x => x.ehz_u), col));
                col++;
                colNames.Add("Energiebedarf \nWarmwasser \naufteilt");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ol)], ebd.Sum(x => x.eww_ol), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_gz)], ebd.Sum(x => x.eww_gz), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ho)], ebd.Sum(x => x.eww_ho), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_el)], ebd.Sum(x => x.eww_el), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ko)], ebd.Sum(x => x.eww_ko), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_wp)], ebd.Sum(x => x.eww_wp), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_so)], ebd.Sum(x => x.eww_so), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_fw)], ebd.Sum(x => x.eww_fw), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_a)], ebd.Sum(x => x.eww_a), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_u)], ebd.Sum(x => x.eww_u), col));
                col++;
                colNames.Add("Energiebedarf \nGesamt\nnach Haustyp");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1010)], ebd.Sum(x => x.ehzww_1010), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1021)], ebd.Sum(x => x.ehzww_1021), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1025)], ebd.Sum(x => x.ehzww_1025), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1030)], ebd.Sum(x => x.ehzww_1030), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1040)], ebd.Sum(x => x.ehzww_1040), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1060)], ebd.Sum(x => x.ehzww_1060), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1080)], ebd.Sum(x => x.ehzww_1080), col));
                col++;
                colNames.Add("Energiebedarf \nGesamt\nnach Baujahr");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8011)], ebd.Sum(x => x.ehzww_8011), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8012)], ebd.Sum(x => x.ehzww_8012), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8013)], ebd.Sum(x => x.ehzww_8013), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8014)], ebd.Sum(x => x.ehzww_8014), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8015)], ebd.Sum(x => x.ehzww_8015), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8016)], ebd.Sum(x => x.ehzww_8016), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8017)], ebd.Sum(x => x.ehzww_8017), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8018)], ebd.Sum(x => x.ehzww_8018), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8019)], ebd.Sum(x => x.ehzww_8019), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8020)], ebd.Sum(x => x.ehzww_8020), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8021)], ebd.Sum(x => x.ehzww_8021), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8022)], ebd.Sum(x => x.ehzww_8022), col));
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8023)], ebd.Sum(x => x.ehzww_8023), col));
                col++;
                colNames.Add("Energiebedarf \nGesamt\nRichtplan 2012");
                bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio("Richtplan 2012 Total", 111131000, col));

                pm.MakeBarChart(Path.Combine(path, "WärmeBedarfe" + ".png"), "Wärme", bses, colNames);


                pm.Finish();
            }
        }