Ejemplo n.º 1
0
    def figs7(self):
        """ returns figure with NPQ trace for Arabidopsis WT simulated, measured and simulated npq4 mutant"""
        fig = plt.figure()
        ax = plt.subplot(111)
        v = visualizeexperiment.VisualizeExperiment('Arabidopsis', 900, 15)
        v.plotNPQ('r')
        light = cpfd.cpfd('Arabidopsis', 900)
        Tfls, PFDs = self.flashes(v, light)
        # ===================================================== #
        #                   integrate over the time             #
        # ===================================================== #
        model, y0 = loadspecie.loadspecie('Arabidopsis', 'wt')
        s = simulate.Sim(model)
        s.piecewiseConstant(PFDs[0:], Tfls[0:], y0)
        res = npqResults.NPQResults(s)

        T, F, Fmax, Tm, Fm, Ts, Fs, Bst = res.fluo()
        timesft = 20  # shift the simulation by an interval to see the experimental points
        ax.plot(Tm + timesft, (Fm[0] - Fm) / Fm,
                c=self.col[6],
                marker='s',
                linestyle='-',
                label='wt')

        model2, y0 = loadspecie.loadspecie('Arabidopsis', 'npq4')
        s2 = simulate.Sim(model2)
        s2.piecewiseConstant(PFDs[0:], Tfls[0:], y0)
        res2 = npqResults.NPQResults(s2)

        T, F, Fmax, Tm, Fm, Ts, Fs, Bst = res2.fluo()
        timesft = 20  # shift the simulation by an interval to see the experimental points
        ax.plot(Tm + timesft, (Fm[0] - Fm) / Fm,
                c=self.col[1],
                marker='s',
                linestyle='-',
                label='npq4')

        # add light banner
        v.setGraphics([-30, 0, 841, 1792, 2147], 1.7, yheight=0.2)

        handles, labels = ax.get_legend_handles_labels()
        leg = ax.legend(handles,
                        ['simulated wt', 'simulated npq4', 'measured wt'],
                        bbox_to_anchor=(0., 1.02, 1., .102),
                        loc=10,
                        borderaxespad=0.1)
        if leg:
            leg.draggable()

        plt.title('')

        self.save_plot(fig, 'FigS7')
Ejemplo n.º 2
0
    def figs6(self,
              PFDs=[
                  0.1, 10, 50, 100, 150, 200, 250, 300, 400, 500, 600, 700,
                  800, 900, 1000
              ]):
        """ returns the steady state fraction of the reduced PQ pool for a given list of different light intensities
            from dim light to high light """
        model, y0 = loadspecie.loadspecie('Arabidopsis', 'wt')
        s = simulate.Sim(model)
        # integrate over time
        Y = s.steadyStateLightScan(PFDs, y0)
        # visualize results
        fig = plt.figure()
        ax = plt.subplot(111)

        plt.plot(PFDs,
                 Y[:, 0] / model.par.PQtot,
                 'sr',
                 linestyle='-',
                 markersize=10)
        plt.xlabel('light intensity', fontsize=16)
        plt.ylabel('PQH$_2$/(PQ+PQH$_2$)', fontsize=16)

        ax.set_yticks([0, 0.5, 1])
        ax.set_yticklabels(['0%', '50%', '100%'])
        ax.set_xticks([0, 220, 320, 900])
        ax.set_xticklabels(['dim', 100, 300, 900])

        self.save_plot(fig, 'FigS6')
