private Dictionary <int, int> CreateJobIterationsDictionary(ParallelJobConfig config) { Dictionary <int, int> dict = new Dictionary <int, int>(); foreach (ParallelJob j in config.Jobs) { using (DataStore store = Session.CreateDataStore(new DataStoreConnection(Constants.SQLITE_DATASTORE_NAME, j.Library))) { int MergeScenarioId = this.m_STSimTransformer.STSimGetMergeScenarioId(store); string OutputFolderName = this.m_STSimTransformer.STSimGetJobOutputScenarioFolderName(j.Library, MergeScenarioId, false); if (!Directory.Exists(OutputFolderName)) { continue; } int numIterations = Convert.ToInt32(store.ExecuteScalar( "SELECT maximumIteration - minimumIteration + 1 FROM stsim_RunControl where scenarioId=" + MergeScenarioId), CultureInfo.InvariantCulture); Debug.Assert(j.JobId > 0); if (!dict.ContainsKey(j.JobId)) { dict.Add(j.JobId, numIterations); } else { Debug.Assert(false, "Job #'s should be unique when parsed from folder names"); } } } return(dict); }
private void ProcessAveragedOutputFiles(string datasheetName, string fileSpec) { ParallelJobConfig config = this.m_STSimTransformer.STSimLoadConfigurationFile(); Dictionary <int, int> dictJobIterations = CreateJobIterationsDictionary(config); Dictionary <string, List <string> > dictFilenames = CreateSameNameFilesDictionary(config, datasheetName, fileSpec); if (dictFilenames.Count == 0) { return; } int ttlIterations = 0; foreach (var jobId in dictJobIterations.Keys) { int numIterations = dictJobIterations[jobId]; ttlIterations += numIterations; } foreach (string k in dictFilenames.Keys) { RasterMerger m = new RasterMerger(); foreach (string f in dictFilenames[k]) { int jobId = this.m_STSimTransformer.STSimGetJobIdFromFolder(f); int numIterations = dictJobIterations[jobId]; if (jobId != 0 || numIterations > 0) { m.Merge(f, numIterations); File.SetAttributes(f, FileAttributes.Normal); File.Delete(f); } else { Debug.Assert(false, "Either the Job ID Or Number of iterations are invalid"); } } m.Multiply(1 / (double)ttlIterations); string newFilename = dictFilenames[k][0]; m.Save(newFilename, StochasticTime.Spatial.GetGeoTiffCompressionType(this.Library)); } }
private Dictionary <string, List <string> > CreateSameNameFilesDictionary( ParallelJobConfig config, string datasheetName, string fileSpec) { Dictionary <string, List <string> > dict = new Dictionary <string, List <string> >(); foreach (ParallelJob j in config.Jobs) { using (DataStore store = Session.CreateDataStore(new DataStoreConnection(Constants.SQLITE_DATASTORE_NAME, j.Library))) { int MergeScenarioId = this.m_STSimTransformer.STSimGetMergeScenarioId(store); string OutputFolderName = this.GetOutputFolderName(j.Library, MergeScenarioId, datasheetName); if (!Directory.Exists(OutputFolderName)) { continue; } foreach (string f in Directory.GetFiles(OutputFolderName, fileSpec)) { string key = Path.GetFileName(f).ToUpperInvariant(); if (!dict.ContainsKey(key)) { dict.Add(key, new List <string>()); } Debug.Assert(!(dict[key].Contains(f))); dict[key].Add(f); } } } return(dict); }