Exemple #1
0
        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);
        }
Exemple #2
0
        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));
            }
        }
Exemple #3
0
        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);
        }