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