Пример #1
0
        /// <summary>
        /// Initializes the extension with a data file.
        /// </summary>
        public override void Initialize()
        {
            reinitialized = false;

            //initialize metadata
            MetadataHandler.InitializeMetadata(parameters.Timestep,
                                               parameters.StatusMapNames,
                                               parameters.MortMapNames,
                                               parameters.LogFileName,
                                               parameters.ManyAgentParameters,
                                               ModelCore);

            //get input params map names
            Timestep      = parameters.Timestep;
            statusMapName = parameters.StatusMapNames;
            mortMapNames  = parameters.MortMapNames;

            //initialize site variables:
            int numAgents = parameters.ManyAgentParameters.Count();

            SiteVars.Initialize(modelCore, numAgents);

            //Dispersal probdisp = new Dispersal();
            manyAgentParameters = parameters.ManyAgentParameters;
            int agentIndex = 0;

            //Initialize non-library climate data
            loadedClimateData = ClimateData.ReadClimateData(manyAgentParameters);

            foreach (IAgent activeAgent in manyAgentParameters)
            {
                if (activeAgent == null)
                {
                    ModelCore.UI.WriteLine("Agent Parameters NOT loading correctly.");
                }

                //read initial infection map and initialize cell status for each agent
                EpidemicRegions.ReadMap(activeAgent.InitEpiMap, agentIndex);
                agentIndex++;

                //initialize and populate dictionary with dispersal probabilities for current agent
                //probdisp.Initialize(activeAgent);
                Dispersal.Initialize(activeAgent);

                //Initialize climate data to calculate historic average for normalization
                ClimateVariableDefinition.CalculateHistoricClimateVariables(activeAgent);
            }
        }
Пример #2
0
        //---------------------------------------------------------------------

        public static ExternalClimateData ReadClimateData(IEnumerable <IAgent> manyAgentParameters)
        {
            ExternalClimateData climateData = new ExternalClimateData();

            climateData.ExternalData = new Dictionary <string, ExternalClimateYear>();
            List <string> fileList = new List <string>();

            foreach (IAgent agent in manyAgentParameters)
            {
                foreach (IClimateVariableDefinition climateVar in agent.ClimateVars)
                {
                    if (!(climateVar.SourceName.Equals("Library", StringComparison.OrdinalIgnoreCase)))
                    {
                        fileList.Add(climateVar.SourceName);
                        //climateData.ExternalData.Add(climateVar.SourceName, null);
                    }
                }
            }
            // Remove duplicate filenames from list
            List <string> filteredList = fileList.Distinct().ToList();

            foreach (string filename in filteredList)
            {
                //Read climate table
                DataTable weatherTable = ReadWeatherFile(filename);
                string[]  columnNames  = weatherTable.Columns.Cast <DataColumn>()
                                         .Select(x => x.ColumnName)
                                         .ToArray();
                List <int> yearList    = new List <int>();
                DataTable  uniqueYears = weatherTable.DefaultView.ToTable(true, "Year");
                foreach (DataRow dr in uniqueYears.Rows)
                {
                    int year = (int)dr["Year"];
                    yearList.Add(year);
                }
                List <int> ecoList   = new List <int>();
                DataTable  uniqueEco = weatherTable.DefaultView.ToTable(true, "EcoregionIndex");
                foreach (DataRow dr in uniqueEco.Rows)
                {
                    int eco = (int)dr["EcoregionIndex"];
                    ecoList.Add(eco);
                }
                ExternalClimateYear yearValues = new ExternalClimateYear();
                yearValues.YearClimate = new Dictionary <int, ExternalClimateEcoregion>();
                foreach (int year in yearList)
                {
                    ExternalClimateEcoregion ecoregionValues = new ExternalClimateEcoregion();
                    ecoregionValues.EcoregionClimate = new Dictionary <int, ExternalClimateVariableValues>();
                    foreach (int eco in ecoList)
                    {
                        ExternalClimateVariableValues externalValues = new ExternalClimateVariableValues();
                        externalValues.ClimateVariableValues = new Dictionary <string, double[]>();
                        foreach (string columnName in columnNames)
                        {
                            // Check for Year and EcoregionIndex variables
                            // All else store as climate variables (if numeric)
                            //FIXME - N/A if restricted to Climate Library
                            bool numericField = true;
                            if (columnName != "Year" && columnName != "EcoregionIndex")
                            {
                                List <double> varList = new List <double>();
                                foreach (DataRow dr in weatherTable.Rows)
                                {
                                    double value;
                                    if (!double.TryParse(dr[columnName].ToString(), out value))
                                    {
                                        numericField = false;
                                        break;
                                    }
                                    varList.Add(value);
                                }
                                if (numericField)
                                {
                                    double[] varArray = varList.ToArray <double>();
                                    externalValues.ClimateVariableValues.Add(columnName, varArray);
                                }
                            }
                        }
                        ecoregionValues.EcoregionClimate.Add(eco, externalValues);
                    }
                    yearValues.YearClimate.Add(year, ecoregionValues);
                }
                climateData.ExternalData.Add(filename, yearValues);
            }


            return(climateData);
        }