What are strategies

Parent Previous Next

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.

Copy Code

#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

Copy Code

#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

Copy Code

#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

Copy Code

#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

Copy Code

#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

Copy Code

#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

Copy Code

#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