public static void InitializeMetadata(int Timestep, string eventLogName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            CreateDirectory(eventLogName);
            PlugIn.eventsLog = new MetadataTable <EventsLog>(eventLogName);
            //PlugIn.eventLog = new MetadataTable<EventsLog>("Harvest-event-log.csv");
            //PlugIn.summaryLog = new MetadataTable<SummaryLog>("Harvest-summary-log.csv");

            PlugIn.ModelCore.UI.WriteLine("   Generating event table...");
            OutputMetadata tblOut_events = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "EventLog",
                FilePath  = PlugIn.eventsLog.FilePath,
                Visualize = false,
            };

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

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

            //OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "biomass removed",
            //    FilePath = @HarvestMapName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Mg_ha,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(int Timestep, string MapFileName, ICore mCore, string LogFileName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime //,
                                                             //ProjectionFilePath = "Projection.?"
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(LogFileName));
            PlugIn.eventLog = new MetadataTable <EventsLog>(LogFileName);

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

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


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

            OutputMetadata mapOut_Severity = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "severity",
                FilePath     = @MapFileName,
                Map_DataType = MapDataType.Ordinal,
                Map_Unit     = FieldUnits.Severity_Rank,
                Visualize    = true,
            };

            Extension.OutputMetadatas.Add(mapOut_Severity);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(int timestep, ICore mCore)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = Climate.ModelCore.CellArea,
                TimeMin           = Climate.ModelCore.StartTime,
                TimeMax           = Climate.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = "Climate-Library",
                TimeInterval = timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            Climate.PdsiLog    = new MetadataTable <PDSI_Log>("Climate-PDSI-log.csv");
            Climate.MonthlyLog = new MetadataTable <MonthlyLog>("Climate-monthly-log.csv");

            OutputMetadata tblOut_monthly = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "MonthlyLog",
                FilePath  = Climate.MonthlyLog.FilePath,
                Visualize = true,
            };

            tblOut_monthly.RetriveFields(typeof(MonthlyLog));
            Extension.OutputMetadatas.Add(tblOut_monthly);

            OutputMetadata tblOut_pdsi = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "PDSILog",
                FilePath  = Climate.PdsiLog.FilePath,
                Visualize = false,
            };

            tblOut_pdsi.RetriveFields(typeof(PDSI_Log));
            Extension.OutputMetadatas.Add(tblOut_pdsi);

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

            // NONE

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #4
0
        public static void InitializeMetadata(int Timestep, string MapFileName, IEnumerable <IModelDefinition> modelDefs, ICore mCore, string LogFileName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime //,
                                                             //ProjectionFilePath = "Projection.?"
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = PlugIn.PlugInName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

            /*
             * //---------------------------------------
             * //          table outputs:
             * //---------------------------------------
             * PlugIn.habitatLog = new MetadataTable<SpeciesHabitatLog>(LogFileName);
             * OutputMetadata tblOut_events = new OutputMetadata()
             * {
             *  Type = OutputType.Table,
             *  Name = "SppHabitatLog",
             *  FilePath = PlugIn.habitatLog.FilePath,
             *  Visualize = true,
             * };
             * tblOut_events.RetriveFields(typeof(SpeciesHabitatLog));
             * Extension.OutputMetadatas.Add(tblOut_events);
             */

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

            foreach (ModelDefinition sppModel in modelDefs)
            {
                OutputMetadata mapOut_Birds = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = sppModel.Name,
                    FilePath     = @MapFileName,
                    Map_DataType = MapDataType.Continuous,
                    //Map_Unit = FieldUnits.Severity_Rank,
                    Visualize = true,
                };
                Extension.OutputMetadatas.Add(mapOut_Birds);
            }
            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #5
0
        public static void InitializeMetadata(string speciesNameTemplate, IEnumerable <ISpecies> selectedSpecies)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = PlugIn.ModelCore.CurrentTime,
                ScenarioReplicationMetadata = scenRep
            };

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

            foreach (ISpecies species in selectedSpecies)
            {
                OutputMetadata mapOut_max = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "max_age_" + species.Name,
                    FilePath     = MapNameTemplates.ReplaceTemplateVars(speciesNameTemplate, species.Name, PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_max);
            }

            OutputMetadata mapOut_max_all = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "AllSppMaxAge",
                FilePath     = MapNameTemplates.ReplaceTemplateVars(speciesNameTemplate, "AllSppMaxAge", PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_max_all);



            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #6
0
        public static void InitializeMetadata(int Timestep)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

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

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

            //OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "biomass removed",
            //    FilePath = @HarvestMapName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Mg_ha,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);

            foreach (ISpecies species in PlugIn.speciesToMap)
            {
                foreach (AgeClass age in PlugIn.ages[species.Name])
                {
                    OutputMetadata mapOut_Species = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = species.Name,
                        FilePath     = PlugIn.MakeSpeciesMapName(species.Name, age.Name),
                        Map_DataType = MapDataType.Continuous,
                        Visualize    = true,
                        //Map_Unit = "categorical",
                    };
                    Extension.OutputMetadatas.Add(mapOut_Species);
                }
            }

            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(string MapFileTemplate, IEnumerable <IMapDefinition> maps)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

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

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

            //OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "biomass removed",
            //    FilePath = @HarvestMapName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Mg_ha,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);

            foreach (IMapDefinition map in maps)
            {
                OutputMetadata mapOut_bioReclass = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = map.Name,
                    FilePath     = MapFileNames.ReplaceTemplateVars(MapFileTemplate, map.Name, PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_bioReclass);
            }

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #8
0
        public static void InitializeMetadata(int Timestep, string SpeciesMapFileName, IEnumerable <ISuitabilityParameters> suitabilityParams, ICore mCore)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime //,
                                                             //ProjectionFilePath = "Projection.?"
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = PlugIn.PlugInName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };


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

            // NONE

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

            foreach (SuitabilityParameters habitatModel in suitabilityParams)
            {
                string sppMapPath = MapFileNames.ReplaceTemplateVars(SpeciesMapFileName, habitatModel.HabitatName);

                OutputMetadata mapOut_LocalHabitat = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = ("Local Habitat Map: " + habitatModel.HabitatName),
                    //sppModel.Name,
                    FilePath     = @sppMapPath,
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = "Habitat Class",
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_LocalHabitat);
            }
            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        private void describe_()
        {
            context["given the start command"] = () =>
            {
                OutputMetadata metaData = null;

                before = () => metaData = new OutputMetadata()
                {
                    ExecutionMetadata = new ExecutionMetadata()
                    {
                        StartCommand = "foo",
                    }
                };

                context["and some arguments"] = () =>
                {
                    before =
                        () =>
                            metaData.ExecutionMetadata.StartCommandArgs = new string[] {"bar", "baz"};

                    it["sets the detected start command"] = () =>
                    {
                        metaData.DetectedStartCommand.Web.should_be("foo bar baz");
                    };

                    it["returns execution_metadata as json string"] = () =>
                    {
                        metaData.execution_metadata.should_be("{\"start_command\":\"foo\",\"start_command_args\":[\"bar\",\"baz\"]}");
                    };
                };

                context["and no arguments"] = () =>
                {
                    it["sets the detected start command"] = () =>
                    {
                        metaData.DetectedStartCommand.Web.should_be("foo");
                    };

                    it["returns execution_metadata as json string"] = () =>
                    {
                        metaData.execution_metadata.should_be("{\"start_command\":\"foo\",\"start_command_args\":[]}");
                    };
                };
            };
        }
        public static void InitializeMetadata()
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = PlugIn.Parameters.Timestep,
                ScenarioReplicationMetadata = scenRep
            };

            //---------------------------------------
            //          Table output:
            //---------------------------------------

            CreateDirectory("Forest Roads Construction Log.csv");
            PlugIn.roadConstructionLog = new MetadataTable <RoadLog>("Forest Roads Construction Log.csv");


            PlugIn.ModelCore.UI.WriteLine("   Generating event table...");
            OutputMetadata tblOut_constructionLog = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "Forest Roads Construction Log.csv",
                FilePath  = "./",
                Visualize = true,
            };

            tblOut_constructionLog.RetriveFields(typeof(RoadLog));
            Extension.OutputMetadatas.Add(tblOut_constructionLog);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #11
0
        private void describe_()
        {
            context["given the start command"] = () =>
            {
                OutputMetadata outputMetadata = null;

                before = () =>
                {
                    outputMetadata = new OutputMetadata()
                    {
                        ExecutionMetadata = new ExecutionMetadata()
                        {
                            StartCommand     = "foo",
                            StartCommandArgs = new string[] {},
                        }
                    };
                };

                context["and some arguments"] = () =>
                {
                    before =
                        () =>
                        outputMetadata.ExecutionMetadata.StartCommandArgs = new string[]
                    {
                        "bar", "baz"
                    };

                    it["sets the detected start command"] = () =>
                    {
                        outputMetadata.ProcessTypes.Web.should_be("foo bar baz");
                    };
                };

                context["and no arguments"] = () =>
                {
                    it["sets the detected start command"] = () =>
                    {
                        outputMetadata.ProcessTypes.Web.should_be("foo");
                    };
                };
            };
        }
        private void describe_()
        {
            context["given the start command"] = () =>
            {
                OutputMetadata outputMetadata = null;

                before = () =>
                {
                    outputMetadata = new OutputMetadata()
                    {
                        ExecutionMetadata = new ExecutionMetadata() {
                        StartCommand = "foo",
                        StartCommandArgs = new string[] {},
                        }
                    };
                };

                context["and some arguments"] = () =>
                {
                    before =
                        () =>
                            outputMetadata.ExecutionMetadata.StartCommandArgs = new string[]
                            {
                                "bar", "baz"
                            };

                    it["sets the detected start command"] = () =>
                    {
                        outputMetadata.ProcessTypes.Web.should_be("foo bar baz");
                    };
                };

                context["and no arguments"] = () =>
                {
                    it["sets the detected start command"] = () =>
                    {
                        outputMetadata.ProcessTypes.Web.should_be("foo");
                    };
                };
            };
        }
