Example #1
0
        //---------------------------------------------------------------------

        protected override IScenario Parse()
        {
            ReadLandisDataVar();

            IEditableScenario scenario = new EditableScenario();

            InputVar <int> duration = new InputVar <int>("Duration");

            ReadVar(duration);
            scenario.Duration = duration.Value;

            InputVar <string> species = new InputVar <string>("Species");

            ReadVar(species);
            scenario.Species = species.Value;

            InputVar <string> ecoregions = new InputVar <string>("Ecoregions");

            ReadVar(ecoregions);
            scenario.Ecoregions = ecoregions.Value;

            InputVar <string> ecoregionsMap = new InputVar <string>("EcoregionsMap");

            ReadVar(ecoregionsMap);
            scenario.EcoregionsMap = ecoregionsMap.Value;

            InputVar <float> cellLength = new InputVar <float>("CellLength");

            if (ReadOptionalVar(cellLength))
            {
                scenario.CellLength = cellLength.Value;
            }

            InputVar <string> initCommunities = new InputVar <string>("InitialCommunities");

            ReadVar(initCommunities);
            scenario.InitialCommunities = initCommunities.Value;

            InputVar <string> communitiesMap = new InputVar <string>("InitialCommunitiesMap");

            ReadVar(communitiesMap);
            scenario.InitialCommunitiesMap = communitiesMap.Value;

            if (AtEndOfInput)
            {
                throw ExpectedPlugInException(typeof(ISuccession));
            }
            ReadPlugIn(scenario.Succession);

            //  Disturbance plug-ins

            nameLineNumbers.Clear();  // Parse called more than once
            const string DisturbancesRandomOrder = "DisturbancesRandomOrder";
            const string RandomNumberSeed        = "RandomNumberSeed";

            while (!AtEndOfInput && CurrentName != DisturbancesRandomOrder &&
                   CurrentName != RandomNumberSeed &&
                   scenario.Outputs.Count == 0)
            {
                IEditablePlugIn <IDisturbance> disturbPlugIn;
                IEditablePlugIn <IOutput>      outputPlugIn;
                ReadPlugIn(out disturbPlugIn, out outputPlugIn);
                if (disturbPlugIn != null)
                {
                    scenario.Disturbances.InsertAt(scenario.Disturbances.Count,
                                                   disturbPlugIn);
                }
                else
                {
                    scenario.Outputs.InsertAt(scenario.Outputs.Count,
                                              outputPlugIn);
                }
            }

            //  Check for optional DisturbancesRandomOrder parameter
            InputVar <bool> randomOrder = new InputVar <bool>(DisturbancesRandomOrder);

            if (ReadOptionalVar(randomOrder))
            {
                scenario.DisturbancesRandomOrder = randomOrder.Value;
            }

            //  Output plug-ins

            if (scenario.Outputs.Count == 0)
            {
                nameLineNumbers.Clear();
            }
            while (!AtEndOfInput && CurrentName != RandomNumberSeed)
            {
                IEditablePlugIn <IOutput> plugIn = new EditablePlugIn <IOutput>();
                ReadPlugIn(plugIn);
                scenario.Outputs.InsertAt(scenario.Outputs.Count, plugIn);
            }
            if (scenario.Outputs.Count == 0)
            {
                throw ExpectedPlugInException(typeof(IOutput));
            }

            //	Either at end of file or we've encountered the optional
            //	RandomNumberSeed parameter.
            if (!AtEndOfInput)
            {
                InputVar <uint> seed = new InputVar <uint>(RandomNumberSeed);
                ReadVar(seed);
                scenario.RandomNumberSeed = seed.Value;
                CheckNoDataAfter(string.Format("the {0} parameter", RandomNumberSeed));
            }

            return(scenario.GetComplete());
        }
