def potential_length(self): # for MAIZSIM #return self.maximum_length * self.rank_effect(weight=0.5) # for beta fn calibrated from JH's thesis for SP and KM varieties, 8/10/15, SK #FIXME: leaves_potential is already max(leaves_generic, leaves_total)? n = max(self.p.pheno.leaves_potential, self.p.pheno.leaves_generic) l_t = 1.64 * n l_pk = 0.88 * n R_max = self.maximum_length return R_max * beta_thermal_func(T=self.rank, T_opt=l_pk, T_max=l_t)
def elongation_age(self): #TODO add td in the args #TODO implement Parent and Tardieu (2011, 2012) approach for leaf elongation in response to T and VPD, and normalized at 20C, SK, Nov 2012 # elongAge indicates where it is now along the elongation stage or duration. # duration is determined by totallengh/maxElongRate which gives the shortest duration to reach full elongation in the unit of days. #FIXME no need to check here, as it will be compared against duration later anyways #return min(self._elongation_tracker.rate, self.growth_duration) if self.appeared and not self.mature: R_max = 1.0 return R_max * beta_thermal_func( T=self.p.pheno.temperature, T_opt=self.p.pheno.optimal_temperature, T_max=self.p.pheno.ceiling_temperature)
def rate(self, R_max, T, T_opt, T_ceil): return R_max * beta_thermal_func(T, T_opt, T_ceil)
def rate(self, R_max, T, T_opt, T_ceil): #FIXME prevent extra accumulation after it's `over` if self.ing: return R_max * beta_thermal_func(T, T_opt, T_ceil)
def initial_leaves_during_storage(self, R_max, T, T_opt, T_ceil, SD): return R_max * beta_thermal_func(T=T, T_opt=T_opt, T_max=T_ceil) * SD