public void RunTest() { using (WorkingDir wd = new WorkingDir(Utili.GetCurrentMethodAndClass())) { HouseholdKeyLogger ael = new HouseholdKeyLogger(wd.SqlResultLoggingService); HouseholdKey key = new HouseholdKey("hhkey"); List <IDataSaverBase> savers = new List <IDataSaverBase> { ael }; InputDataLogger idl = new InputDataLogger(savers.ToArray()); HouseholdKeyEntry ae1 = new HouseholdKeyEntry(key, "hhname", HouseholdKeyType.House, "desc", null, null); idl.Save(ae1); List <HouseholdKeyEntry> aes = new List <HouseholdKeyEntry> { ae1 }; var res = ael.Load(); var s1 = JsonConvert.SerializeObject(aes, Formatting.Indented); var s2 = JsonConvert.SerializeObject(res, Formatting.Indented); s1.Should().Be(s2); wd.CleanUp(); } }
public void GetDuplicateCalcManagerHouseholdTest() { using (var wd1 = new WorkingDir("GetDuplicateCalcManagerHouseholdTest1")) { CalculateOneHousehold(wd1.WorkingDirectory); using (var wd2 = new WorkingDir("GetDuplicateCalcManagerHouseholdTest2")) { CalculateOneHousehold(wd2.WorkingDirectory); var hhkeys = HouseholdKeyLogger.Load(wd1.SqlResultLoggingService); var afts1 = new CalcDeviceDtoLogger(wd1.SqlResultLoggingService); var aft1 = afts1.Load(hhkeys.Where(x => x.KeyType == HouseholdKeyType.Household).ToList()); var afts2 = new CalcDeviceDtoLogger(wd2.SqlResultLoggingService); var aft2 = afts2.Load(hhkeys.Where(x => x.KeyType == HouseholdKeyType.Household).ToList()); var devices1 = aft1.Select(x => x.Name).OrderBy(x => x).ToList(); var devices2 = aft2.Select(x => x.Name).OrderBy(x => x).ToList(); devices1.Should().BeEquivalentTo(devices2); var rfel1 = new ResultFileEntryLogger(wd1.SqlResultLoggingService); var rfes1 = rfel1.Load(); var rfel2 = new ResultFileEntryLogger(wd2.SqlResultLoggingService); var rfes2 = rfel2.Load(); rfes1.Should().BeEquivalentTo(rfes2, o => o.Excluding( x => x.SelectedMemberPath.EndsWith("FullFileName", StringComparison.InvariantCultureIgnoreCase))); CompareCsv(rfes1, rfes2); wd1.CleanUp(); wd2.CleanUp(); } } }
public void ReadExistingFilesFromSql() { SqlResultLoggingService srls = new SqlResultLoggingService(_baseResultpath); HouseholdKeyLogger hhKeyLogger = new HouseholdKeyLogger(srls); var hhkes = hhKeyLogger.Load(); foreach (HouseholdKeyEntry entry in hhkes) { HouseholdRegistry.AddSavedEntry(entry); } var rfel = new ResultFileEntryLogger(srls); var rfes = rfel.Load(); ResultFileList.AddExistingEntries(rfes); _inputDataLogger.AddSaver(rfel); }
private static void CheckForOverdoneOffsets([NotNull] string path, [NotNull] SqlResultLoggingService srls) { //var actionsName = Path.Combine(path, "Reports", "ActionsEachStep.HH1.csv"); var wwDeviceProfiles = Path.Combine(path, "Results", "DeviceProfiles.Warm Water.csv"); HouseholdKeyLogger hkl = new HouseholdKeyLogger(srls); var hhkeys = hkl.Load(); if (hhkeys.Count != 2) { throw new LPGException("Unknown key"); } var selectedKey = hhkeys[1].HHKey; //SingleTimestepActionEntryLogger stael = new SingleTimestepActionEntryLogger(srls); ActionEntryLogger ael = new ActionEntryLogger(srls); // var actionEachStep = stael.Read(selectedKey); var actions = ael.Read(selectedKey); List <EnergyUseEntry> eues; using (var sr2 = new StreamReader(wwDeviceProfiles)) { eues = new List <EnergyUseEntry>(); var header = sr2.ReadLine(); if (header == null) { throw new LPGException("Readline failed"); } var headerarr = header.Split(';'); while (!sr2.EndOfStream) { var s = sr2.ReadLine(); if (s == null) { throw new LPGException("readline fail"); } var eue = new EnergyUseEntry(s, headerarr); eues.Add(eue); } sr2.Close(); } var breakfast = actions.First(x => x.AffordanceName == "eat breakfast (1 h)"); var brtimestep = breakfast.TimeStep.ExternalStep + 2; //+2 to cover varying duration. for (var i = 0; i < eues.Count; i++) { if (eues[i].Timestep != i) { throw new LPGException("Invalid timestep."); } } var stepcount = 2; const string sinkname = "HH1 - Kitchen - Kitchen Sink (5L/min) [L]"; while (Math.Abs(eues[brtimestep + stepcount].Values[sinkname]) < Constants.Ebsilon) { stepcount++; } if (stepcount > 25) { throw new LPGException("Stepcount between two warm water uses during breakfast was : " + stepcount + ", but it should be about 20. Timestep: " + brtimestep); } }
// ReSharper disable once CollectionNeverUpdated.Local public static void CheckForResultfile(string wd, CalcOption option) { var srls = new SqlResultLoggingService(wd); var rfel = new ResultFileEntryLogger(srls); var rfes = rfel.Load(); var foundOptions = new List <CalcOption>(); //collect all the file keys foreach (var rfe in rfes) { if (!File.Exists(rfe.FullFileName)) { throw new LPGException("File " + rfe.FullFileName + " was registered, but is not actually present."); } foundOptions.Add(rfe.EnablingCalcOption); } // ReSharper disable once CollectionNeverQueried.Local var allTables = new List <ResultTableDefinition>(); var hhKeyLogger = new HouseholdKeyLogger(srls); var keys = hhKeyLogger.Load(); foreach (var key in keys) { if (!srls.FilenameByHouseholdKey.ContainsKey(key.HHKey)) { continue; } var fn = srls.FilenameByHouseholdKey[key.HHKey]; if (!File.Exists(fn.Filename)) { continue; } var tables = srls.LoadTables(key.HHKey); allTables.AddRange(tables); foreach (var table in tables) { foundOptions.Add(table.EnablingOption); } } foundOptions = foundOptions.Distinct().ToList(); var optionsThatDontResultInFiles = new List <CalcOption>(); optionsThatDontResultInFiles.Add(CalcOption.MakePDF); optionsThatDontResultInFiles.Add(CalcOption.ActionCarpetPlot); optionsThatDontResultInFiles.Add(CalcOption.HouseholdPlan); optionsThatDontResultInFiles.Add(CalcOption.CalculationFlameChart); optionsThatDontResultInFiles.Add(CalcOption.MakeGraphics); optionsThatDontResultInFiles.Add(CalcOption.LogErrorMessages); optionsThatDontResultInFiles.Add(CalcOption.EnergyCarpetPlot); optionsThatDontResultInFiles.Add(CalcOption.DurationCurve); optionsThatDontResultInFiles.Add(CalcOption.TransportationDeviceCarpetPlot); optionsThatDontResultInFiles.Add(CalcOption.LocationCarpetPlot); if (!optionsThatDontResultInFiles.Contains(option)) { if (!foundOptions.Contains(option)) { throw new LPGException("Option found that doesn't result in any files"); } } var fftd = new FileFactoryAndTrackerDummy(); var cp = new CalculationProfiler(); var container = PostProcessingManager.RegisterEverything(wd, cp, fftd); var enabledOptions = new HashSet <CalcOption>(); enabledOptions.Add(option); using (var scope = container.BeginLifetimeScope()) { var odm = scope.Resolve <OptionDependencyManager>(); odm.EnableRequiredOptions(enabledOptions); } foreach (var enabledOption in enabledOptions) { foundOptions.Remove(enabledOption); } if (foundOptions.Contains(CalcOption.BasicOverview)) { foundOptions.Remove(CalcOption.BasicOverview); } if (foundOptions.Count > 0) { var s = string.Join("\n", foundOptions.Select(x => x.ToString())); throw new LPGException("found stuff that was not requested:" + s); } var filesthatdontneedtoregister = new List <string>(); filesthatdontneedtoregister.Add("finished.flag"); filesthatdontneedtoregister.Add("log.commandlinecalculation.txt"); filesthatdontneedtoregister.Add("results.general.sqlite"); filesthatdontneedtoregister.Add("results.general.sqlite-wal"); filesthatdontneedtoregister.Add("results.general.sqlite-shm"); filesthatdontneedtoregister.Add("results.hh1.sqlite"); filesthatdontneedtoregister.Add("results.hh1.sqlite-shm"); filesthatdontneedtoregister.Add("results.hh1.sqlite-wal"); filesthatdontneedtoregister.Add("results.house.sqlite"); filesthatdontneedtoregister.Add("results.house.sqlite-shm"); filesthatdontneedtoregister.Add("results.house.sqlite-wal"); filesthatdontneedtoregister.Add("calculationprofiler.json"); //check if all files are registered var di = new DirectoryInfo(wd); var files = di.GetFiles("*.*", SearchOption.AllDirectories); var registeredFiles = rfes.Select(x => x.FullFileName).ToList(); foreach (var file in files) { if (filesthatdontneedtoregister.Contains(file.Name.ToLower(CultureInfo.InvariantCulture))) { continue; } if (!registeredFiles.Contains(file.FullName)) { throw new LPGException("Found unregistered file: " + file.FullName); } } //foundKeys = foundKeys.Distinct().ToList(); //if (_resultFileIdsByCalcOption.ContainsKey(option)) { // var rl = _resultFileIdsByCalcOption[option]; // foreach (var key in rl.ResultKeys) { // if (!foundKeys.Contains(key)) { // throw new LPGException("in the found keys the file " + key + " is missing."); // } // } // foreach (var key in foundKeys) { // if (!rl.ResultKeys.Contains(key)) { // throw new LPGException("in the result list keys the file " + key + " is missing."); // } // } //} //else { // //todo: this needs to be done differently. need to disable as much as possible except the given calc option first. // var sb = new StringBuilder(); // sb.Append("--------------"); // sb.AppendLine(); // sb.Append("_resultFileIdsByCalcOption.Add(CalcOption." + option + ", ResultList.Make(CalcOption."); // sb.Append(option).Append(", "); // foreach (var key in foundKeys) { // sb.AppendLine(); // sb.Append("\"").Append(key).Append("\", "); // } // sb.Remove(sb.Length - 2, 2); // sb.Append("));"); // sb.AppendLine(); // sb.Append("--------------"); // Logger.Info(sb.ToString()); // //throw new LPGException(sb.ToString()); //} }
public void HouseJobForHouseTypes() { //setup Logger.Get().StartCollectingAllMessages(); using (DatabaseSetup db = new DatabaseSetup(Utili.GetCurrentMethodAndClass())) { Simulator sim = new Simulator(db.ConnectionString); using (WorkingDir wd = new WorkingDir(Utili.GetCurrentMethodAndClass())) { var count = 0; foreach (var houseType in sim.HouseTypes.It) { count++; if (count < 22) { continue; } Logger.Info("================================================"); Logger.Info("================================================"); Logger.Info("================================================"); Logger.Info("Starting " + houseType.Name); Logger.Info("================================================"); Logger.Info("================================================"); Logger.Info("================================================"); Logger.Get().StartCollectingAllMessages(); string htcode = houseType.Name.Substring(0, 4); //housedata const int targetheatdemand = 10000; HouseData houseData = new HouseData(Guid.NewGuid().ToStrGuid(), htcode, targetheatdemand, 1000, "HouseGeneratorJobHouse"); HouseCreationAndCalculationJob houseJob = new HouseCreationAndCalculationJob("present", "2019", "trafokreis", HouseDefinitionType.HouseData); houseJob.House = houseData; houseJob.CalcSpec = new JsonCalcSpecification { DefaultForOutputFiles = OutputFileDefault.Reasonable, StartDate = new DateTime(2017, 1, 1), EndDate = new DateTime(2017, 12, 31), GeographicLocation = sim.GeographicLocations.FindFirstByName("Berlin", FindMode.Partial) ?.GetJsonReference() ?? throw new LPGException("No Berlin in the DB"), TemperatureProfile = sim.TemperatureProfiles[0].GetJsonReference(), OutputDirectory = wd.Combine("Results." + htcode), SkipExisting = false, CalcOptions = new List <CalcOption> { CalcOption.HouseSumProfilesFromDetailedDats, CalcOption.DeviceProfilesIndividualHouseholds, CalcOption.EnergyStorageFile, CalcOption.EnergyCarpetPlot, CalcOption.HouseholdContents, CalcOption.TotalsPerLoadtype }, DeleteDAT = false }; StartHouseJob(houseJob, wd, htcode); SqlResultLoggingService srls = new SqlResultLoggingService(houseJob.CalcSpec.OutputDirectory); HouseholdKeyLogger hhkslogger = new HouseholdKeyLogger(srls); var hhks = hhkslogger.Load(); TotalsPerLoadtypeEntryLogger tel = new TotalsPerLoadtypeEntryLogger(srls); foreach (var entry in hhks) { if (entry.KeyType == HouseholdKeyType.General) { continue; } Logger.Info(entry.HHKey.ToString()); var res = tel.Read(entry.HHKey); foreach (var totalsEntry in res) { Logger.Info(totalsEntry.Loadtype + ": " + totalsEntry.Value); if (totalsEntry.Loadtype.Name == "Space Heating") { if (Math.Abs(totalsEntry.Value - targetheatdemand) > 10) { throw new LPGException("Target heat demand didn't match for " + houseType.Name); } } } } } } } }