Beispiel #1
0
def CalculateVernalizationProgress(IsVernalizable, Vernaprog, DeltaTT,
                                   MinTvern, IntTvern, VAI, VBEE, MinDL, MaxDL,
                                   DayLength, MaxTvern, LeafNumber, PNini,
                                   MinFinalNumber, AMXLFNO, currentdate,
                                   cumulTT, calendar):

    Vernaprog1 = Vernaprog
    MinFinalNumber1 = MinFinalNumber
    calendar1 = calendar.copy()
    if (IsVernalizable == 1 and Vernaprog1 < 1):
        TT = DeltaTT

        if (TT >= MinTvern and TT <= IntTvern):
            Vernaprog = Vernaprog1 + VAI * TT + VBEE

        else:
            Vernaprog = Vernaprog1

        if (TT > IntTvern):
            maxVernaProg = VAI * IntTvern + VBEE
            DLverna = max(MinDL, min(MaxDL, DayLength))
            Vernaprog += max(
                0,
                maxVernaProg * (1 + ((IntTvern - TT) / (MaxTvern - IntTvern)) *
                                ((DLverna - MinDL) / (MaxDL - MinDL))))

        primordno = 2.0 * LeafNumber + PNini

        minLeafNumber = MinFinalNumber1
        if (Vernaprog >= 1.0 or primordno >= AMXLFNO):

            MinFinalNumber = max(primordno, MinFinalNumber)
            calendar = Calendar.CalendarSet("EndVernalisation", currentdate,
                                            cumulTT, calendar1)
            Vernaprog = max(1, Vernaprog)

        else:

            potlfno = AMXLFNO - (AMXLFNO - minLeafNumber) * Vernaprog
            if (primordno >= potlfno):

                MinFinalNumber = max((potlfno + primordno) / 2.0,
                                     MinFinalNumber)
                calendar = Calendar.CalendarSet("EndVernalisation",
                                                currentdate, cumulTT,
                                                calendar1)
                Vernaprog = max(1, Vernaprog)

            else:
                MinFinalNumber = MinFinalNumber1

    else:
        Vernaprog = Vernaprog1
        MinFinalNumber = MinFinalNumber1
        calendar = calendar1.copy()

    return Vernaprog, MinFinalNumber, calendar
def CalculateUpdateLeafFlag(LeafNumber, HasFlagLeafLiguleAppeared,
                            FinalLeafNumber, calendar, currentdate, cumulTT,
                            phase):

    if (phase >= 1 and phase < 4):
        calendar1 = calendar.copy()
        if (LeafNumber > 0):
            if (HasFlagLeafLiguleAppeared == 0 and
                (FinalLeafNumber > 0 and LeafNumber >= FinalLeafNumber)):
                HasFlagLeafLiguleAppeared = 1
                if (Calendar.IsMomentRegistred(
                        "ZC_39_FlagLeafLiguleJustVisible", calendar1) == 0):
                    calendar = Calendar.CalendarSet(
                        "ZC_39_FlagLeafLiguleJustVisible", currentdate,
                        cumulTT, calendar)
        else:
            HasFlagLeafLiguleAppeared = 0
            calendar = calendar1.copy()
    return calendar, HasFlagLeafLiguleAppeared
