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