Ejemplo n.º 3
0
You should have received a copy of the GNU General Public License
along with this program (license.txt).  If not, see <http://www.gnu.org/licenses/>.
"""
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize

import parameters
import npqModel
import npqResults
import simulate
import misc

import dataAnalysis
import visualizeexperiment

db = dataAnalysis.DB()

# =============================================================== #
#              load parameters and create model object            #
# =============================================================== #
p = parameters.NPQmodelParameterSet()
m = npqModel.NPQModel(p)
s = simulate.Sim(m)

# =============================================================== #
# initial concentrations corresponding to a dark adapted organism #
# =============================================================== #
y0 = np.array([0., p.bH * misc.pHinv(p.pHstroma), 0, 1, 1, 0])
Ejemplo n.º 4
0
    def fig6(self):
        """
        :return: figure with fluorescence dynamics for Pothos simulated and measured
                 and simulated and measured photosynthetic yield
        """
        light = cpfd.cpfd('Pothos', 100)

        fig = plt.figure(figsize=(7, 3))

        ax = plt.subplot(211)
        v = visualizeexperiment.VisualizeExperiment('Pothos', 100, 15)
        v.plotFluorescence()

        Tfls, PFDs = self.flashes(v, light)

        # load the Pothos model, automatically sets the gamma2 parameter to higher value
        model, y0 = loadspecie.loadspecie('Pothos', 'wt')
        s = simulate.Sim(model)

        s.piecewiseConstant(PFDs[0:], Tfls[0:], y0)

        # load the results into the res object that allow for easier data ansalysis
        res = npqResults.NPQResults(s)

        T, F, Fmax, Tm, Fm, Ts, Fs, Bst = res.fluo()
        timesft = 20  # shift the simulation by an interval to see the experimental points
        ax.plot(T + timesft, F / max(F), 'r')

        # collect handles to set the legend with experimental results
        T_avg, T_sd = v.getAvgValue('T')
        Fm_avg, Fm_sd = v.getAvgValue('Fm')

        l1 = plt.errorbar(T_avg,
                          Fm_avg / Fm_avg[0],
                          Fm_sd,
                          color=self.col[5],
                          linestyle='None',
                          marker='^',
                          label='Experiment')
        l3 = plt.Line2D([], [], linewidth=3, color='r')

        ax.set_ylabel('Fluorescence (a.u.)', fontsize=18)
        ax.set_xlabel('')
        ax.set_xticks([0, 840, 1800, 2100])
        ax.set_xticklabels([0, '14', '30', '35'])

        leg = plt.legend([l1, l3], ["Experiment", "Simulation"])
        if leg:
            leg.draggable()

        ax2 = plt.subplot(212)
        v.setGraphics([-100, 0, 841, 1792, 2147], 1, yheight=0.1)

        ax2.plot(v.getAvgValue('T')[0],
                 (v.getAvgValue('Fm')[0] - v.getAvgValue('Ft')[0]) /
                 v.getAvgValue('Fm')[0],
                 color=self.col[5],
                 marker='^',
                 label='experiment')
        ax2.plot(Tm, (Fm - Fs) / Fm, color='r', marker='o', label='simulation')
        ax2.set_xticks([0, 840, 1800, 2100])
        ax2.set_xticklabels([0, '14', '30', '35'])
        ax2.set_xlabel('time [min]', fontsize=16)
        ax2.set_ylabel('$\Phi$ PSII', fontsize=18)

        leg = plt.legend()
        if leg:
            leg.draggable()

        self.save_plot(fig, 'Fig6')
Ejemplo n.º 5
0
    def fig5(self):
        """
        :return: figure visualizing pH dependance of quencher and its components.
                 Upper plot: phase plane trajectories
                 Bottom plots: pH and quencher components for 3 light intensities
        """
        color = list(self.col[i]
                     for i in [1, 3, 5])  # select 3 distinct colours
        mark = ['x', 'o', 's']
        v = visualizeexperiment.VisualizeExperiment('Arabidopsis', 100, 15)

        # set up the figure
        fig = plt.figure(figsize=(7, 10))

        #make outer gridspec
        outer_grid = gridspec.GridSpec(
            2, 1,
            hspace=0.2)  # gridspec with two adjacent horizontal cellstwo rows
        ax = plt.subplot(outer_grid[0])
        ax.set_ylabel('lumen pH', fontsize=18)
        ax.set_xlabel('quencher activity [Q]', fontsize=18)
        ax.set_ylim(3, 8)
        ax.set_xlim(0.05, 0.4)
        ax.set_yticks([3, 4, 5, 6, 7, 8])
        ax.set_yticklabels(['', 4, 5, 6, 7, 8], fontsize=14)
        ax.set_xticks([0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4])
        ax.set_xticklabels(['', '0.1', '', '0.2', '', '0.3', '', '0.4'],
                           fontsize=14)

        # add the steady state
        m, y0 = loadspecie.loadspecie('Arabidopsis', 'wt')
        ss = simulate.Sim(m)

        scan = [
            10, 50, 100, 120, 150, 200, 220, 300, 320, 330, 340, 350, 400, 500,
            600, 700, 800, 900, 1000, 1250, 1500
        ]
        Y = ss.steadyStateLightScan(scan, y0)

        ax.plot(m.quencher(Y[:, 3], Y[:, 4]),
                misc.pH(Y[:, 1]),
                c='r',
                linestyle='-')

        for i in [6, 8, 17]:
            ax.plot(m.quencher(Y[i, 3], Y[i, 4]),
                    misc.pH(Y[i, 1]),
                    'o',
                    linestyle='None',
                    markersize=15,
                    mfc='r')

        upper_cell = outer_grid[1]
        inner_grid = gridspec.GridSpecFromSubplotSpec(2,
                                                      1,
                                                      upper_cell,
                                                      hspace=0.0)

        # From here we can plot using inner_grid's SubplotSpecs
        ax2 = plt.subplot(inner_grid[0, 0])
        # add the three points for the calibrated light intensity
        PFDs = [
            cpfd.cpfd('Arabidopsis', 100),
            cpfd.cpfd('Arabidopsis', 300),
            cpfd.cpfd('Arabidopsis', 900)
        ]
        time = [0, 30, 930, 1830, 2130]
        nsteps = [31, 901, 901, 301]  # nr of steps for each integration phase
        v.setGraphics(time, 9, 1)
        ax2.set_ylabel('lumen pH', fontsize=14)
        ax2.set_ylim(2, 9)
        ax2.get_xaxis().set_visible(False)
        ax2.get_yaxis().set_visible(True)
        ax2.set_yticks([2, 3, 4, 5, 6, 7, 8])
        ax2.set_yticklabels(['', 3, 4, 5, 6, 7, 8], fontsize=14)

        ax3 = plt.subplot(inner_grid[1, 0])
        ax3.set_ylabel('Q components', fontsize=16)
        ax3.set_xlabel('time [min]', fontsize=18)
        ax3.set_xlim([0, time[-1]])
        ax3.set_xticks(time[1:])
        ax3.set_xticklabels(['30', '14', '30', '35'], fontsize=14)
        ax3.set_yticks([0, 0.2, 0.5, 0.8, 1.])
        ax3.set_yticklabels([0, 0.2, 0.5, 0.8, ''], fontsize=14)

        for i in range(len(PFDs)):
            s = simulate.Sim(m)
            s.clearResults()
            PFD = PFDs[i]
            light = [0, PFD, 0, PFD]

            s.piecewiseConstant(light, time[1:], y0, nsteps)
            res = npqResults.NPQResults(s)

            ax.plot(m.quencher(res.getVar(3), res.getVar(4)),
                    misc.pH(res.getVar(1)),
                    c=color[i],
                    marker=mark[i],
                    label=str(self.light_intens[i]))

            ax2.plot(res.getT(),
                     misc.pH(res.getVar(1)),
                     c=color[i],
                     label=str(self.light_intens[i]))

            ax3.plot(res.getT(),
                     1 - res.getVar(3),
                     c=color[i],
                     linestyle='--',
                     label=str(self.light_intens[i]))
            ax3.plot(res.getT(),
                     1 - res.getVar(4),
                     c=color[i],
                     linestyle='-',
                     label=str(self.light_intens[i]))

        handles, labels = ax.get_legend_handles_labels()
        leg1 = ax.legend(handles,
                         labels,
                         bbox_to_anchor=(0., 1.02, 1., .102),
                         loc=10,
                         ncol=1,
                         borderaxespad=0.1)
        if leg1:
            leg1.draggable()

        handles, labels = ax3.get_legend_handles_labels()
        leg = ax3.legend([
            handles[0], handles[2], handles[4], handles[1], handles[3],
            handles[5]
        ], [labels[0], labels[2], labels[4], labels[1], labels[3], labels[5]],
                         bbox_to_anchor=(0., 1.02, 1., .102),
                         loc=10,
                         title='PsbS$^P$        Zx',
                         ncol=2,
                         borderaxespad=0.1)
        if leg:
            leg.draggable()

        self.save_plot(fig, 'Fig5')
Ejemplo n.º 6
0
    def fig4(self):
        """
        :return: three plots with PAM traces simulated and measured experimentally
        """
        timesft = 5  # shift the simulation by an interval to see the experimental points

        fig = plt.figure(figsize=(17, 5))
        gs = gridspec.GridSpec(1, 3, width_ratios=[1, 1, 1])

        for i in range(len(self.light_intens)):
            ax = plt.subplot(gs[i])
            v = visualizeexperiment.VisualizeExperiment(
                'Arabidopsis', self.light_intens[i], self.dark_dur[i])
            v.plotFluorescence()

            # ===================================================== #
            # read out time of flashes as applied in the experiment #
            # ===================================================== #
            light = cpfd.cpfd('Arabidopsis', int(self.light_intens[i]))
            Tfls, PFDs = self.flashes(v, light)

            # ===================================================== #
            #                   integrate over the time             #
            # ===================================================== #
            model, y0 = loadspecie.loadspecie('Arabidopsis', 'wt')
            s = simulate.Sim(model)
            s.piecewiseConstant(PFDs[0:], Tfls[0:], y0)

            res = npqResults.NPQResults(s)

            T, F, Fmax, Tm, Fm, Ts, Fs, Bst = res.fluo()

            # plot the simulation
            plt.plot(T + timesft, F / max(F), 'orchid', label='simulation')

            # add the legend for the experiment
            ax = plt.gca()
            T_avg, T_sd = v.getAvgValue('T')
            Fm_avg, Fm_sd = v.getAvgValue('Fm')

            l1 = ax.errorbar(T_avg,
                             Fm_avg / Fm_avg[0],
                             Fm_sd,
                             color='k',
                             linestyle='None',
                             marker='^',
                             label='Fm\'')
            l3 = plt.Line2D([], [], linewidth=3, color="orchid")

            leg = plt.legend([l1, l3], ["Experiment", "Simulation"])
            if leg:
                leg.draggable()

            if i == 0:
                ax.annotate(str(self.light_intens[i]) +
                            ' $\mu$Em$^{-2}$s$^{-1}$', (T_avg[9] / 2, 1.05),
                            color='k',
                            weight='bold',
                            fontsize=16,
                            ha='center',
                            va='center')
                ax.set_ylabel('Fluorescence ($\mathrm{F_M\'}/\mathrm{F_M}$)',
                              fontsize=18)
            else:
                ax.annotate(str(self.light_intens[i]), (T_avg[9] / 2, 1.05),
                            color='k',
                            weight='bold',
                            fontsize=16,
                            ha='center',
                            va='center')
            ax.annotate(str(self.dark_dur[i]) + ' min',
                        (T_avg[9] + (T_avg[16] - T_avg[9]) / 2, 1.05),
                        color='w',
                        weight='bold',
                        fontsize=16,
                        ha='center',
                        va='center')

            if i == 0:
                ax.set_xticks([0, 840, 1800, 2100])
                ax.set_xticklabels([0, '14', '30', '35'], fontsize=16)
            elif i == 1:
                ax.set_xticks([0, 840, 2700, 3000])
                ax.set_xticklabels([0, '14', '45', '50'], fontsize=16)
            else:
                ax.set_xticks([0, 840, 4500, 4800])
                ax.set_xticklabels([0, '14', '75', '80'], fontsize=16)
            ax.set_xlabel('time [min]', fontsize=18)

        plt.tight_layout()

        self.save_plot(fig, 'Fig4')