Example #13
0
        public static void InitializeMetadata(int Timestep, string summaryLogName, bool makeTable)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = EcoregionData.ModelCore.CellArea,
                TimeMin           = EcoregionData.ModelCore.StartTime,
                TimeMax           = EcoregionData.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(EcoregionData.ModelCore)
            {
                Name         = Names.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            if (makeTable)
            {
                CreateDirectory(summaryLogName);

                SiteVars.summaryLogMortality = new MetadataTable <SummaryLogMortality>(summaryLogName);

                EcoregionData.ModelCore.UI.WriteLine("   Generating summary table...");
                OutputMetadata tblOut_summary = new OutputMetadata()
                {
                    Type      = OutputType.Table,
                    Name      = "SummaryLog",
                    FilePath  = SiteVars.summaryLogMortality.FilePath,
                    Visualize = true,
                };
                tblOut_summary.RetriveFields(typeof(SummaryLogMortality));
                Extension.OutputMetadatas.Add(tblOut_summary);
            }
        }
Example #14
0
        public static void InitializeMetadata(string summaryLogFileName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

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

            CreateDirectory(summaryLogFileName);
            PlugIn.summaryLog = new MetadataTable <SummaryLog>(summaryLogFileName);

            PlugIn.ModelCore.UI.WriteLine("   Generating summary table...");
            OutputMetadata tblOut_summary = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "SummaryLog",
                FilePath  = PlugIn.summaryLog.FilePath,
                Visualize = true,
            };

            tblOut_summary.RetriveFields(typeof(SummaryLog));
            Extension.OutputMetadatas.Add(tblOut_summary);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #15
0
        static ShaderGraphVfxAsset GenerateVfxShaderGraphAsset(VfxMasterNode masterNode)
        {
            var nl     = Environment.NewLine;
            var indent = new string(' ', 4);
            var asset  = ScriptableObject.CreateInstance <ShaderGraphVfxAsset>();
            var result = asset.compilationResult = new GraphCompilationResult();
            var mode   = GenerationMode.ForReals;
            var graph  = masterNode.owner;

            asset.lit           = masterNode.lit.isOn;
            asset.alphaClipping = masterNode.alphaTest.isOn;

            var assetGuid = masterNode.owner.assetGuid;
            var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid);
            var hlslName  = NodeUtils.GetHLSLSafeName(Path.GetFileNameWithoutExtension(assetPath));

            var ports = new List <MaterialSlot>();

            masterNode.GetInputSlots(ports);

            var nodes = new List <AbstractMaterialNode>();

            NodeUtils.DepthFirstCollectNodesFromNode(nodes, masterNode);

            var bodySb   = new ShaderStringBuilder(1);
            var registry = new FunctionRegistry(new ShaderStringBuilder(), true);

            foreach (var properties in graph.properties)
            {
                properties.ValidateConcretePrecision(graph.concretePrecision);
            }

            foreach (var node in nodes)
            {
                if (node is IGeneratesBodyCode bodyGenerator)
                {
                    bodySb.currentNode = node;
                    bodyGenerator.GenerateNodeCode(bodySb, mode);
                    bodySb.ReplaceInCurrentMapping(PrecisionUtil.Token, node.concretePrecision.ToShaderString());
                }

                if (node is IGeneratesFunction generatesFunction)
                {
                    registry.builder.currentNode = node;
                    generatesFunction.GenerateNodeFunction(registry, mode);
                }
            }
            bodySb.currentNode = null;

            var portNodeSets = new HashSet <AbstractMaterialNode> [ports.Count];

            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var port    = ports[portIndex];
                var nodeSet = new HashSet <AbstractMaterialNode>();
                NodeUtils.CollectNodeSet(nodeSet, port);
                portNodeSets[portIndex] = nodeSet;
            }

            var portPropertySets = new HashSet <Guid> [ports.Count];

            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                portPropertySets[portIndex] = new HashSet <Guid>();
            }

            foreach (var node in nodes)
            {
                if (!(node is PropertyNode propertyNode))
                {
                    continue;
                }

                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portNodeSet = portNodeSets[portIndex];
                    if (portNodeSet.Contains(node))
                    {
                        portPropertySets[portIndex].Add(propertyNode.propertyGuid);
                    }
                }
            }

            var shaderProperties = new PropertyCollector();

            foreach (var node in nodes)
            {
                node.CollectShaderProperties(shaderProperties, GenerationMode.ForReals);
            }

            asset.SetTextureInfos(shaderProperties.GetConfiguredTexutres());

            var codeSnippets      = new List <string>();
            var portCodeIndices   = new List <int> [ports.Count];
            var sharedCodeIndices = new List <int>();

            for (var i = 0; i < portCodeIndices.Length; i++)
            {
                portCodeIndices[i] = new List <int>();
            }

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"#include \"Assets/Scripts/URP/com.unity.shadergraph/ShaderGraphLibrary/Functions.hlsl\"{nl}");

            for (var registryIndex = 0; registryIndex < registry.names.Count; registryIndex++)
            {
                var name      = registry.names[registryIndex];
                var source    = registry.sources[name];
                var precision = source.nodes.First().concretePrecision;

                var hasPrecisionMismatch = false;
                var nodeNames            = new HashSet <string>();
                foreach (var node in source.nodes)
                {
                    nodeNames.Add(node.name);
                    if (node.concretePrecision != precision)
                    {
                        hasPrecisionMismatch = true;
                        break;
                    }
                }

                if (hasPrecisionMismatch)
                {
                    var message = new StringBuilder($"Precision mismatch for function {name}:");
                    foreach (var node in source.nodes)
                    {
                        message.AppendLine($"{node.name} ({node.guid}): {node.concretePrecision}");
                    }
                    throw new InvalidOperationException(message.ToString());
                }

                var code = source.code.Replace(PrecisionUtil.Token, precision.ToShaderString());
                code = $"// Node: {string.Join(", ", nodeNames)}{nl}{code}";
                var codeIndex = codeSnippets.Count;
                codeSnippets.Add(code + nl);
                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portNodeSet = portNodeSets[portIndex];
                    foreach (var node in source.nodes)
                    {
                        if (portNodeSet.Contains(node))
                        {
                            portCodeIndices[portIndex].Add(codeIndex);
                            break;
                        }
                    }
                }
            }

            foreach (var property in graph.properties)
            {
                if (property.isExposable && property.generatePropertyBlock)
                {
                    continue;
                }

                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portPropertySet = portPropertySets[portIndex];
                    if (portPropertySet.Contains(property.guid))
                    {
                        portCodeIndices[portIndex].Add(codeSnippets.Count);
                    }
                }

                codeSnippets.Add($"// Property: {property.displayName}{nl}{property.GetPropertyDeclarationString()}{nl}{nl}");
            }



            var inputStructName        = $"SG_Input_{assetGuid}";
            var outputStructName       = $"SG_Output_{assetGuid}";
            var evaluationFunctionName = $"SG_Evaluate_{assetGuid}";

            #region Input Struct

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"struct {inputStructName}{nl}{{{nl}");

            #region Requirements

            var portRequirements = new ShaderGraphRequirements[ports.Count];
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                portRequirements[portIndex] = ShaderGraphRequirements.FromNodes(portNodeSets[portIndex].ToList(), ports[portIndex].stageCapability);
            }

            var portIndices = new List <int>();
            portIndices.Capacity = ports.Count;

            void AddRequirementsSnippet(Func <ShaderGraphRequirements, bool> predicate, string snippet)
            {
                portIndices.Clear();
                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    if (predicate(portRequirements[portIndex]))
                    {
                        portIndices.Add(portIndex);
                    }
                }

                if (portIndices.Count > 0)
                {
                    foreach (var portIndex in portIndices)
                    {
                        portCodeIndices[portIndex].Add(codeSnippets.Count);
                    }

                    codeSnippets.Add($"{indent}{snippet};{nl}");
                }
            }

            void AddCoordinateSpaceSnippets(InterpolatorType interpolatorType, Func <ShaderGraphRequirements, NeededCoordinateSpace> selector)
            {
                foreach (var space in EnumInfo <CoordinateSpace> .values)
                {
                    var neededSpace = space.ToNeededCoordinateSpace();
                    AddRequirementsSnippet(r => (selector(r) & neededSpace) > 0, $"float3 {space.ToVariableName(interpolatorType)}");
                }
            }

            // TODO: Rework requirements system to make this better
            AddCoordinateSpaceSnippets(InterpolatorType.Normal, r => r.requiresNormal);
            AddCoordinateSpaceSnippets(InterpolatorType.Tangent, r => r.requiresTangent);
            AddCoordinateSpaceSnippets(InterpolatorType.BiTangent, r => r.requiresBitangent);
            AddCoordinateSpaceSnippets(InterpolatorType.ViewDirection, r => r.requiresViewDir);
            AddCoordinateSpaceSnippets(InterpolatorType.Position, r => r.requiresPosition);

            AddRequirementsSnippet(r => r.requiresVertexColor, $"float4 {ShaderGeneratorNames.VertexColor}");
            AddRequirementsSnippet(r => r.requiresScreenPosition, $"float4 {ShaderGeneratorNames.ScreenPosition}");
            AddRequirementsSnippet(r => r.requiresFaceSign, $"float4 {ShaderGeneratorNames.FaceSign}");

            foreach (var uvChannel in EnumInfo <UVChannel> .values)
            {
                AddRequirementsSnippet(r => r.requiresMeshUVs.Contains(uvChannel), $"half4 {uvChannel.GetUVName()}");
            }

            AddRequirementsSnippet(r => r.requiresTime, $"float3 {ShaderGeneratorNames.TimeParameters}");

            #endregion

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"}};{nl}{nl}");

            #endregion

            #region Output Struct

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"struct {outputStructName}{nl}{{");

            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var port = ports[portIndex];
                portCodeIndices[portIndex].Add(codeSnippets.Count);
                codeSnippets.Add($"{nl}{indent}{port.concreteValueType.ToShaderString(graph.concretePrecision)} {port.shaderOutputName}_{port.id};");
            }

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{nl}}};{nl}{nl}");

            #endregion

            #region Graph Function

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{outputStructName} {evaluationFunctionName}({nl}{indent}{inputStructName} IN");

            var inputProperties     = new List <AbstractShaderProperty>();
            var portPropertyIndices = new List <int> [ports.Count];
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                portPropertyIndices[portIndex] = new List <int>();
            }

            foreach (var property in graph.properties)
            {
                if (!property.isExposable || !property.generatePropertyBlock)
                {
                    continue;
                }

                var propertyIndex = inputProperties.Count;
                var codeIndex     = codeSnippets.Count;

                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portPropertySet = portPropertySets[portIndex];
                    if (portPropertySet.Contains(property.guid))
                    {
                        portCodeIndices[portIndex].Add(codeIndex);
                        portPropertyIndices[portIndex].Add(propertyIndex);
                    }
                }

                inputProperties.Add(property);
                codeSnippets.Add($",{nl}{indent}/* Property: {property.displayName} */ {property.GetPropertyAsArgumentString()}");
            }

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"){nl}{{");

            #region Node Code

            for (var mappingIndex = 0; mappingIndex < bodySb.mappings.Count; mappingIndex++)
            {
                var mapping = bodySb.mappings[mappingIndex];
                var code    = bodySb.ToString(mapping.startIndex, mapping.count);
                if (string.IsNullOrWhiteSpace(code))
                {
                    continue;
                }

                code = $"{nl}{indent}// Node: {mapping.node.name}{nl}{code}";
                var codeIndex = codeSnippets.Count;
                codeSnippets.Add(code);
                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portNodeSet = portNodeSets[portIndex];
                    if (portNodeSet.Contains(mapping.node))
                    {
                        portCodeIndices[portIndex].Add(codeIndex);
                    }
                }
            }

            #endregion

            #region Output Mapping

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{nl}{indent}// {masterNode.name}{nl}{indent}{outputStructName} OUT;{nl}");

            // Output mapping
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var port = ports[portIndex];
                portCodeIndices[portIndex].Add(codeSnippets.Count);
                codeSnippets.Add($"{indent}OUT.{port.shaderOutputName}_{port.id} = {masterNode.GetSlotValue(port.id, GenerationMode.ForReals, graph.concretePrecision)};{nl}");
            }

            #endregion

            // Function end
            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{indent}return OUT;{nl}}}{nl}");

            #endregion

            result.codeSnippets      = codeSnippets.ToArray();
            result.sharedCodeIndices = sharedCodeIndices.ToArray();
            result.outputCodeIndices = new IntArray[ports.Count];
            for (var i = 0; i < ports.Count; i++)
            {
                result.outputCodeIndices[i] = portCodeIndices[i].ToArray();
            }

            var outputMetadatas = new OutputMetadata[ports.Count];
            for (int portIndex = 0; portIndex < outputMetadatas.Length; portIndex++)
            {
                outputMetadatas[portIndex] = new OutputMetadata(portIndex, ports[portIndex].shaderOutputName, ports[portIndex].id);
            }

            asset.SetOutputs(outputMetadatas);

            asset.evaluationFunctionName = evaluationFunctionName;
            asset.inputStructName        = inputStructName;
            asset.outputStructName       = outputStructName;
            asset.portRequirements       = portRequirements;
            asset.concretePrecision      = graph.concretePrecision;
            asset.SetProperties(inputProperties);
            asset.outputPropertyIndices = new IntArray[ports.Count];
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                asset.outputPropertyIndices[portIndex] = portPropertyIndices[portIndex].ToArray();
            }

            return(asset);
        }