Example #2
0
        //---------------------------------------------------------------------

        protected override Scenario Parse()
        {
            ReadLandisDataVar();

            EditableScenario scenario = new EditableScenario();

            scenario.StartTime = new InputValue <int>(0, "0");

            InputVar <int> duration = new InputVar <int>("Duration");

            ReadVar(duration);
            scenario.EndTime = duration.Value;

            InputVar <string> species = new InputVar <string>("Species");

            ReadVar(species);
            scenario.Species = species.Value;

            InputVar <string> ecoregions = new InputVar <string>("Ecoregions");

            ReadVar(ecoregions);
            scenario.Ecoregions = ecoregions.Value;

            InputVar <string> ecoregionsMap = new InputVar <string>("EcoregionsMap");

            ReadVar(ecoregionsMap);
            scenario.EcoregionsMap = ecoregionsMap.Value;

            InputVar <float> cellLength = new InputVar <float>("CellLength");

            if (ReadOptionalVar(cellLength))
            {
                scenario.CellLength = cellLength.Value;
            }

            //  Table of extensions
            nameLineNumbers.Clear();  // if Parse called more than once

            //  Succession extension must be first entry in table
            if (AtEndOfInput)
            {
                throw NewParseException("Expected a succession extension");
            }
            ReadExtension(scenario.Succession, ValidExtensionTypes.SuccessionOnly);

            //  0 or more disturbance extensions

            const string DisturbancesRandomOrder = "DisturbancesRandomOrder";
            const string RandomNumberSeed        = "RandomNumberSeed";

            while (!AtEndOfInput && CurrentName != DisturbancesRandomOrder &&
                   CurrentName != RandomNumberSeed &&
                   scenario.OtherExtensions.Count == 0)
            {
                EditableExtension Extension = new EditableExtension();
                ReadExtension(Extension, ValidExtensionTypes.AnyButSuccession);
                if (Extension.Info.Actual.Type.IsMemberOf("disturbance"))
                {
                    scenario.Disturbances.Add(Extension);
                }
                else
                {
                    scenario.OtherExtensions.Add(Extension);
                }
            }

            //  Check for optional DisturbancesRandomOrder parameter
            InputVar <bool> randomOrder = new InputVar <bool>(DisturbancesRandomOrder);

            if (ReadOptionalVar(randomOrder))
            {
                scenario.DisturbancesRandomOrder = randomOrder.Value;
            }

            //  All other extensions besides succession and disturbances (e.g.,
            //  output, metapopulation)

            if (scenario.OtherExtensions.Count == 0)
            {
                nameLineNumbers.Clear();
            }
            while (!AtEndOfInput && CurrentName != RandomNumberSeed)
            {
                EditableExtension Extension = new EditableExtension();
                ReadExtension(Extension, ValidExtensionTypes.AnyButSuccessionOrDisturbance);
                scenario.OtherExtensions.Add(Extension);
            }

            //    Either at end of file or we've encountered the optional
            //    RandomNumberSeed parameter.
            if (!AtEndOfInput)
            {
                InputVar <uint> seed = new InputVar <uint>(RandomNumberSeed);
                ReadVar(seed);
                scenario.RandomNumberSeed = seed.Value;
                CheckNoDataAfter(string.Format("the {0} parameter", RandomNumberSeed));
            }

            return(scenario.GetComplete());
        }
        //---------------------------------------------------------------------

        protected override IScenario Parse()
        {
            ReadLandisDataVar();

            IEditableScenario scenario = new EditableScenario();

            InputVar <int> duration = new InputVar <int>("Duration");

            ReadVar(duration);
            scenario.Duration = duration.Value;

            InputVar <string> species = new InputVar <string>("Species");

            ReadVar(species);
            scenario.Species = species.Value;

            InputVar <string> ecoregions = new InputVar <string>("Ecoregions");

            ReadVar(ecoregions);
            scenario.Ecoregions = ecoregions.Value;

            InputVar <string> ecoregionsMap = new InputVar <string>("EcoregionsMap");

            ReadVar(ecoregionsMap);
            scenario.EcoregionsMap = ecoregionsMap.Value;

            InputVar <string> initCommunities = new InputVar <string>("InitialCommunities");

            ReadVar(initCommunities);
            scenario.InitialCommunities = initCommunities.Value;

            InputVar <string> communitiesMap = new InputVar <string>("InitialCommunitiesMap");

            ReadVar(communitiesMap);
            scenario.InitialCommunitiesMap = communitiesMap.Value;

            if (AtEndOfInput)
            {
                throw ExpectedPlugInException(typeof(ISuccession));
            }
            ReadPlugIn(scenario.Succession);

            //  Disturbance plug-ins

            nameLineNumbers.Clear();  // Parse called more than once
            const string DisturbancesRandomOrder = "DisturbancesRandomOrder";

            while (!AtEndOfInput && CurrentName != DisturbancesRandomOrder &&
                   scenario.Outputs.Count == 0)
            {
                IEditablePlugIn <IDisturbance> disturbPlugIn;
                IEditablePlugIn <IOutput>      outputPlugIn;
                ReadPlugIn(out disturbPlugIn, out outputPlugIn);
                if (disturbPlugIn != null)
                {
                    scenario.Disturbances.InsertAt(scenario.Disturbances.Count,
                                                   disturbPlugIn);
                }
                else
                {
                    scenario.Outputs.InsertAt(scenario.Outputs.Count,
                                              outputPlugIn);
                }
            }

            //  Check for optional DisturbancesRandomOrder parameter
            InputVar <bool> randomOrder = new InputVar <bool>(DisturbancesRandomOrder);

            if (ReadOptionalVar(randomOrder))
            {
                scenario.DisturbancesRandomOrder = randomOrder.Value;
            }

            //  Output plug-ins

            if (scenario.Outputs.Count == 0)
            {
                nameLineNumbers.Clear();
            }
            while (!AtEndOfInput)
            {
                IEditablePlugIn <IOutput> plugIn = new EditablePlugIn <IOutput>();
                ReadPlugIn(plugIn);
                scenario.Outputs.InsertAt(scenario.Outputs.Count, plugIn);
            }
            if (scenario.Outputs.Count == 0)
            {
                throw ExpectedPlugInException(typeof(IOutput));
            }

            return(scenario.GetComplete());
        }