Methods for working with the template for map filenames.
        public static void InitializeMetadata(int Timestep,
                                              string severityMapFileName,
                                              string srdMapFileName,
                                              string nrdMapFileName,
                                              string logFileName,
                                              IEnumerable <IAgent> manyAgentParameters,
                                              ICore mCore)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                //String outputFolder = OutputPath.ReplaceTemplateVars("", FINISH ME LATER);
                //FolderName = System.IO.Directory.GetCurrentDirectory().Split("\\".ToCharArray()).Last(),
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
                //ProjectionFilePath = "Projection.?" //How do we get projections???
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep, //change this to PlugIn.TimeStep for other extensions
                ScenarioReplicationMetadata = scenRep
            };

            //---------------------------------------
            //          table outputs:
            //---------------------------------------

            //PlugIn.EventLog = new MetadataTable<EventsLog>(logFileName);
            PlugIn.EventLog = new MetadataTable <EventsLog>("bda-log.csv");

            OutputMetadata tblOut_events = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "EventLog",
                FilePath  = PlugIn.EventLog.FilePath,
                Visualize = false,
            };

            tblOut_events.RetriveFields(typeof(EventsLog));
            Extension.OutputMetadatas.Add(tblOut_events);

            //PlugIn.PDSILog = new MetadataTable<PDSI_Log>("PDSI_log.csv");

            //OutputMetadata tblOut_PDSI = new OutputMetadata()
            //{
            //    Type = OutputType.Table,
            //    Name = "PDSILog",
            //    FilePath = PlugIn.PDSILog.FilePath
            //};
            //tblOut_events.RetriveFields(typeof(PDSI_Log));
            //Extension.OutputMetadatas.Add(tblOut_PDSI);


            //---------------------------------------
            //          map outputs:
            //---------------------------------------

            foreach (IAgent activeAgent in manyAgentParameters)
            {
                string mapTypePath = MapNames.ReplaceTemplateVarsMetadata(severityMapFileName, activeAgent.AgentName);

                OutputMetadata mapOut_Severity = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = System.String.Format(activeAgent.AgentName + " Outbreak Severity"),
                    FilePath     = @mapTypePath,
                    Map_DataType = MapDataType.Ordinal,
                    Map_Unit     = FieldUnits.Severity_Rank,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_Severity);

                if (srdMapFileName != null)
                {
                    mapTypePath = MapNames.ReplaceTemplateVarsMetadata(srdMapFileName, activeAgent.AgentName);
                    OutputMetadata mapOut_SRD = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = "Site Resource Dominance",
                        FilePath     = @mapTypePath,
                        Map_DataType = MapDataType.Continuous,
                        Map_Unit     = FieldUnits.Percentage,
                        Visualize    = false,
                    };
                    Extension.OutputMetadatas.Add(mapOut_SRD);
                }

                if (nrdMapFileName != null)
                {
                    mapTypePath = MapNames.ReplaceTemplateVarsMetadata(nrdMapFileName, activeAgent.AgentName);
                    OutputMetadata mapOut_NRD = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = "Neighborhood Resource Dominance",
                        FilePath     = @mapTypePath,
                        Map_DataType = MapDataType.Continuous,
                        Map_Unit     = FieldUnits.Percentage,
                        Visualize    = false,
                    };
                    Extension.OutputMetadatas.Add(mapOut_NRD);
                }
            }
            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Esempio n. 2