Example #16
0
        public static void InitializeMetadata(string speciesAgeMap, string siteAgeMap, string siteSpeciesMap, Dictionary <string, IEnumerable <ISpecies> > ageStatSpecies, List <string> siteAgeStats, List <string> siteSppStats)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = PlugIn.ModelCore.CurrentTime,
                ScenarioReplicationMetadata = scenRep
            };

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

            //OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "biomass removed",
            //    FilePath = @HarvestMapName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Mg_ha,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);

            foreach (KeyValuePair <string, IEnumerable <ISpecies> > sppAgeStatIter in ageStatSpecies)
            {
                CohortUtils.SpeciesCohortStatDelegate species_stat_func;

                switch (sppAgeStatIter.Key)
                {
                case "MAX":
                    species_stat_func = new CohortUtils.SpeciesCohortStatDelegate(CohortUtils.GetMaxAge);
                    break;

                case "MIN":
                    species_stat_func = new CohortUtils.SpeciesCohortStatDelegate(CohortUtils.GetMinAge);
                    break;

                case "MED":
                    species_stat_func = new CohortUtils.SpeciesCohortStatDelegate(CohortUtils.GetMedianAge);
                    break;

                case "AVG":
                    species_stat_func = new CohortUtils.SpeciesCohortStatDelegate(CohortUtils.GetAvgAge);
                    break;

                case "SD":
                    species_stat_func = new CohortUtils.SpeciesCohortStatDelegate(CohortUtils.GetStdDevAge);
                    break;

                default:
                    //this shouldn't ever occur
                    System.Console.WriteLine("Unhandled statistic: {0}, using MaxAge Instead", sppAgeStatIter.Key);
                    species_stat_func = new CohortUtils.SpeciesCohortStatDelegate(CohortUtils.GetMaxAge);
                    break;
                }

                foreach (ISpecies species in sppAgeStatIter.Value)
                {
                    OutputMetadata mapOut_age_stats = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = species.Name + "_age_stats_map",
                        FilePath     = SpeciesMapNames.ReplaceTemplateVars(speciesAgeMap, species.Name, sppAgeStatIter.Key, PlugIn.ModelCore.CurrentTime),
                        Map_DataType = MapDataType.Continuous,
                        Visualize    = true,
                        //Map_Unit = "categorical",
                    };
                    Extension.OutputMetadatas.Add(mapOut_age_stats);
                }
            }

            foreach (string ageStatIter in siteAgeStats)
            {
                CohortUtils.SiteCohortStatDelegate site_stat_func;
                switch (ageStatIter)
                {
                case "MAX":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetMaxAge);
                    break;

                case "MIN":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetMinAge);
                    break;

                case "MED":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetMedianAge);
                    break;

                case "AVG":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetAvgAge);
                    break;

                case "SD":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetStdDevAge);
                    break;

                case "COUNT":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetCohortCount);
                    break;

                case "RICH":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetAgeRichness);
                    break;

                case "EVEN":
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetAgeEvenness);
                    break;

                default:
                    System.Console.WriteLine("Unhandled statistic: {0}, using MaxAge Instead", ageStatIter);
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetMaxAge);
                    break;
                }

                OutputMetadata mapOut_site_age_stats = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = ageStatIter + "_age_stats_map",
                    FilePath     = SiteMapNames.ReplaceTemplateVars(siteAgeMap, ageStatIter, PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_site_age_stats);
            }
            foreach (string sppStatIter in siteSppStats)
            {
                CohortUtils.SiteCohortStatDelegate site_stat_func;
                switch (sppStatIter)
                {
                case "RICH":
                    //FIXME
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetSppRichness);
                    break;

                //add in richness
                default:
                    System.Console.WriteLine("Unhandled statistic: {0}, using Species Richness Instead", sppStatIter);
                    site_stat_func = new CohortUtils.SiteCohortStatDelegate(CohortUtils.GetSppRichness);
                    break;
                }

                OutputMetadata mapOut_site_species_stats = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = sppStatIter + "_age_stats_map",
                    FilePath     = SiteMapNames.ReplaceTemplateVars(siteSpeciesMap, sppStatIter, PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_site_species_stats);
            }

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #17
0
        /// <summary>
        /// Get the ModuleMetadata from a cmdlet assembly.
        /// </summary>
        /// <param name="assmeblyPath">Path to the cmdlet assembly.</param>
        /// <returns>ModuleMetadata containing information about the cmdlets found in the given assembly.</returns>
        public ModuleMetadata GetModuleMetadata(string assemblyPath)
        {
            List <CmdletMetadata> results = new List <CmdletMetadata>();

            ModuleMetadata = new ModuleMetadata();
            try
            {
                var assembly = Assembly.LoadFrom(assemblyPath);
                foreach (var type in assembly.GetCmdletTypes())
                {
                    var cmdlet     = type.GetAttribute <CmdletAttribute>();
                    var outputs    = type.GetAttributes <OutputTypeAttribute>();
                    var parameters = type.GetParameters();

                    var cmdletMetadata = new CmdletMetadata
                    {
                        VerbName                = cmdlet.VerbName,
                        NounName                = cmdlet.NounName,
                        ConfirmImpact           = cmdlet.ConfirmImpact,
                        SupportsPaging          = cmdlet.SupportsPaging,
                        SupportsShouldProcess   = cmdlet.SupportsShouldProcess,
                        ClassName               = type.FullName,
                        DefaultParameterSetName = cmdlet.DefaultParameterSetName ?? "__AllParameterSets"
                    };

                    if (type.HasAttribute <AliasAttribute>())
                    {
                        var aliases = type.GetAttributes <AliasAttribute>();
                        cmdletMetadata.AliasList.AddRange(
                            aliases.SelectMany(a => a.AliasNames));
                    }

                    foreach (var output in outputs)
                    {
                        foreach (var outputType in output.Type)
                        {
                            var outputMetadata = new OutputMetadata
                            {
                                Type = outputType.Type
                            };
                            outputMetadata.ParameterSets.AddRange(output.ParameterSetName);
                            cmdletMetadata.OutputTypes.Add(outputMetadata);
                        }
                    }

                    List <Parameter> globalParameters = new List <Parameter>();

                    foreach (var parameter in parameters)
                    {
                        if (string.Equals(parameter.Name, "Force", StringComparison.OrdinalIgnoreCase) && parameter.PropertyType == typeof(SwitchParameter))
                        {
                            cmdletMetadata.HasForceSwitch = true;
                        }

                        var parameterData = new Models.ParameterMetadata
                        {
                            Type = parameter.PropertyType,
                            Name = parameter.Name
                        };

                        if (parameter.HasAttribute <AliasAttribute>())
                        {
                            var aliases = parameter.GetAttributes <AliasAttribute>();
                            parameterData.AliasList.AddRange(
                                aliases.SelectMany(a => a.AliasNames));
                        }

                        if (parameter.HasAttribute <ValidateSetAttribute>())
                        {
                            var validateSet = parameter.GetAttribute <ValidateSetAttribute>();
                            parameterData.ValidateSet.AddRange(validateSet.ValidValues);
                        }

                        if (parameter.HasAttribute <ValidateRangeAttribute>())
                        {
                            var validateRange = parameter.GetAttribute <ValidateRangeAttribute>();
                            parameterData.ValidateRangeMin = Convert.ToInt64(validateRange.MinRange);
                            parameterData.ValidateRangeMax = Convert.ToInt64(validateRange.MaxRange);
                        }

                        parameterData.ValidateNotNullOrEmpty = parameter.HasAttribute <ValidateNotNullOrEmptyAttribute>();

                        cmdletMetadata.Parameters.Add(parameterData);

                        foreach (var parameterSet in parameter.GetAttributes <ParameterAttribute>())
                        {
                            var parameterSetMetadata = cmdletMetadata.ParameterSets.FirstOrDefault(s => s.Name.Equals(parameterSet.ParameterSetName));

                            if (parameterSetMetadata == null)
                            {
                                parameterSetMetadata = new Models.ParameterSetMetadata()
                                {
                                    Name = parameterSet.ParameterSetName ?? "__AllParameterSets"
                                };
                            }

                            Parameter param = new Parameter
                            {
                                ParameterMetadata = parameterData,
                                Mandatory         = parameterSet.Mandatory,
                                Position          = parameterSet.Position,
                                ValueFromPipeline = parameterSet.ValueFromPipeline,
                                ValueFromPipelineByPropertyName = parameterSet.ValueFromPipelineByPropertyName
                            };

                            if (parameterSet.ParameterSetName.Equals("__AllParameterSets"))
                            {
                                globalParameters.Add(param);
                            }

                            parameterSetMetadata.Parameters.Add(param);

                            if (parameterSetMetadata.Parameters.Count == 1)
                            {
                                cmdletMetadata.ParameterSets.Add(parameterSetMetadata);
                            }
                        }
                    }

                    foreach (var parameterSet in cmdletMetadata.ParameterSets)
                    {
                        if (parameterSet.Name.Equals("__AllParameterSets"))
                        {
                            continue;
                        }

                        foreach (var parameter in globalParameters)
                        {
                            var param = parameterSet.Parameters.FirstOrDefault(p => p.ParameterMetadata.Name.Equals(parameter.ParameterMetadata.Name));
                            if (param == null)
                            {
                                parameterSet.Parameters.Add(parameter);
                            }
                        }
                    }

                    if (!cmdletMetadata.ParameterSets
                        .Where(p => p.Name.Equals(cmdletMetadata.DefaultParameterSetName, StringComparison.OrdinalIgnoreCase))
                        .Any())
                    {
                        var defaultSet = new Models.ParameterSetMetadata()
                        {
                            Name = cmdletMetadata.DefaultParameterSetName
                        };
                        cmdletMetadata.ParameterSets.Add(defaultSet);
                    }

                    results.Add(cmdletMetadata);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            ModuleMetadata.Cmdlets = results;
            return(ModuleMetadata);
        }
        public static void InitializeMetadata(int timestep, ICore mCore,
                                              string SoilCarbonMapNames,
                                              string SoilNitrogenMapNames,
                                              string ANPPMapNames,
                                              string ANEEMapNames,
                                              string TotalCMapNames)
        //string LAIMapNames,
        //string ShadeClassMapNames)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = "NECN-Succession",
                TimeInterval = timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            Outputs.primaryLog      = new MetadataTable <PrimaryLog>("NECN-succession-log.csv");
            Outputs.primaryLogShort = new MetadataTable <PrimaryLogShort>("NECN-succession-log-short.csv");
            Outputs.monthlyLog      = new MetadataTable <MonthlyLog>("NECN-succession-monthly-log.csv");
            Outputs.reproductionLog = new MetadataTable <ReproductionLog>("NECN-reproduction-log.csv");

            OutputMetadata tblOut_monthly = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "MonthlyLog",
                FilePath  = Outputs.monthlyLog.FilePath,
                Visualize = true,
            };

            tblOut_monthly.RetriveFields(typeof(MonthlyLog));
            Extension.OutputMetadatas.Add(tblOut_monthly);

            OutputMetadata tblOut_primary = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "PrimaryLog",
                FilePath  = Outputs.primaryLog.FilePath,
                Visualize = false,
            };

            tblOut_primary.RetriveFields(typeof(PrimaryLog));
            Extension.OutputMetadatas.Add(tblOut_primary);

            OutputMetadata tblOut_primaryShort = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "PrimaryLogShort",
                FilePath  = Outputs.primaryLogShort.FilePath,
                Visualize = true,
            };

            tblOut_primaryShort.RetriveFields(typeof(PrimaryLogShort));
            Extension.OutputMetadatas.Add(tblOut_primaryShort);

            OutputMetadata tblOut_repro = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "ReproductionLog",
                FilePath  = Outputs.reproductionLog.FilePath,
                Visualize = false,
            };

            tblOut_repro.RetriveFields(typeof(ReproductionLog));
            Extension.OutputMetadatas.Add(tblOut_repro);
            //---------------------------------------
            //          map outputs:
            //---------------------------------------
            if (ANPPMapNames != null)
            {
                PlugIn.ModelCore.UI.WriteLine("  ANPP Map Names = \"{0}\" ...", ANPPMapNames);
                string[]       paths       = { @"NECN", "AG_NPP-{timestep}.img" };
                OutputMetadata mapOut_ANPP = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = "Aboveground Net Primary Production",
                    //FilePath = @"NECN\AG_NPP-{timestep}.img",
                    FilePath     = Path.Combine(paths),
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_ANPP);
            }

            if (ANEEMapNames != null)
            {
                string[]       paths      = { @"NECN", "NEE-{timestep}.img" };
                OutputMetadata mapOut_Nee = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = "Net Ecosystem Exchange",
                    //FilePath = @"NECN\NEE-{timestep}.img",
                    FilePath     = Path.Combine(paths),
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_Nee);
            }
            if (SoilCarbonMapNames != null)
            {
                string[]       paths      = { @"NECN", "SOC-{timestep}.img" };
                OutputMetadata mapOut_SOC = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = "Soil Organic Carbon",
                    //FilePath = @"NECN\SOC-{timestep}.img",
                    FilePath     = Path.Combine(paths),
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_SOC);
            }
            if (SoilNitrogenMapNames != null)
            {
                string[]       paths      = { @"NECN", "SON-{timestep}.img" };
                OutputMetadata mapOut_SON = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = "Soil Organic Nitrogen",
                    //FilePath = @"NECN\SON-{timestep}.img",
                    FilePath     = Path.Combine(paths),
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_N_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_SON);
            }
            if (TotalCMapNames != null)
            {
                string[]       paths         = { @"NECN", "TotalC-{timestep}.img" };
                OutputMetadata mapOut_TotalC = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = "Total Carbon",
                    //FilePath = @"NECN\TotalC-{timestep}.img",
                    FilePath     = Path.Combine(paths),
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_TotalC);
            }