Beispiel #3
0
def CalculateRegisterZadok(FinalLeafNumber, LeafNumber, currentdate, cumulTT,
                           slopeTSFLN, intTSFLN, calendar, phase,
                           cumulTTFromZC_65, Der, currentZadokStage):
    calendar1 = calendar.copy()

    roundedFinalLeafNumber = int(FinalLeafNumber + 0.5)

    if (HasReachedHaun(4, LeafNumber) and (Calendar.IsMomentRegistred(
            "ZC_21_MainShootPlus1Tiller", calendar1) == 0)):
        calendar = Calendar.CalendarSet("ZC_21_MainShootPlus1Tiller",
                                        currentdate, cumulTT, calendar1)
        currentZadokStage = "ZC_21_MainShootPlus1Tiller"
        hasZadokStageChanged = 1
    elif (HasReachedHaun(5, LeafNumber) and (Calendar.IsMomentRegistred(
            "ZC_22_MainShootPlus2Tiller", calendar1) == 0)):
        calendar = Calendar.CalendarSet("ZC_22_MainShootPlus2Tiller",
                                        currentdate, cumulTT, calendar1)
        currentZadokStage = "ZC_22_MainShootPlus2Tiller"
        hasZadokStageChanged = 1

    elif (HasReachedHaun(6, LeafNumber) and (Calendar.IsMomentRegistred(
            "ZC_23_MainShootPlus3Tiller", calendar1) == 0)):
        calendar = Calendar.CalendarSet("ZC_23_MainShootPlus3Tiller",
                                        currentdate, cumulTT, calendar1)
        currentZadokStage = "ZC_23_MainShootPlus3Tiller"
        hasZadokStageChanged = 1

    elif (FinalLeafNumber > 0 and HasReachedHaun(
            slopeTSFLN * FinalLeafNumber - intTSFLN, LeafNumber) and
          (Calendar.IsMomentRegistred("TerminalSpikelet", calendar1) == 0)):
        calendar = Calendar.CalendarSet("TerminalSpikelet", currentdate,
                                        cumulTT, calendar1)
        currentZadokStage = "TerminalSpikelet"
        hasZadokStageChanged = 1

    elif (HasReachedFlagLeaf(4, roundedFinalLeafNumber, LeafNumber)
          and (Calendar.IsMomentRegistred("ZC_30_PseudoStemErection",
                                          calendar1) == 0)):
        calendar = Calendar.CalendarSet("ZC_30_PseudoStemErection",
                                        currentdate, cumulTT, calendar1)
        currentZadokStage = "ZC_30_PseudoStemErection"
        hasZadokStageChanged = 1
    elif (HasReachedFlagLeaf(3, roundedFinalLeafNumber, LeafNumber)
          and (Calendar.IsMomentRegistred("ZC_31_1stNodeDetectable", calendar1)
               == 0)):
        calendar = Calendar.CalendarSet("ZC_31_1stNodeDetectable", currentdate,
                                        cumulTT, calendar1)
        currentZadokStage = "ZC_31_1stNodeDetectable"
        hasZadokStageChanged = 1

    elif (HasReachedFlagLeaf(2, roundedFinalLeafNumber, LeafNumber)
          and (Calendar.IsMomentRegistred("ZC_32_2ndNodeDetectable", calendar1)
               == 0)):
        calendar = Calendar.CalendarSet("ZC_32_2ndNodeDetectable", currentdate,
                                        cumulTT, calendar1)
        currentZadokStage = "ZC_32_2ndNodeDetectable"
        hasZadokStageChanged = 1

    elif (HasReachedFlagLeaf(1, roundedFinalLeafNumber, LeafNumber)
          and (Calendar.IsMomentRegistred("ZC_37_FlagLeafJustVisible",
                                          calendar1) == 0)):
        calendar = Calendar.CalendarSet("ZC_37_FlagLeafJustVisible",
                                        currentdate, cumulTT, calendar1)
        currentZadokStage = "ZC_37_FlagLeafJustVisible"
        hasZadokStageChanged = 1
    elif ((Calendar.IsMomentRegistred("ZC_85_MidGrainFilling", calendar1) == 0)
          and phase == 4.5 and cumulTTFromZC_65 >= Der):

        calendar = Calendar.CalendarSet("ZC_85_MidGrainFilling", currentdate,
                                        cumulTT, calendar1)
        currentZadokStage = "ZC_85_MidGrainFilling"
        hasZadokStageChanged = 1
    else:
        hasZadokStageChanged = 0
        calendar = calendar1.copy()

    #print currentZadokStage

    return hasZadokStageChanged, currentZadokStage, calendar
def CalculateCalendar(phase, currentdate, cumulTT, calendar):
    if (Calendar.IsMomentRegistred(Phase.PreviousMoment(phase),
                                   calendar) == 0):
        calendar = Calendar.CalendarSet(Phase.PreviousMoment(phase),
                                        currentdate, cumulTT, calendar)
    return calendar