0
        //---------------------------------------------------------------------
        ///<summary>
        /// Run the BDA extension at a particular timestep.
        ///</summary>
        public override void Run()
        {
            PlugIn.ModelCore.UI.WriteLine("   Processing landscape for BDA events ...");
            if (!reinitialized)
            {
                InitializePhase2();
            }

            //SiteVars.Epidemic.SiteValues = null;

            int eventCount = 0;

            foreach (IAgent activeAgent in manyAgentParameters)
            {
                activeAgent.TimeSinceLastEpidemic += Timestep;

                int ROS = RegionalOutbreakStatus(activeAgent, Timestep);

                if (ROS > 0)
                {
                    Epidemic.Initialize(activeAgent);
                    Epidemic currentEpic = Epidemic.Simulate(activeAgent,
                                                             PlugIn.ModelCore.CurrentTime,
                                                             Timestep,
                                                             ROS);
                    //activeAgent.TimeSinceLastEpidemic = activeAgent.TimeSinceLastEpidemic + Timestep;

                    if (currentEpic != null)
                    {
                        LogEvent(PlugIn.ModelCore.CurrentTime, currentEpic, ROS, activeAgent);

                        if (currentEpic.MeanSeverity > 0) //Temporary fix to work with VizTool
                        {
                            //----- Write BDA severity maps --------
                            string path = MapNames.ReplaceTemplateVars(mapNameTemplate, activeAgent.AgentName, PlugIn.ModelCore.CurrentTime);
                            //IOutputRaster<SeverityPixel> map = CreateMap(PlugIn.ModelCore.CurrentTime, activeAgent.AgentName);
                            //using (map) {
                            //    SeverityPixel pixel = new SeverityPixel();
                            using (IOutputRaster <ShortPixel> outputRaster = modelCore.CreateRaster <ShortPixel>(path, modelCore.Landscape.Dimensions))
                            {
                                ShortPixel pixel = outputRaster.BufferPixel;
                                foreach (Site site in PlugIn.ModelCore.Landscape.AllSites)
                                {
                                    if (site.IsActive)
                                    {
                                        if (SiteVars.Disturbed[site])
                                        {
                                            pixel.MapCode.Value = (short)(activeAgent.Severity[site] + 1);
                                        }
                                        else
                                        {
                                            pixel.MapCode.Value = 1;
                                        }
                                    }
                                    else
                                    {
                                        //  Inactive site
                                        pixel.MapCode.Value = 0;
                                    }
                                    outputRaster.WriteBufferPixel();
                                }
                            }
                        }
                        if (!(srdMapNames == null))
                        {
                            //----- Write BDA SRD maps --------
                            string path2 = MapNames.ReplaceTemplateVars(srdMapNames, activeAgent.AgentName, PlugIn.ModelCore.CurrentTime);
                            using (IOutputRaster <ShortPixel> outputRaster = modelCore.CreateRaster <ShortPixel>(path2, modelCore.Landscape.Dimensions))
                            {
                                ShortPixel pixel = outputRaster.BufferPixel;
                                foreach (Site site in PlugIn.ModelCore.Landscape.AllSites)
                                {
                                    if (site.IsActive)
                                    {
                                        pixel.MapCode.Value = (short)System.Math.Round(SiteVars.SiteResourceDom[site] * 100.00);
                                    }
                                    else
                                    {
                                        //  Inactive site
                                        pixel.MapCode.Value = 0;
                                    }
                                    outputRaster.WriteBufferPixel();
                                }
                            }
                        }
                        if (!(nrdMapNames == null))
                        {
                            //----- Write BDA NRD maps --------
                            string path3 = MapNames.ReplaceTemplateVars(nrdMapNames, activeAgent.AgentName, PlugIn.ModelCore.CurrentTime);
                            using (IOutputRaster <ShortPixel> outputRaster = modelCore.CreateRaster <ShortPixel>(path3, modelCore.Landscape.Dimensions))
                            {
                                ShortPixel pixel = outputRaster.BufferPixel;

                                foreach (Site site in PlugIn.ModelCore.Landscape.AllSites)
                                {
                                    if (site.IsActive)
                                    {
                                        pixel.MapCode.Value = (short)System.Math.Round(SiteVars.NeighborResourceDom[site] * 100.00);
                                    }
                                    else
                                    {
                                        //  Inactive site
                                        pixel.MapCode.Value = 0;
                                    }
                                    outputRaster.WriteBufferPixel();
                                }
                            }
                        }
                        if (!(vulnMapNames == null))
                        {
                            //----- Write BDA Vulnerability maps --------
                            string path4 = MapNames.ReplaceTemplateVars(vulnMapNames, activeAgent.AgentName, PlugIn.ModelCore.CurrentTime);
                            using (IOutputRaster <ShortPixel> outputRaster = modelCore.CreateRaster <ShortPixel>(path4, modelCore.Landscape.Dimensions))
                            {
                                ShortPixel pixel = outputRaster.BufferPixel;

                                foreach (Site site in PlugIn.ModelCore.Landscape.AllSites)
                                {
                                    if (site.IsActive)
                                    {
                                        pixel.MapCode.Value = (short)System.Math.Round(SiteVars.Vulnerability[site] * 100.00);
                                    }
                                    else
                                    {
                                        //  Inactive site
                                        pixel.MapCode.Value = 0;
                                    }
                                    outputRaster.WriteBufferPixel();
                                }
                            }
                        }

                        eventCount++;
                    }
                }
            }
        }