//            if (LAImapnames != null) //These are new maps for testing and analysis purposes
//            {
//                OutputMetadata mapOut_LAI = new OutputMetadata()
//                {
//                    Type = OutputType.Map,
//                    Name = "LAI",
//                    FilePath = @"century\LAI-{timestep}.gis",  //century
//                    Map_DataType = MapDataType.Continuous,
//                   Map_Unit = FieldUnits.g_C_m2, //Not sure
//                    Visualize = true,
//                };
//                Extension.OutputMetadatas.Add(mapOut_LAI);
//            }
//            if (ShadeClassmapnames != null)
//            {
//                OutputMetadata mapOut_ShadeClass = new OutputMetadata()
//                {
//                    Type = OutputType.Map,
//                    Name = "ShadeClass",
//                    FilePath = @"century\ShadeClass-{timestep}.gis",  //century
//                    Map_DataType = MapDataType.Continuous,
//                   Map_Unit = FieldUnits.g_C_m2, //NOt sure
//                    Visualize = true,
//                };
//                Extension.OutputMetadatas.Add(mapOut_LAI);
//            }


            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(int timestep, ICore mCore)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = Climate.ModelCore.CellArea,
                TimeMin           = Climate.ModelCore.StartTime,
                TimeMax           = Climate.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = "Climate-Library",
                TimeInterval = timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            //Climate.PdsiLog = new MetadataTable<PDSI_Log>("Climate-PDSI-log.csv");
            Climate.SpinupInputLog = new MetadataTable <InputLog>("Climate-spinup-input-log.csv");
            Climate.FutureInputLog = new MetadataTable <InputLog>("Climate-future-input-log.csv");
            Climate.AnnualLog      = new MetadataTable <AnnualLog>("Climate-annual-log.csv");

            OutputMetadata tblOut_spinupInput = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "Spinup-Input-Log",
                FilePath  = Climate.SpinupInputLog.FilePath,
                Visualize = false,
            };

            tblOut_spinupInput.RetriveFields(typeof(InputLog));
            Extension.OutputMetadatas.Add(tblOut_spinupInput);

            OutputMetadata tblOut_futureInput = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "Future-Input-Log",
                FilePath  = Climate.FutureInputLog.FilePath,
                Visualize = false,
            };

            tblOut_futureInput.RetriveFields(typeof(InputLog));
            Extension.OutputMetadatas.Add(tblOut_futureInput);

            OutputMetadata tblOut_annual = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "Annual-Log",
                FilePath  = Climate.AnnualLog.FilePath,
                Visualize = false,
            };

            tblOut_annual.RetriveFields(typeof(AnnualLog));
            Extension.OutputMetadatas.Add(tblOut_annual);

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

            // NONE

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void Initialize(int Timestep, string outputMapName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

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

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

            //CreateDirectory(summaryLogName);
            //PlugIn.summaryLog = new MetadataTable<SummaryLog>(summaryLogName);

            //PlugIn.ModelCore.UI.WriteLine("   Generating summary table...");
            //OutputMetadata tblOut_summary = new OutputMetadata()
            //{
            //    Type = OutputType.Table,
            //    Name = "SummaryLog",
            //    FilePath = PlugIn.summaryLog.FilePath,
            //    Visualize = true,
            //};
            //tblOut_summary.RetriveFields(typeof(SummaryLog));
            //Extension.OutputMetadatas.Add(tblOut_summary);

            //2 kinds of maps: species and pool maps, maybe multiples of each?
            //---------------------------------------
            //          map outputs:
            //---------------------------------------

            OutputMetadata mapOut_Community = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "biomass removed",
                FilePath     = MapNames.ReplaceTemplateVars(outputMapName, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                //Map_Unit = FieldUnits.Mg_ha,
                //Visualize = true,
            };

            Extension.OutputMetadatas.Add(mapOut_Community);


            //foreach(ISpecies species in PlugIn.speciesToMap)
            //{
            //    OutputMetadata mapOut_Species = new OutputMetadata()
            //    {
            //        Type = OutputType.Map,
            //        Name = species.Name,
            //        FilePath = SpeciesMapNames.ReplaceTemplateVars(PlugIn.speciesTemplateToMap,
            //                                           species.Name,
            //                                           PlugIn.ModelCore.CurrentTime),
            //        Map_DataType = MapDataType.Continuous,
            //        Visualize = true,
            //        //Map_Unit = "categorical",
            //    };
            //    Extension.OutputMetadatas.Add(mapOut_Species);
            //}

            //OutputMetadata mapOut_TotalBiomass = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "TotalBiomass",
            //    FilePath = SpeciesMapNames.ReplaceTemplateVars(PlugIn.speciesTemplateToMap,
            //                           "TotalBiomass",
            //                           PlugIn.ModelCore.CurrentTime),
            //    Map_DataType = MapDataType.Continuous,
            //    Visualize = true,
            //    //Map_Unit = "categorical",
            //};
            //Extension.OutputMetadatas.Add(mapOut_TotalBiomass);

            //if(PlugIn.poolsToMap == "both" || PlugIn.poolsToMap == "woody")
            //{
            //    OutputMetadata mapOut_WoodyDebris = new OutputMetadata()
            //    {
            //        Type = OutputType.Map,
            //        Name = "WoodyDebrisMap",
            //        FilePath = PoolMapNames.ReplaceTemplateVars(PlugIn.poolsTemplateToMap,
            //                                               "woody",
            //                                               PlugIn.ModelCore.CurrentTime),
            //        Map_DataType = MapDataType.Continuous,
            //        Visualize = true,
            //        //Map_Unit = "categorical",
            //    };
            //    Extension.OutputMetadatas.Add(mapOut_WoodyDebris);
            //}
            //if(PlugIn.poolsToMap == "non-woody" || PlugIn.poolsToMap == "both")
            //{
            //    OutputMetadata mapOut_NonWoodyDebris = new OutputMetadata()
            //    {
            //        Type = OutputType.Map,
            //        Name = "NonWoodyDebrisMap",
            //        FilePath = PoolMapNames.ReplaceTemplateVars(PlugIn.poolsTemplateToMap,
            //                               "non-woody",
            //                               PlugIn.ModelCore.CurrentTime),
            //        Map_DataType = MapDataType.Continuous,
            //        Visualize = true,
            //        //Map_Unit = "categorical",
            //    };
            //    Extension.OutputMetadatas.Add(mapOut_NonWoodyDebris);
            //}

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #21
0
        public static void InitializeMetadata(string mapNameTemplate, string eventLogName, string summaryLogName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = PlugIn.ModelCore.CurrentTime,
                ScenarioReplicationMetadata = scenRep
            };

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

            CreateDirectory(eventLogName);
            CreateDirectory(summaryLogName);
            PlugIn.eventLog   = new MetadataTable <EventsLog>(eventLogName);
            PlugIn.summaryLog = new MetadataTable <SummaryLog>(summaryLogName);
            //PlugIn.eventLog = new MetadataTable<EventsLog>("Harvest-event-log.csv");
            //PlugIn.summaryLog = new MetadataTable<SummaryLog>("Harvest-summary-log.csv");

            PlugIn.ModelCore.UI.WriteLine("   Generating event table...");
            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.ModelCore.UI.WriteLine("   Generating summary table...");
            OutputMetadata tblOut_summary = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "SummaryLog",
                FilePath  = PlugIn.summaryLog.FilePath,
                Visualize = true,
            };

            tblOut_summary.RetriveFields(typeof(SummaryLog));
            Extension.OutputMetadatas.Add(tblOut_summary);

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

            OutputMetadata mapOut_fire_severity = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Fire_Severity_Map",
                FilePath     = MapNames.ReplaceTemplateVars(mapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_fire_severity);

            OutputMetadata mapOut_last_fire = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Time_Of_Last_Fire",
                FilePath     = MapNames.ReplaceTemplateVars("./DFFS-output/TimeOfLastFire-{timestep}.img", PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_last_fire);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(int Timestep, ICore mCore)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            PlugIn.ignitionsLog = new MetadataTable <IgnitionsLog>("scrapple-ignitions-log.csv");

            OutputMetadata tblOut_igns = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "ClimateFireIgnitionsLog",
                FilePath  = PlugIn.ignitionsLog.FilePath,
                Visualize = false,
            };

            tblOut_igns.RetriveFields(typeof(IgnitionsLog));
            Extension.OutputMetadatas.Add(tblOut_igns);

            PlugIn.eventLog = new MetadataTable <EventsLog>("scrapple-events-log.csv");

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

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

            PlugIn.summaryLog = new MetadataTable <SummaryLog>("scrapple-summary-log.csv");

            OutputMetadata tblSummaryOut_events = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "ClimateFireSummaryLog",
                FilePath  = PlugIn.summaryLog.FilePath,
                Visualize = false,
            };

            tblSummaryOut_events.RetriveFields(typeof(SummaryLog));
            Extension.OutputMetadatas.Add(tblSummaryOut_events);

            //---------------------------------------
            //          map outputs:
            //---------------------------------------
            string         intensityMapFileName = "scrapple-intensity.img";
            OutputMetadata mapOut_Intensity     = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Intensity",
                FilePath     = @intensityMapFileName,
                Map_DataType = MapDataType.Ordinal,
                Map_Unit     = FieldUnits.Severity_Rank,
                Visualize    = true,
            };

            Extension.OutputMetadatas.Add(mapOut_Intensity);

            //string specialDeadWoodMapFileName = "scrapple-dead-wood.img";
            //OutputMetadata mapOut_SpecialDead = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "SpecialDeadWood",
            //    FilePath = @specialDeadWoodMapFileName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.g_C_m2,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_Intensity);
            //OutputMetadata mapOut_Time = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "TimeLastFire",
            //    FilePath = @TimeMapFileName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Year,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_Time);
            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #23
