/* * 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(); } }
// 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(); } }