Design patterns (see relevant paragraph in the page Design summary)are elegant and effective solutions to common programming problems; they describe how objects communicate without knowing each other’s data and methods. The design patterns strategy allows offering to the user of the component different models (one or more algorithms) by encapsulating each of them in a class. Different algorithms, which are alternate options to do the same thing, are called strategies. When building a biophysical model component this allows in principle to offer alternate options to estimate a variable or, more in general, to model a process. This often needed feature in the implementation of biophysical models, if implemented using the design pattern Strategy, comes with two very welcomed effects from the software side: 1) it allows an easier maintenance of the component, by facilitating adding other algorithms, 2) it allows to add easily further algorithms from the client side, without the need of recompiling the component, but keeping the same interface and the same call.
A class implementing the interface inheriting from the IStrategy is a strategy of the UNIMI.CropQuality component. Many of such classes are implemented in the component, but a client of the component may extend the modelling capabilities by adding models which use as inputs and outputs the ones in the Domain Classes (which can also be extended).
A commented example of such classes follows. The class below is currently implemented as an example, but it applies to all components, with small changes in the relevant part of the code. Note that the grey colored statements represent blocks of code. (#region -#endregion code blocks), and are discussed after the first code block.
Accessors to lists of parameters, inputs, outputs, and associated strategies. This code block is the same for all strategies and of all components. |
|
#region Lists: Inputs, Outputs, Parameters, Associated Strategies private static List<string> _inputs = new List<string>(); /// <summary>List of inputs within QualityC_Li</summary> public static List<string> Inputs { get { return _inputs; } } private static List<string> _outputs = new List<string>(); /// <summary>List of outputs within QualityC_Li</summary> public static List<string> Outputs { get { return _outputs; } } private static List<string> _parameters = new List<string>(); /// <summary>List of parameters (static properties of this class)</summary> public static List<string> Parameters { get { return _parameters; } } private static List<string> _associatedStrategies = new List<string>(); /// <summary>List of associated strategies</summary> public static List<string> AssociatedStrategies { get { return _associatedStrategies; } } #endregion |
Implementation of the IStrategyComponent methods |
|
#region IStrategyCropML Members /// <summary> /// Set parameter(s) to the default value /// </summary> public void SetParametersDefaultValue() {
chen.SetParametersDefaultValue(); visc.SetParametersDefaultValue(); prot.SetParametersDefaultValue(); chalk.SetParametersDefaultValue(); amylose.SetParametersDefaultValue(); head.SetParametersDefaultValue(); lipid.SetParametersDefaultValue(); crack.SetParametersDefaultValue();
} /// <summary> /// Test to verify the postconditions /// </summary> /// <param name="r">Rates at time t</param> /// <param name="s1">States at time t</param> /// <param name="a">Auxiliary data at time t</param> /// <param name="callID">Client ID for specific call</param> /// <returns>Result of post-conditions test</returns> public string TestPostConditions(Rates r, States s1, Auxiliary a, string callID) { try { return PostConditions(r, s1, a, callID); } catch (Exception e) { TraceStrategies.TraceEvent(System.Diagnostics.TraceEventType.Error, 1001, "Strategy: " + _strategyName + " - Unhandled exception running post-conditions"); string msg = "Component Quality, " + _strategyName + ": Unhandled exception running post-condition test. "; throw new Exception(msg, e); } } /// <summary> /// Test to verify the preconditions /// </summary> /// <param name="r">Rates at time t</param> /// <param name="s1">States at time t</param> /// <param name="a">Auxiliary data at time t</param> /// <param name="s">States at time t-1</param> /// <param name="ex">Exogenous data at time t</param> /// <param name="re">External rates at times t</param> /// <param name="se">External states at time t-1</param> /// <param name="callID">Client ID for specific call</param> /// <returns>Result of pre-conditions test</returns> public string TestPreConditions(Rates r, States s1, Auxiliary a, States s, Exogenous ex, RatesExternal re, StatesExternal se, string callID) { try { return PreConditions(r, s1, a, s, ex, re, se, callID); } catch (Exception e) { TraceStrategies.TraceEvent(System.Diagnostics.TraceEventType.Error, 1002, "Strategy: " + _strategyName + " - Unhandled exception running pre-conditions"); string msg = "Component Quality, " + _strategyName + ": Unhandled exception running pre-condition test. "; throw new Exception(msg, e); } } /// <summary> /// Calculate the output(s) of the selected model /// </summary> /// <param name="r">Rates at time t</param> /// <param name="s1">States at time t</param> /// <param name="a">Auxiliary data at time t</param> /// <param name="s">States at time t-1</param> /// <param name="ex">Exogenous data at time t</param> /// <param name="re">External rates at times t</param> /// <param name="se">External states at time t-1</param> /// <param name="ae">AgroManagement data at time t</param> public void Update(Rates r, States s1, Auxiliary a, States s, Exogenous ex, RatesExternal re, StatesExternal se) { try { ModelEstimate(r, s1, a, s, ex, re, se); TraceStrategies.TraceEvent(System.Diagnostics.TraceEventType.Verbose, 1005, "Strategy: " + _strategyName + " - Model executed"); } catch (Exception e) { TraceStrategies.TraceEvent(System.Diagnostics.TraceEventType.Error, 1003, "Strategy: " + _strategyName + " - Unhandled exception running model"); string msg = "Component Quality, " + _strategyName + ": Pre-conditions violated. "; msg = msg + TestPreConditions(r, s1, a, s, ex, re, se, String.Empty); throw new Exception(msg, e); } } #endregion |
Example Title |
|
#region Model private void ModelEstimate(Rates r, States s1, Auxiliary a, States s, Exogenous ex, RatesExternal re, StatesExternal se) { EstimateOfAssociatedClasses(r, s1, a, s, ex, re, se); } #endregion |
Pre- and Post-conditions |
|
#region Pre- post- conditions private string PreConditions(Rates r, States s1, Auxiliary a, States s, Exogenous ex, RatesExternal re, StatesExternal se, string callID) { SetParametersInputsCurrentValue(r, s1, a, s, ex, re, se); PreconditionsData prc = new PreconditionsData(); Preconditions pre = new Preconditions(); //test of pre-conditions of classes used in this composite class string ret = ""; ret = ret + visc.TestPreConditions(r, s1, a, s, ex, re, se, "strategy ViscosityprofileC"); ret = ret + prot.TestPreConditions(r, s1, a, s, ex, re, se, "strategy ProteinC"); ret = ret + chalk.TestPreConditions(r, s1, a, s, ex, re, se, "strategy ChalkinessC"); ret = ret + head.TestPreConditions(r, s1, a, s, ex, re, se, "strategy HeadRiceLanning"); ret = ret + amylose.TestPreConditions(r, s1, a, s, ex, re, se, "strategy AmyloseC"); ret = ret + crack.TestPreConditions(r, s1, a, s, ex, re, se, "strategy CrackingNagata"); ret = ret + chen.TestPreConditions(r, s1, a, s, ex, re, se, "strategy StarchContentChen"); ret = ret + lipid.TestPreConditions(r, s1, a, s, ex, re, se, "strategy TotalLipidContentLanning");
if (ret != "") { pre.TestsOut(ret, false, " preconditions tests of associated classes"); }
return pre.VerifyPreconditions(prc, callID); } private string PostConditions(Rates r, States s1, Auxiliary a, string callID) { SetOutputsCurrentValue(r, s1, a); PreconditionsData prc = new PreconditionsData(); Preconditions pre = new Preconditions(); //test of post-conditions of classes used in this composite class string ret = ""; ret = ret + visc.TestPostConditions(r, s1, a, "strategy RVAProfile"); ret = ret + prot.TestPostConditions(r, s1, a, "strategy QualityC_Li"); ret = ret + chalk.TestPostConditions(r, s1, a, "strategy ChalkinessC"); ret = ret + head.TestPostConditions(r, s1, a, "strategy HeadRiceLanning"); ret = ret + crack.TestPostConditions(r, s1, a, "strategy CrackingNagata"); ret = ret + chen.TestPostConditions(r, s1, a, "strategy StarchContentChen"); ret = ret + lipid.TestPostConditions(r, s1, a, "strategy TotalLipidContentLanning");
if (ret != "") { pre.TestsOut(ret, false, " postconditions tests of associated classes"); }
return pre.VerifyPostconditions(prc, callID); } #endregion |
Set current value prior to the test of pre- post-conditions |
|
#region Set inputs and parameters current values private void SetParametersInputsCurrentValue(Rates r, States s1, Auxiliary a, States s, Exogenous ex, RatesExternal re, StatesExternal se) { // These are the inputs used by the classes feeding (with their ouputs) this composite class //inputs of associated classes which are outputs of other associated classes, AND directly used in this class DamageTresholdTemperatureVarInfo.CurrentValue = DamageTresholdTemperature; GrainLengthVarInfo.CurrentValue = GrainLength; ReferenceGrainProteinContentVarInfo.CurrentValue = ReferenceGrainProteinContent; ReferenceGrainAmyloseContentVarInfo.CurrentValue = ReferenceGrainAmyloseContent; PotentialRelativeLeavesSolubleSugarContentVarInfo.CurrentValue = PotentialRelativeLeavesSolubleSugarContent; PotentialRelativeStemsSolubleSugarContentVarInfo.CurrentValue = PotentialRelativeStemsSolubleSugarContent; PostAnthesisRemobilizationBeginningVarInfo.CurrentValue = PostAnthesisRemobilizationBeginning; SeedWeightVarInfo.CurrentValue = SeedWeight; MaxRateIndividualGrainStarchSynthesisVarInfo.CurrentValue = MaxRateIndividualGrainStarchSynthesis; PostAnthesisMaxGrainFillinRateTimeVarInfo.CurrentValue = PostAnthesisMaxGrainFillinRateTime; LowerTemperatureOptimalStarchAccumulationVarInfo.CurrentValue = LowerTemperatureOptimalStarchAccumulation; HigherTemperatureOptimalStarchAccumulationVarInfo.CurrentValue = HigherTemperatureOptimalStarchAccumulation; MinimumTemperatureStarchAccumulationVarInfo.CurrentValue = MinimumTemperatureStarchAccumulation; MaximumTemperatureStarchAccumulationVarInfo.CurrentValue = MaximumTemperatureStarchAccumulation; DamageTresholdTemperatureAvgVarInfo.CurrentValue = DamageTresholdTemperatureAvg; //inputs ExogenousVarInfo.AirTemperatureMax.CurrentValue = ex.AirTemperatureMax; ExogenousVarInfo.AirTemperatureMin.CurrentValue = ex.AirTemperatureMin; ExogenousVarInfo.GlobalRadiation.CurrentValue = ex.GlobalRadiation; StatesExternalVarInfo.DevelopmentStageCode.CurrentValue = se.DevelopmentStageCode; ExogenousVarInfo.Latitude.CurrentValue = ex.Latitude; StatesVarInfo.RelativeDailySolubleSugarLeaves.CurrentValue = s.RelativeDailySolubleSugarLeaves; StatesVarInfo.RelativeDailySolubleSugarStems.CurrentValue = s.RelativeDailySolubleSugarStems; StatesVarInfo.IndividualGrainStarchAccumulated.CurrentValue = s.IndividualGrainStarchAccumulated; RatesExternalVarInfo.LeavesWeightDailyRate.CurrentValue = re.LeavesWeightDailyRate; RatesExternalVarInfo.StemsWeightDailyRate.CurrentValue = re.StemsWeightDailyRate; RatesExternalVarInfo.AbovegroundBiomassDailyRate.CurrentValue = re.AbovegroundBiomassDailyRate; RatesExternalVarInfo.WaterStressFactor.CurrentValue = re.WaterStressFactor; RatesExternalVarInfo.GrainBiomassRate.CurrentValue = re.GrainBiomassRate; StatesExternalVarInfo.GrowingDegreeDays.CurrentValue = se.GrowingDegreeDays; StatesExternalVarInfo.LeavesDryWeight.CurrentValue = se.LeavesDryWeight; StatesExternalVarInfo.StemsDryWeight.CurrentValue = se.StemsDryWeight; StatesExternalVarInfo.GrainDryWeight.CurrentValue = se.GrainDryWeight; ExogenousVarInfo.SunriseHour.CurrentValue = ex.SunriseHour; ExogenousVarInfo.SunsetHour.CurrentValue = ex.SunsetHour;
} private static void SetOutputsCurrentValue(Rates r, States s1, Auxiliary a) { //Chalkiness AuxiliaryVarInfo.AverageTempAfterHeading.CurrentValue = a.AverageTempAfterHeading; AuxiliaryVarInfo.AverageTemperatureSum.CurrentValue = a.AverageTemperatureSum; StatesVarInfo.ChalkyGrainPercentageImmatureBaseStatic.CurrentValue = s1.ChalkyGrainPercentageImmatureBaseStatic; StatesVarInfo.ChalkyGrainPercentageImmatureBaseDynamic.CurrentValue = s1.ChalkyGrainPercentageImmatureBaseDynamic; AuxiliaryVarInfo.DaysFromFlowering.CurrentValue = a.DaysFromFlowering; AuxiliaryVarInfo.EffectiveWeightedTempMWDamSum.CurrentValue = a.EffectiveWeightedTempMWDamSum; AuxiliaryVarInfo.SolarRadiationSum.CurrentValue = a.SolarRadiationSum; StatesVarInfo.MilkyWhiteChalkyGrainPercentageStatic.CurrentValue = s1.MilkyWhiteChalkyGrainPercentageStatic; StatesVarInfo.MilkyWhiteChalkyGrainPercentageDynamic.CurrentValue = s1.MilkyWhiteChalkyGrainPercentageDynamic; StatesVarInfo.ChalkinessDegreeStatic.CurrentValue = s1.ChalkinessDegreeStatic; //Cracking AuxiliaryVarInfo.DaysFromHeading.CurrentValue = a.DaysFromHeading; StatesVarInfo.CrackedGrainPercentageStatic.CurrentValue = s1.CrackedGrainPercentageStatic; //Outputs StatesVarInfo.CrackedGrainPercentageDynamic.CurrentValue = s1.CrackedGrainPercentageDynamic; //Outputs //RVA AuxiliaryVarInfo.DaysFromFlowering.CurrentValue = a.DaysFromFlowering; StatesVarInfo.SetbackStatic.CurrentValue = s1.SetbackStatic; StatesVarInfo.SetbackDynamic.CurrentValue = s1.SetbackDynamic; StatesVarInfo.PastingTemperatureStatic.CurrentValue = s1.PastingTemperatureStatic; StatesVarInfo.PastingTemperatureDynamic.CurrentValue = s1.PastingTemperatureDynamic; StatesVarInfo.PeakViscosityStatic.CurrentValue = s1.PeakViscosityStatic; StatesVarInfo.PeakViscosityDynamic.CurrentValue = s1.PeakViscosityDynamic; //Li AuxiliaryVarInfo.AmyloseAverageTemperatureFactor.CurrentValue = a.AmyloseAverageTemperatureFactor; AuxiliaryVarInfo.AmyloseLatitudeFactor.CurrentValue = a.AmyloseLatitudeFactor; AuxiliaryVarInfo.AmyloseMaximumTemperatureFactor.CurrentValue = a.AmyloseMaximumTemperatureFactor; AuxiliaryVarInfo.AmyloseMinimumTemperatureFactor.CurrentValue = a.AmyloseMinimumTemperatureFactor; AuxiliaryVarInfo.AmyloseRadiationFactor.CurrentValue = a.AmyloseRadiationFactor; StatesVarInfo.GrainAmyloseContent.CurrentValue = s1.GrainAmyloseContent; AuxiliaryVarInfo.ProteinAverageTemperatureFactor.CurrentValue = a.ProteinAverageTemperatureFactor; AuxiliaryVarInfo.ProteinLatitudeFactor.CurrentValue = a.ProteinLatitudeFactor; AuxiliaryVarInfo.ProteinMaximumTemperatureFactor.CurrentValue = a.ProteinMaximumTemperatureFactor; AuxiliaryVarInfo.ProteinMinimumTemperatureFactor.CurrentValue = a.ProteinMinimumTemperatureFactor; StatesVarInfo.GrainProteinContent.CurrentValue = s1.GrainProteinContent; //Head rice StatesVarInfo.HeadRiceYieldStatic.CurrentValue = s1.HeadRiceYieldStatic; //Chen //Outputs AuxiliaryVarInfo.StarchSynthesisAbility.CurrentValue = a.StarchSynthesisAbility; AuxiliaryVarInfo.TemperatureFactorStarch.CurrentValue = a.TemperatureFactorStarch; AuxiliaryVarInfo.GrowingDegreeDaysAtFlowering.CurrentValue = a.GrowingDegreeDaysAtFlowering; AuxiliaryVarInfo.IndividualGrainWeight.CurrentValue = a.IndividualGrainWeight; AuxiliaryVarInfo.GrainsNumber.CurrentValue = a.GrainsNumber; StatesVarInfo.RelativeDailySolubleSugarLeaves.CurrentValue = s1.RelativeDailySolubleSugarLeaves; StatesVarInfo.RelativeDailySolubleSugarStems.CurrentValue = s1.RelativeDailySolubleSugarStems; StatesVarInfo.IndividualGrainStarchAccumulated.CurrentValue = s1.IndividualGrainStarchAccumulated; StatesVarInfo.RelativeGrainStarchContent.CurrentValue = s1.RelativeGrainStarchContent; RatesVarInfo.TotalGrainCarbonAvailableRate.CurrentValue = r.TotalGrainCarbonAvailableRate; RatesVarInfo.IndividualStarchRateSourceRestricted.CurrentValue = r.IndividualStarchRateSourceRestricted; RatesVarInfo.IndividualStarchRateSinkRestricted.CurrentValue = r.IndividualStarchRateSinkRestricted; RatesVarInfo.IndividualGrainCarbonRateRestricted.CurrentValue = r.IndividualGrainCarbonRateRestricted; //Lipid StatesVarInfo.TotalLipidContentStatic.CurrentValue = s1.TotalLipidContentStatic; } #endregion |
Strategy class constructor |
|
#region Constructor methods private static void SetParameterDescription() { _IsSusceptibleCultivarToCrackingVarInfo.Name = "IsSusceptibleCultivarToCracking"; _IsSusceptibleCultivarToCrackingVarInfo.Description = "Parameter that allow the user to select Susceptible or Less susceptible rice varieties to cracking"; _IsSusceptibleCultivarToCrackingVarInfo.MaxValue = 0; _IsSusceptibleCultivarToCrackingVarInfo.MinValue = 0; _IsSusceptibleCultivarToCrackingVarInfo.DefaultValue = 0; _IsSusceptibleCultivarToCrackingVarInfo.Units = "unitless"; _IsSusceptibleCultivarToCrackingVarInfo.URL = ""; _IsSusceptibleCultivarToChalkinessVarInfo.Name = "IsSusceptibleCultivarToChalkiness"; _IsSusceptibleCultivarToChalkinessVarInfo.Description = "Parameter that allow the user to select Susceptible or Less susceptible rice varieties to chalkiness"; _IsSusceptibleCultivarToChalkinessVarInfo.MaxValue = 0; _IsSusceptibleCultivarToChalkinessVarInfo.MinValue = 0; _IsSusceptibleCultivarToChalkinessVarInfo.DefaultValue = 0; _IsSusceptibleCultivarToChalkinessVarInfo.Units = "unitless"; _IsSusceptibleCultivarToChalkinessVarInfo.URL = ""; } private static void FillInOutParLists() { #region Input //inputs of the strategies associated _inputs.Add(ExogenousVarInfo.Latitude.Name); _inputs.Add(ExogenousVarInfo.AirTemperatureMax.Name); _inputs.Add(ExogenousVarInfo.AirTemperatureMin.Name); _inputs.Add(ExogenousVarInfo.GlobalRadiation.Name); _inputs.Add(StatesExternalVarInfo.DevelopmentStageCode.Name); _inputs.Add(StatesExternalVarInfo.GrowingDegreeDays.Name); _inputs.Add(StatesExternalVarInfo.LeavesDryWeight.Name); _inputs.Add(StatesExternalVarInfo.StemsDryWeight.Name); _inputs.Add(StatesExternalVarInfo.GrainDryWeight.Name); _inputs.Add(RatesExternalVarInfo.WaterStressFactor.Name); _inputs.Add(RatesExternalVarInfo.LeavesWeightDailyRate.Name); _inputs.Add(RatesExternalVarInfo.StemsWeightDailyRate.Name); _inputs.Add(RatesExternalVarInfo.AbovegroundBiomassDailyRate.Name); _inputs.Add(RatesExternalVarInfo.GrainBiomassRate.Name); _inputs.Add(StatesVarInfo.RelativeDailySolubleSugarLeaves.Name); _inputs.Add(StatesVarInfo.RelativeDailySolubleSugarStems.Name); _inputs.Add(StatesVarInfo.IndividualGrainStarchAccumulated.Name); _inputs.Add(StatesExternalVarInfo.DevelopmentStageCode.Name); #endregion #region Output //outputs of the strategies associated _outputs.Add(AuxiliaryVarInfo.DaysFromHeading.Name); _outputs.Add(StatesVarInfo.CrackedGrainPercentageDynamic.Name); _outputs.Add(StatesVarInfo.CrackedGrainPercentageStatic.Name); _outputs.Add(StatesVarInfo.SetbackDynamic.Name); _outputs.Add(StatesVarInfo.SetbackStatic.Name); _outputs.Add(StatesVarInfo.PastingTemperatureDynamic.Name); _outputs.Add(StatesVarInfo.PastingTemperatureStatic.Name); _outputs.Add(StatesVarInfo.GrainProteinContent.Name); _outputs.Add(StatesVarInfo.PeakViscosityDynamic.Name); _outputs.Add(StatesVarInfo.PeakViscosityStatic.Name); _outputs.Add(AuxiliaryVarInfo.ProteinAverageTemperatureFactor.Name); _outputs.Add(AuxiliaryVarInfo.ProteinLatitudeFactor.Name); _outputs.Add(AuxiliaryVarInfo.ProteinMaximumTemperatureFactor.Name); _outputs.Add(AuxiliaryVarInfo.ProteinMinimumTemperatureFactor.Name); _outputs.Add(AuxiliaryVarInfo.AmyloseAverageTemperatureFactor.Name); _outputs.Add(AuxiliaryVarInfo.AmyloseLatitudeFactor.Name); _outputs.Add(AuxiliaryVarInfo.AmyloseMaximumTemperatureFactor.Name); _outputs.Add(AuxiliaryVarInfo.AmyloseMinimumTemperatureFactor.Name); _outputs.Add(AuxiliaryVarInfo.AmyloseRadiationFactor.Name); _outputs.Add(StatesVarInfo.GrainAmyloseContent.Name); _outputs.Add(StatesVarInfo.HeadRiceYieldStatic.Name); _outputs.Add(AuxiliaryVarInfo.DaysFromFlowering.Name); _outputs.Add(AuxiliaryVarInfo.AverageTempAfterHeading.Name); _outputs.Add(AuxiliaryVarInfo.AverageTemperatureSum.Name); _outputs.Add(AuxiliaryVarInfo.EffectiveWeightedTempMWDamSum.Name); _outputs.Add(AuxiliaryVarInfo.SolarRadiationSum.Name); _outputs.Add(StatesVarInfo.ChalkyGrainPercentageImmatureBaseStatic.Name); _outputs.Add(StatesVarInfo.ChalkyGrainPercentageImmatureBaseDynamic.Name); _outputs.Add(StatesVarInfo.MilkyWhiteChalkyGrainPercentageStatic.Name); _outputs.Add(StatesVarInfo.MilkyWhiteChalkyGrainPercentageDynamic.Name); _outputs.Add(StatesVarInfo.ChalkinessDegreeStatic.Name); _outputs.Add(AuxiliaryVarInfo.StarchSynthesisAbility.Name); _outputs.Add(AuxiliaryVarInfo.TemperatureFactorStarch.Name); _outputs.Add(AuxiliaryVarInfo.GrowingDegreeDaysAtFlowering.Name); _outputs.Add(AuxiliaryVarInfo.IndividualGrainWeight.Name); _outputs.Add(StatesVarInfo.RelativeDailySolubleSugarLeaves.Name); _outputs.Add(StatesVarInfo.RelativeDailySolubleSugarStems.Name); _outputs.Add(StatesVarInfo.IndividualGrainStarchAccumulated.Name); _outputs.Add(StatesVarInfo.RelativeGrainStarchContent.Name); _outputs.Add(RatesVarInfo.TotalGrainCarbonAvailableRate.Name); _outputs.Add(RatesVarInfo.IndividualStarchRateSourceRestricted.Name); _outputs.Add(RatesVarInfo.IndividualStarchRateSinkRestricted.Name); _outputs.Add(RatesVarInfo.IndividualGrainCarbonRateRestricted.Name); _outputs.Add(AuxiliaryVarInfo.GrainsNumber.Name); _outputs.Add(StatesVarInfo.TotalLipidContentStatic.Name); #endregion #region Parameters //parameters _parameters.Add(_IsSusceptibleCultivarToChalkinessVarInfo.Name); _parameters.Add(_IsSusceptibleCultivarToCrackingVarInfo.Name); _parameters.Add(ReferenceGrainAmyloseContentVarInfo.Name); _parameters.Add(IsIndicaCultivarVarInfo.Name); _parameters.Add(ReferenceGrainProteinContentVarInfo.Name); _parameters.Add(GrainLengthVarInfo.Name); _parameters.Add(PotentialRelativeLeavesSolubleSugarContentVarInfo.Name); _parameters.Add(PotentialRelativeStemsSolubleSugarContentVarInfo.Name); _parameters.Add(PostAnthesisRemobilizationBeginningVarInfo.Name); _parameters.Add(SeedWeightVarInfo.Name); _parameters.Add(MaxRateIndividualGrainStarchSynthesisVarInfo.Name); _parameters.Add(PostAnthesisMaxGrainFillinRateTimeVarInfo.Name); _parameters.Add(LowerTemperatureOptimalStarchAccumulationVarInfo.Name); _parameters.Add(HigherTemperatureOptimalStarchAccumulationVarInfo.Name); _parameters.Add(MinimumTemperatureStarchAccumulationVarInfo.Name); _parameters.Add(MaximumTemperatureStarchAccumulationVarInfo.Name); _parameters.Add(DamageTresholdTemperatureVarInfo.Name); #endregion //associated stategies _associatedStrategies.Add("UNIMI.CropQuality.Strategies.ViscosityProfileC"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.AmyloseC"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.PeakViscosityC"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.ProteinC"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.TotalLipidContentLanning"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.ChalkinessC"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.StarchContentChen"); _associatedStrategies.Add("UNIMI.CropQuality.Strategies.HeadRiceLanning"); } #endregion |
IStrategy Members |
|
#region IStrategy Members /// <summary> /// Description of the model /// </summary> public string Description { get { return "This composite collects the implemented approaches for estimating rice crop quality " + " - Composite strategy. See references of the associated strategies: ViscosityProfileC, AmyloseC," + "PeakViscosityC, ProteinC, HeadRiceLanning, ChalkinessC, StarchContentChen, TotalLipidContentLanning"; } } /// <summary> /// URL to access description of the model /// </summary> public string URL { get { return "http://mars.jrc.it/agri4cast/tools"; } } #endregion |
Created with the Personal Edition of HelpNDoc: Easily create iPhone documentation