0
        public static void InitializeMetadata(int Timestep, string SpeciesMapFileName, IEnumerable <IModelDefinition> modelDefs, ICore mCore, string LogFileName, string SpeciesLogFileNames)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime //,
                                                             //ProjectionFilePath = "Projection.?"
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = PlugIn.PlugInName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };


            //---------------------------------------
            //          table outputs:
            //---------------------------------------
            if (LogFileName != null)
            {
                System.IO.Directory.CreateDirectory(Path.GetDirectoryName(LogFileName));
                PlugIn.habitatLog = new MetadataTable <SpeciesHabitatLog>(LogFileName);
                OutputMetadata tblOut_events = new OutputMetadata()
                {
                    Type      = OutputType.Table,
                    Name      = "SppHabitatLog",
                    FilePath  = PlugIn.habitatLog.FilePath,
                    Visualize = true,
                };
                tblOut_events.RetriveFields(typeof(SpeciesHabitatLog));
                Extension.OutputMetadatas.Add(tblOut_events);
            }
            if (SpeciesLogFileNames != null)
            {
                PlugIn.sppLogs = new MetadataTable <IndividualSpeciesHabitatLog> [50];
                int selectModelCount = 0;
                foreach (ModelDefinition sppModel in modelDefs)
                {
                    string sppLogPath = BirdHabitat.SpeciesLogFileNames.ReplaceTemplateVars(SpeciesLogFileNames, sppModel.Name);
                    System.IO.Directory.CreateDirectory(Path.GetDirectoryName(sppLogPath));
                    PlugIn.sppLogs[selectModelCount] = new MetadataTable <IndividualSpeciesHabitatLog>(sppLogPath);
                    selectModelCount++;

                    OutputMetadata tblOut_events = new OutputMetadata()
                    {
                        Type      = OutputType.Table,
                        Name      = ("SpeciesLog_" + sppModel.Name),
                        FilePath  = sppLogPath,
                        Visualize = true,
                    };
                    tblOut_events.RetriveFields(typeof(IndividualSpeciesHabitatLog));
                    Extension.OutputMetadatas.Add(tblOut_events);
                }
            }

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

            foreach (ModelDefinition sppModel in modelDefs)
            {
                string sppMapPath = SpeciesMapFileNames.ReplaceTemplateVars(SpeciesMapFileName, sppModel.Name);

                OutputMetadata mapOut_Birds = new OutputMetadata()
                {
                    Type = OutputType.Map,
                    Name = ("Species Habitat Map: " + sppModel.Name),
                    //sppModel.Name,
                    FilePath     = @sppMapPath,
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = "Index of Abundance",
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_Birds);
            }
            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #24
0
        public static void InitializeMetadata(int Timestep, string summaryLogName, bool makeTable)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            if (makeTable)
            {
                CreateDirectory(summaryLogName);
                PlugIn.summaryLog = new MetadataTable <SummaryLog>(summaryLogName);

                PlugIn.ModelCore.UI.WriteLine("   Generating summary table...");
                OutputMetadata tblOut_summary = new OutputMetadata()
                {
                    Type      = OutputType.Table,
                    Name      = "SummaryLog",
                    FilePath  = PlugIn.summaryLog.FilePath,
                    Visualize = true,
                };
                tblOut_summary.RetriveFields(typeof(SummaryLog));
                Extension.OutputMetadatas.Add(tblOut_summary);
            }

            //2 kinds of maps: species and pool maps, maybe multiples of each?
            //---------------------------------------
            //          map outputs:
            //---------------------------------------


            foreach (ISpecies species in PlugIn.speciesToMap)
            {
                OutputMetadata mapOut_Species = new OutputMetadata()
                {
                    Type     = OutputType.Map,
                    Name     = species.Name,
                    FilePath = SpeciesMapNames.ReplaceTemplateVars(PlugIn.speciesTemplateToMap,
                                                                   species.Name,
                                                                   PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_Species);
            }

            OutputMetadata mapOut_TotalBiomass = new OutputMetadata()
            {
                Type     = OutputType.Map,
                Name     = "TotalBiomass",
                FilePath = SpeciesMapNames.ReplaceTemplateVars(PlugIn.speciesTemplateToMap,
                                                               "TotalBiomass",
                                                               PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_TotalBiomass);

            if (PlugIn.poolsToMap == "both" || PlugIn.poolsToMap == "woody")
            {
                OutputMetadata mapOut_WoodyDebris = new OutputMetadata()
                {
                    Type     = OutputType.Map,
                    Name     = "WoodyDebrisMap",
                    FilePath = PoolMapNames.ReplaceTemplateVars(PlugIn.poolsTemplateToMap,
                                                                "woody",
                                                                PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_WoodyDebris);
            }
            if (PlugIn.poolsToMap == "non-woody" || PlugIn.poolsToMap == "both")
            {
                OutputMetadata mapOut_NonWoodyDebris = new OutputMetadata()
                {
                    Type     = OutputType.Map,
                    Name     = "NonWoodyDebrisMap",
                    FilePath = PoolMapNames.ReplaceTemplateVars(PlugIn.poolsTemplateToMap,
                                                                "non-woody",
                                                                PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_NonWoodyDebris);
            }

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #25
0
        public static void InitializeMetadata(string mapNameTemplate, string pctConiferMapNameTemplate, string pctDeadFirMapNameTemplate)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = PlugIn.ModelCore.CurrentTime,
                ScenarioReplicationMetadata = scenRep
            };

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

            OutputMetadata mapOut_fuel = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Fuel_Map",
                FilePath     = MapNames.ReplaceTemplateVars(mapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_fuel);

            OutputMetadata mapOut_pctCon = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Percent_Connifer",
                FilePath     = MapNames.ReplaceTemplateVars(pctConiferMapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_pctCon);

            OutputMetadata mapOut_pctFir = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Percent_Dead_Fir",
                FilePath     = MapNames.ReplaceTemplateVars(pctDeadFirMapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
                //Map_Unit = "categorical",
            };

            Extension.OutputMetadatas.Add(mapOut_pctFir);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(int timestep, ICore mCore,
                                              string SoilCarbonMapNames,
                                              string SoilNitrogenMapNames,
                                              string ANPPMapNames,
                                              string ANEEMapNames,
                                              string TotalCMapNames)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(mCore)
            {
                Name         = "NECN-Succession",
                TimeInterval = timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            Outputs.primaryLog      = new MetadataTable <PrimaryLog>("NECN-succession-log.csv");
            Outputs.primaryLogShort = new MetadataTable <PrimaryLogShort>("NECN-succession-log-short.csv");
            Outputs.monthlyLog      = new MetadataTable <MonthlyLog>("NECN-succession-monthly-log.csv");

            OutputMetadata tblOut_monthly = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "MonthlyLog",
                FilePath  = Outputs.monthlyLog.FilePath,
                Visualize = true,
            };

            tblOut_monthly.RetriveFields(typeof(MonthlyLog));
            Extension.OutputMetadatas.Add(tblOut_monthly);

            OutputMetadata tblOut_primary = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "PrimaryLog",
                FilePath  = Outputs.primaryLog.FilePath,
                Visualize = false,
            };

            tblOut_primary.RetriveFields(typeof(PrimaryLog));
            Extension.OutputMetadatas.Add(tblOut_primary);

            OutputMetadata tblOut_primaryShort = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "PrimaryLogShort",
                FilePath  = Outputs.primaryLogShort.FilePath,
                Visualize = true,
            };

            tblOut_primaryShort.RetriveFields(typeof(PrimaryLogShort));
            Extension.OutputMetadatas.Add(tblOut_primaryShort);

            //---------------------------------------
            //          map outputs:
            //---------------------------------------
            if (ANPPMapNames != null)
            {
                OutputMetadata mapOut_ANPP = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Aboveground Net Primary Production",
                    FilePath     = @"NECN\AG_NPP-{timestep}.gis", //century
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_ANPP);
            }

            if (ANEEMapNames != null)
            {
                OutputMetadata mapOut_Nee = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Net Ecosystem Exchange",
                    FilePath     = @"NECN\NEE-{timestep}.gis", //century
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_Nee);
            }
            if (SoilCarbonMapNames != null)
            {
                OutputMetadata mapOut_SOC = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Soil Organic Carbon",
                    FilePath     = @"NECN\SOC-{timestep}.gis", //century
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_SOC);
            }
            if (SoilNitrogenMapNames != null)
            {
                OutputMetadata mapOut_SON = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Soil Organic Nitrogen",
                    FilePath     = @"NECN\SON-{timestep}.gis", //century
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_N_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_SON);
            }
            if (TotalCMapNames != null)
            {
                OutputMetadata mapOut_TotalC = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Total Carbon",
                    FilePath     = @"NECN\TotalC-{timestep}.gis",
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.g_C_m2,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_TotalC);
            }


            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #27
0
        // TODO: Fix this
        static ShaderGraphVfxAsset GenerateVfxShaderGraphAsset(GraphData graph)
        {
            var target = graph.activeTargets.FirstOrDefault(x => x is VFXTarget) as VFXTarget;

            if (target == null)
            {
                return(null);
            }

            var nl     = Environment.NewLine;
            var indent = new string(' ', 4);
            var asset  = ScriptableObject.CreateInstance <ShaderGraphVfxAsset>();
            var result = asset.compilationResult = new GraphCompilationResult();
            var mode   = GenerationMode.ForReals;

            asset.lit           = target.lit;
            asset.alphaClipping = target.alphaTest;

            var assetGuid = graph.assetGuid;
            var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid);
            var hlslName  = NodeUtils.GetHLSLSafeName(Path.GetFileNameWithoutExtension(assetPath));

            var ports = new List <MaterialSlot>();
            var nodes = new List <AbstractMaterialNode>();

            foreach (var vertexBlock in graph.vertexContext.blocks)
            {
                vertexBlock.value.GetInputSlots(ports);
                NodeUtils.DepthFirstCollectNodesFromNode(nodes, vertexBlock);
            }

            foreach (var fragmentBlock in graph.fragmentContext.blocks)
            {
                fragmentBlock.value.GetInputSlots(ports);
                NodeUtils.DepthFirstCollectNodesFromNode(nodes, fragmentBlock);
            }

            //Remove inactive blocks from generation
            {
                var tmpCtx = new TargetActiveBlockContext(new List <BlockFieldDescriptor>(), null);
                target.GetActiveBlocks(ref tmpCtx);
                ports.RemoveAll(materialSlot =>
                {
                    return(!tmpCtx.activeBlocks.Any(o => materialSlot.RawDisplayName() == o.displayName));
                });
            }

            var bodySb   = new ShaderStringBuilder(1);
            var registry = new FunctionRegistry(new ShaderStringBuilder(), true);

            foreach (var properties in graph.properties)
            {
                properties.ValidateConcretePrecision(graph.concretePrecision);
            }

            foreach (var node in nodes)
            {
                if (node is IGeneratesBodyCode bodyGenerator)
                {
                    bodySb.currentNode = node;
                    bodyGenerator.GenerateNodeCode(bodySb, mode);
                    bodySb.ReplaceInCurrentMapping(PrecisionUtil.Token, node.concretePrecision.ToShaderString());
                }

                if (node is IGeneratesFunction generatesFunction)
                {
                    registry.builder.currentNode = node;
                    generatesFunction.GenerateNodeFunction(registry, mode);
                }
            }
            bodySb.currentNode = null;

            var portNodeSets = new HashSet <AbstractMaterialNode> [ports.Count];

            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var port    = ports[portIndex];
                var nodeSet = new HashSet <AbstractMaterialNode>();
                NodeUtils.CollectNodeSet(nodeSet, port);
                portNodeSets[portIndex] = nodeSet;
            }

            var portPropertySets = new HashSet <string> [ports.Count];

            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                portPropertySets[portIndex] = new HashSet <string>();
            }

            foreach (var node in nodes)
            {
                if (!(node is PropertyNode propertyNode))
                {
                    continue;
                }

                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portNodeSet = portNodeSets[portIndex];
                    if (portNodeSet.Contains(node))
                    {
                        portPropertySets[portIndex].Add(propertyNode.property.objectId);
                    }
                }
            }

            var shaderProperties = new PropertyCollector();

            foreach (var node in nodes)
            {
                node.CollectShaderProperties(shaderProperties, GenerationMode.ForReals);
            }

            asset.SetTextureInfos(shaderProperties.GetConfiguredTexutres());

            var codeSnippets      = new List <string>();
            var portCodeIndices   = new List <int> [ports.Count];
            var sharedCodeIndices = new List <int>();

            for (var i = 0; i < portCodeIndices.Length; i++)
            {
                portCodeIndices[i] = new List <int>();
            }

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"#include \"Packages/com.unity.shadergraph/ShaderGraphLibrary/Functions.hlsl\"{nl}");

            for (var registryIndex = 0; registryIndex < registry.names.Count; registryIndex++)
            {
                var name      = registry.names[registryIndex];
                var source    = registry.sources[name];
                var precision = source.nodes.First().concretePrecision;

                var hasPrecisionMismatch = false;
                var nodeNames            = new HashSet <string>();
                foreach (var node in source.nodes)
                {
                    nodeNames.Add(node.name);
                    if (node.concretePrecision != precision)
                    {
                        hasPrecisionMismatch = true;
                        break;
                    }
                }

                if (hasPrecisionMismatch)
                {
                    var message = new StringBuilder($"Precision mismatch for function {name}:");
                    foreach (var node in source.nodes)
                    {
                        message.AppendLine($"{node.name} ({node.objectId}): {node.concretePrecision}");
                    }
                    throw new InvalidOperationException(message.ToString());
                }

                var code = source.code.Replace(PrecisionUtil.Token, precision.ToShaderString());
                code = $"// Node: {string.Join(", ", nodeNames)}{nl}{code}";
                var codeIndex = codeSnippets.Count;
                codeSnippets.Add(code + nl);
                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portNodeSet = portNodeSets[portIndex];
                    foreach (var node in source.nodes)
                    {
                        if (portNodeSet.Contains(node))
                        {
                            portCodeIndices[portIndex].Add(codeIndex);
                            break;
                        }
                    }
                }
            }

            foreach (var property in graph.properties)
            {
                if (property.isExposable && property.generatePropertyBlock)
                {
                    continue;
                }

                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portPropertySet = portPropertySets[portIndex];
                    if (portPropertySet.Contains(property.objectId))
                    {
                        portCodeIndices[portIndex].Add(codeSnippets.Count);
                    }
                }

                ShaderStringBuilder builder = new ShaderStringBuilder();
                property.ForeachHLSLProperty(h => h.AppendTo(builder));

                codeSnippets.Add($"// Property: {property.displayName}{nl}{builder.ToCodeBlock()}{nl}{nl}");
            }


            var inputStructName        = $"SG_Input_{assetGuid}";
            var outputStructName       = $"SG_Output_{assetGuid}";
            var evaluationFunctionName = $"SG_Evaluate_{assetGuid}";

            #region Input Struct

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"struct {inputStructName}{nl}{{{nl}");

            #region Requirements

            var portRequirements = new ShaderGraphRequirements[ports.Count];
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var requirementsNodes = portNodeSets[portIndex].ToList();
                requirementsNodes.Add(ports[portIndex].owner);
                portRequirements[portIndex] = ShaderGraphRequirements.FromNodes(requirementsNodes, ports[portIndex].stageCapability);
            }

            var portIndices = new List <int>();
            portIndices.Capacity = ports.Count;

            void AddRequirementsSnippet(Func <ShaderGraphRequirements, bool> predicate, string snippet)
            {
                portIndices.Clear();
                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    if (predicate(portRequirements[portIndex]))
                    {
                        portIndices.Add(portIndex);
                    }
                }

                if (portIndices.Count > 0)
                {
                    foreach (var portIndex in portIndices)
                    {
                        portCodeIndices[portIndex].Add(codeSnippets.Count);
                    }

                    codeSnippets.Add($"{indent}{snippet};{nl}");
                }
            }

            void AddCoordinateSpaceSnippets(InterpolatorType interpolatorType, Func <ShaderGraphRequirements, NeededCoordinateSpace> selector)
            {
                foreach (var space in EnumInfo <CoordinateSpace> .values)
                {
                    var neededSpace = space.ToNeededCoordinateSpace();
                    AddRequirementsSnippet(r => (selector(r) & neededSpace) > 0, $"float3 {space.ToVariableName(interpolatorType)}");
                }
            }

            // TODO: Rework requirements system to make this better
            AddCoordinateSpaceSnippets(InterpolatorType.Normal, r => r.requiresNormal);
            AddCoordinateSpaceSnippets(InterpolatorType.Tangent, r => r.requiresTangent);
            AddCoordinateSpaceSnippets(InterpolatorType.BiTangent, r => r.requiresBitangent);
            AddCoordinateSpaceSnippets(InterpolatorType.ViewDirection, r => r.requiresViewDir);
            AddCoordinateSpaceSnippets(InterpolatorType.Position, r => r.requiresPosition);

            AddRequirementsSnippet(r => r.requiresVertexColor, $"float4 {ShaderGeneratorNames.VertexColor}");
            AddRequirementsSnippet(r => r.requiresScreenPosition, $"float4 {ShaderGeneratorNames.ScreenPosition}");
            AddRequirementsSnippet(r => r.requiresFaceSign, $"float4 {ShaderGeneratorNames.FaceSign}");

            foreach (var uvChannel in EnumInfo <UVChannel> .values)
            {
                AddRequirementsSnippet(r => r.requiresMeshUVs.Contains(uvChannel), $"half4 {uvChannel.GetUVName()}");
            }

            AddRequirementsSnippet(r => r.requiresTime, $"float3 {ShaderGeneratorNames.TimeParameters}");

            #endregion

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"}};{nl}{nl}");

            #endregion

            // VFX Code heavily relies on the slotId from the original MasterNodes
            // Since we keep these around for upgrades anyway, for now it is simpler to use them
            // Therefore we remap the output blocks back to the original Ids here
            var originialPortIds = new int[ports.Count];
            for (int i = 0; i < originialPortIds.Length; i++)
            {
                if (!VFXTarget.s_BlockMap.TryGetValue((ports[i].owner as BlockNode).descriptor, out var originalId))
                {
                    continue;
                }

                // In Master Nodes we had a different BaseColor/Color slot id between Unlit/Lit
                // In the stack we use BaseColor for both cases. Catch this here.
                if (asset.lit && originalId == ShaderGraphVfxAsset.ColorSlotId)
                {
                    originalId = ShaderGraphVfxAsset.BaseColorSlotId;
                }

                originialPortIds[i] = originalId;
            }

            #region Output Struct

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"struct {outputStructName}{nl}{{");

            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var port = ports[portIndex];
                portCodeIndices[portIndex].Add(codeSnippets.Count);
                codeSnippets.Add($"{nl}{indent}{port.concreteValueType.ToShaderString(graph.concretePrecision)} {port.shaderOutputName}_{originialPortIds[portIndex]};");
            }

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{nl}}};{nl}{nl}");

            #endregion

            #region Graph Function

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{outputStructName} {evaluationFunctionName}({nl}{indent}{inputStructName} IN");

            var inputProperties     = new List <AbstractShaderProperty>();
            var portPropertyIndices = new List <int> [ports.Count];
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                portPropertyIndices[portIndex] = new List <int>();
            }

            foreach (var property in graph.properties)
            {
                if (!property.isExposable || !property.generatePropertyBlock)
                {
                    continue;
                }

                var propertyIndex = inputProperties.Count;
                var codeIndex     = codeSnippets.Count;

                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portPropertySet = portPropertySets[portIndex];
                    if (portPropertySet.Contains(property.objectId))
                    {
                        portCodeIndices[portIndex].Add(codeIndex);
                        portPropertyIndices[portIndex].Add(propertyIndex);
                    }
                }

                inputProperties.Add(property);
                codeSnippets.Add($",{nl}{indent}/* Property: {property.displayName} */ {property.GetPropertyAsArgumentString()}");
            }

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"){nl}{{");

            #region Node Code

            for (var mappingIndex = 0; mappingIndex < bodySb.mappings.Count; mappingIndex++)
            {
                var mapping = bodySb.mappings[mappingIndex];
                var code    = bodySb.ToString(mapping.startIndex, mapping.count);
                if (string.IsNullOrWhiteSpace(code))
                {
                    continue;
                }

                code = $"{nl}{indent}// Node: {mapping.node.name}{nl}{code}";
                var codeIndex = codeSnippets.Count;
                codeSnippets.Add(code);
                for (var portIndex = 0; portIndex < ports.Count; portIndex++)
                {
                    var portNodeSet = portNodeSets[portIndex];
                    if (portNodeSet.Contains(mapping.node))
                    {
                        portCodeIndices[portIndex].Add(codeIndex);
                    }
                }
            }

            #endregion

            #region Output Mapping

            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{nl}{indent}// VFXMasterNode{nl}{indent}{outputStructName} OUT;{nl}");

            // Output mapping
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                var port = ports[portIndex];
                portCodeIndices[portIndex].Add(codeSnippets.Count);
                codeSnippets.Add($"{indent}OUT.{port.shaderOutputName}_{originialPortIds[portIndex]} = {port.owner.GetSlotValue(port.id, GenerationMode.ForReals, graph.concretePrecision)};{nl}");
            }

            #endregion

            // Function end
            sharedCodeIndices.Add(codeSnippets.Count);
            codeSnippets.Add($"{indent}return OUT;{nl}}}{nl}");

            #endregion

            result.codeSnippets      = codeSnippets.ToArray();
            result.sharedCodeIndices = sharedCodeIndices.ToArray();
            result.outputCodeIndices = new IntArray[ports.Count];
            for (var i = 0; i < ports.Count; i++)
            {
                result.outputCodeIndices[i] = portCodeIndices[i].ToArray();
            }

            var outputMetadatas = new OutputMetadata[ports.Count];
            for (int portIndex = 0; portIndex < outputMetadatas.Length; portIndex++)
            {
                outputMetadatas[portIndex] = new OutputMetadata(portIndex, ports[portIndex].shaderOutputName, originialPortIds[portIndex]);
            }

            asset.SetOutputs(outputMetadatas);

            asset.evaluationFunctionName = evaluationFunctionName;
            asset.inputStructName        = inputStructName;
            asset.outputStructName       = outputStructName;
            asset.portRequirements       = portRequirements;
            asset.concretePrecision      = graph.concretePrecision;
            asset.SetProperties(inputProperties);
            asset.outputPropertyIndices = new IntArray[ports.Count];
            for (var portIndex = 0; portIndex < ports.Count; portIndex++)
            {
                asset.outputPropertyIndices[portIndex] = portPropertyIndices[portIndex].ToArray();
            }

            return(asset);
        }
Example #28
0
        public static void InitializeMetadata(int Timestep, string MapFileName)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime //,
                                                             //ProjectionFilePath = "Projection.?"
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            PlugIn.eventLog   = new MetadataTable <EventsLog>("wind-events-log.csv");
            PlugIn.summaryLog = new MetadataTable <SummaryLog>("wind-summary-log.csv");

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

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

            PlugIn.ModelCore.UI.WriteLine("   Generating summary table...");
            OutputMetadata tblOut_summary = new OutputMetadata()
            {
                Type      = OutputType.Table,
                Name      = "WindSummaryLog",
                FilePath  = PlugIn.summaryLog.FilePath,
                Visualize = true,
            };

            tblOut_summary.RetriveFields(typeof(SummaryLog));
            Extension.OutputMetadatas.Add(tblOut_summary);

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

            OutputMetadata mapOut_Severity = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "severity",
                FilePath     = @MapFileName,
                Map_DataType = MapDataType.Ordinal,
                Map_Unit     = FieldUnits.Severity_Rank,
                Visualize    = true,
            };

            Extension.OutputMetadatas.Add(mapOut_Severity);

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
Example #29
0
        public static void InitializeMetadata(
            int Timestep,
            string mapNameTemplate,
            string pctConiferMapNameTemplate,
            string pctDeadFirMapNameTemplate
            )
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };

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

            //OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "biomass removed",
            //    FilePath = @HarvestMapName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Mg_ha,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);

            OutputMetadata mapOut_Fuel = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Fuel Map",
                FilePath     = MapNames.ReplaceTemplateVars(mapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
            };

            OutputMetadata mapOut_Confir = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Conifer Map",
                FilePath     = MapNames.ReplaceTemplateVars(pctConiferMapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
            };

            OutputMetadata mapOut_Dead = new OutputMetadata()
            {
                Type         = OutputType.Map,
                Name         = "Dead Fir Map",
                FilePath     = MapNames.ReplaceTemplateVars(pctDeadFirMapNameTemplate, PlugIn.ModelCore.CurrentTime),
                Map_DataType = MapDataType.Continuous,
                Visualize    = true,
            };

            Extension.OutputMetadatas.Add(mapOut_Fuel);
            Extension.OutputMetadatas.Add(mapOut_Confir);
            Extension.OutputMetadatas.Add(mapOut_Dead);


            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        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);
        }
        public static void InitializeMetadata(int Timestep,
                                              string MapFileName,
                                              string logFileName,
                                              IEnumerable <IInsect> insects,
                                              ICore mCore)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

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

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

            PlugIn.eventLog = new MetadataTable <EventsLog>("insects-log.csv");

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

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


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

            foreach (IInsect insect in insects)
            {
                string         mapPath = MapNames.ReplaceTemplateVarsMetadata(MapFileName, insect.Name);
                OutputMetadata mapOut_GrowthReduction = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Growth Reduction",
                    FilePath     = @mapPath,
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.Percentage,
                    Visualize    = false,
                };
                Extension.OutputMetadatas.Add(mapOut_GrowthReduction);

                mapPath = MapNames.ReplaceTemplateVarsMetadata(MapFileName, ("InitialPatchMap-" + insect.Name));
                OutputMetadata mapOut_InitialPatchProb = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = "Initial Outbreak Probabilities",
                    FilePath     = @mapPath,
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.Percentage,
                    Visualize    = false,
                };
                Extension.OutputMetadatas.Add(mapOut_InitialPatchProb);

                mapPath = MapNames.ReplaceTemplateVarsMetadata(MapFileName, ("BiomassRemoved-" + insect.Name));
                OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = System.String.Format(insect.Name + " Biomass Mortality"),
                    FilePath     = @mapPath,
                    Map_DataType = MapDataType.Continuous,
                    Map_Unit     = FieldUnits.Mg_ha,
                    Visualize    = true,
                };
                Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);
            }
            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }
        public static void InitializeMetadata(int Timestep, OutputVariable LAI, OutputVariable Biomass, OutputVariable AbovegroundBiomass, OutputVariable EstablishmentProbability, ISiteVar <Landis.Library.Parameters.Species.AuxParm <bool> > SpeciesWasThere, OutputVariable AnnualPsn, OutputVariable BelowGround, OutputVariable CohortsPerSpc, OutputVariable Water, OutputVariable SubCanopyPAR, OutputVariable NonWoodyDebris, OutputVariable WoodyDebris, OutputVariable AgeDistribution, OutputVariable MonthlyFolResp, OutputVariable MonthlyGrossPsn, OutputVariable MonthlyNetPsn, OutputVariable MonthlyMaintResp, OutputVariable SpeciesEstablishment, ISiteVar <Library.Parameters.Species.AuxParm <int> > LastBiom, OutputAggregatedTable overalloutputs, string OutputTableMap)
        {
            ScenarioReplicationMetadata scenRep = new ScenarioReplicationMetadata()
            {
                RasterOutCellArea = PlugIn.ModelCore.CellArea,
                TimeMin           = PlugIn.ModelCore.StartTime,
                TimeMax           = PlugIn.ModelCore.EndTime,
            };

            Extension = new ExtensionMetadata(PlugIn.ModelCore)
                        //Extension = new ExtensionMetadata()
            {
                Name         = PlugIn.ExtensionName,
                TimeInterval = Timestep,
                ScenarioReplicationMetadata = scenRep
            };
            //---------------------------------------
            //          table outputs:
            //---------------------------------------
            if (overalloutputs != null)
            {
                PlugIn.ModelCore.UI.WriteLine("   Generating summary table...");
                CreateDirectory(OutputTableMap);

                OutputMetadata tblOut_OverallOutputs = new OutputMetadata()
                {
                    Type         = OutputType.Table,
                    Name         = Path.GetFileName(OutputTableMap),
                    FilePath     = OutputTableMap,
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                };
                tblOut_OverallOutputs.RetriveFields(typeof(OutputAggregatedTable));
                Extension.OutputMetadatas.Add(tblOut_OverallOutputs);
            }


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

            //OutputMetadata mapOut_BiomassRemoved = new OutputMetadata()
            //{
            //    Type = OutputType.Map,
            //    Name = "biomass removed",
            //    FilePath = @HarvestMapName,
            //    Map_DataType = MapDataType.Continuous,
            //    Map_Unit = FieldUnits.Mg_ha,
            //    Visualize = true,
            //};
            //Extension.OutputMetadatas.Add(mapOut_BiomassRemoved);

            if (LAI != null)
            {
                OutputMetadata mapOut_LAI = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(LAI.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(LAI.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_LAI);
            }

            if (Biomass != null)
            {
                foreach (ISpecies spc in PlugIn.SelectedSpecies)
                {
                    OutputMetadata mapOut_Biomass = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = FileNames.ReplaceTemplateVars(Biomass.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                        FilePath     = FileNames.ReplaceTemplateVars(Biomass.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                        Map_DataType = MapDataType.Continuous,
                        Visualize    = true,
                        //Map_Unit = "categorical",
                    };
                    Extension.OutputMetadatas.Add(mapOut_Biomass);
                }
            }
            if (AbovegroundBiomass != null)
            {
                foreach (ISpecies spc in PlugIn.SelectedSpecies)
                {
                    OutputMetadata mapOut_AbvBiomass = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = FileNames.ReplaceTemplateVars(AbovegroundBiomass.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                        FilePath     = FileNames.ReplaceTemplateVars(AbovegroundBiomass.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                        Map_DataType = MapDataType.Continuous,
                        Visualize    = true,
                        //Map_Unit = "categorical",
                    };
                    Extension.OutputMetadatas.Add(mapOut_AbvBiomass);
                }
            }
            if (MonthlyFolResp != null)
            {
                OutputMetadata mapOut_Monthly = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(MonthlyFolResp.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(MonthlyFolResp.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_Monthly);
            }
            if (MonthlyGrossPsn != null)
            {
                OutputMetadata mapOut_Monthly = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(MonthlyGrossPsn.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(MonthlyGrossPsn.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_Monthly);
            }
            if (MonthlyNetPsn != null)
            {
                OutputMetadata mapOut_Monthly = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(MonthlyNetPsn.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(MonthlyNetPsn.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_Monthly);
            }
            if (MonthlyMaintResp != null)
            {
                OutputMetadata mapOut_Monthly = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(MonthlyMaintResp.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(MonthlyMaintResp.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_Monthly);
            }
            if (BelowGround != null)
            {
                OutputMetadata mapOut_BelowGround = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(BelowGround.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(BelowGround.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_BelowGround);
            }
            if (CohortsPerSpc != null)
            {
                foreach (ISpecies spc in PlugIn.ModelCore.Species)
                {
                    OutputMetadata mapOut_LAI = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = FileNames.ReplaceTemplateVars(CohortsPerSpc.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                        FilePath     = FileNames.ReplaceTemplateVars(CohortsPerSpc.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                        Map_DataType = MapDataType.Continuous,
                        Visualize    = true,
                        //Map_Unit = "categorical",
                    };
                    Extension.OutputMetadatas.Add(mapOut_LAI);
                }
            }
            if (EstablishmentProbability != null)
            {
                foreach (ISpecies spc in PlugIn.SelectedSpecies)
                {
                    OutputMetadata mapOut_EProb = new OutputMetadata()
                    {
                        Type         = OutputType.Map,
                        Name         = FileNames.ReplaceTemplateVars(EstablishmentProbability.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                        FilePath     = FileNames.ReplaceTemplateVars(EstablishmentProbability.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                        Map_DataType = MapDataType.Continuous,
                        Visualize    = true,
                        //Map_Unit = "categorical",
                    };
                    Extension.OutputMetadatas.Add(mapOut_EProb);
                }
            }
            if (SpeciesEstablishment != null)
            {
                if (SpeciesWasThere != null)
                {
                    foreach (ISpecies spc in PlugIn.ModelCore.Species)
                    {
                        OutputMetadata mapOut_SpeciesE = new OutputMetadata()
                        {
                            Type         = OutputType.Map,
                            Name         = FileNames.ReplaceTemplateVars(SpeciesEstablishment.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                            FilePath     = FileNames.ReplaceTemplateVars(SpeciesEstablishment.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                            Map_DataType = MapDataType.Continuous,
                            Visualize    = true,
                            //Map_Unit = "categorical",
                        };
                        Extension.OutputMetadatas.Add(mapOut_SpeciesE);
                    }
                }

                OutputMetadata mapOut_SpeciesE2 = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(SpeciesEstablishment.MapNameTemplate).Replace(".img", ".txt"),
                    FilePath     = FileNames.ReplaceTemplateVars(SpeciesEstablishment.MapNameTemplate).Replace(".img", ".txt"),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_SpeciesE2);
            }
            if (AnnualPsn != null)
            {
                if (LastBiom != null)
                {
                    foreach (ISpecies spc in PlugIn.ModelCore.Species)
                    {
                        OutputMetadata mapOut_AnnualPsn = new OutputMetadata()
                        {
                            Type         = OutputType.Map,
                            Name         = FileNames.ReplaceTemplateVars(AnnualPsn.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                            FilePath     = FileNames.ReplaceTemplateVars(AnnualPsn.MapNameTemplate, spc.Name, PlugIn.ModelCore.CurrentTime),
                            Map_DataType = MapDataType.Continuous,
                            Visualize    = true,
                            //Map_Unit = "categorical",
                        };
                        Extension.OutputMetadatas.Add(mapOut_AnnualPsn);
                    }
                }
            }
            if (Water != null)
            {
                OutputMetadata mapOut_Water = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(Water.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(Water.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_Water);
            }
            if (SubCanopyPAR != null)
            {
                OutputMetadata mapOut_SubCanopyPAR = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(SubCanopyPAR.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(SubCanopyPAR.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_SubCanopyPAR);
            }
            if (NonWoodyDebris != null)
            {
                OutputMetadata mapOut_NonWoodyDebris = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(NonWoodyDebris.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(NonWoodyDebris.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_NonWoodyDebris);
            }
            if (WoodyDebris != null)
            {
                OutputMetadata mapOut_WoodyDebris = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(WoodyDebris.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(WoodyDebris.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_WoodyDebris);
            }
            if (AgeDistribution != null)
            {
                OutputMetadata mapOut_AgeDistribution = new OutputMetadata()
                {
                    Type         = OutputType.Map,
                    Name         = FileNames.ReplaceTemplateVars(AgeDistribution.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    FilePath     = FileNames.ReplaceTemplateVars(AgeDistribution.MapNameTemplate, "", PlugIn.ModelCore.CurrentTime),
                    Map_DataType = MapDataType.Continuous,
                    Visualize    = true,
                    //Map_Unit = "categorical",
                };
                Extension.OutputMetadatas.Add(mapOut_AgeDistribution);
            }

            //---------------------------------------
            MetadataProvider mp = new MetadataProvider(Extension);

            mp.WriteMetadataToXMLFile("Metadata", Extension.Name, Extension.Name);
        }