Förster Resonance Energy Transfer#

Calculate and plot phasor coordinates of FRET donor and acceptor channels.

The phasorpy.phasor.phasor_from_fret_donor(), phasorpy.phasor.phasor_from_fret_acceptor(), and phasorpy.plot.PhasorPlotFret functions and classes are used to calculate and plot phasor coordinates of FRET (Förster Resonance Energy Transfer) donor and acceptor channels as a function of:

  • laser pulse or modulation frequency

  • donor and acceptor lifetimes

  • FRET efficiency

  • fraction of donors undergoing FRET

  • fraction of directly excited acceptors (acceptor bleedthrough)

  • fraction of donor fluorescence in acceptor channel (donor bleedthrough)

  • fraction of background fluorescence

Define FRET model settings used throughout this tutorial:

settings = {
    'frequency': 60.0,  # MHz
    'donor_lifetime': 4.2,  # ns
    'acceptor_lifetime': 3.0,  # ns
    'fret_efficiency': 0.5,  # 50%
}

FRET efficiency trajectories#

The lifetime \(\tau_{DA}\) and fluorescence intensity \(F_{DA}\) of a FRET donor quenched by energy transfer of efficiency \(E\) is given by \(\tau_{DA} = \tau_{D} (1 - E)\) and \(F_{DA} = F_{D} (1 - E)\), where \(\tau_{D}\) and \(F_{D}\) are the donor lifetime and intensity in absence of energy transfer.

Hence, in the absence of background fluorescence and donors not undergoing energy transfer, the phasor coordinates of the donor channel at different FRET efficiencies lie on the universal semicircle. At 100% energy transfer, the donor lifetime and fluorescence intensity are zero.

The sensitized emission of a FRET acceptor is phase-shifted and demodulated relative to the FRET donor because of the duration of, and dissipation during, relaxation and energy transfer processes. Hence, in the absence of directly excited acceptor, donor bleedthrough, and background fluorescence, the phasor coordinates of the acceptor channel at different FRET efficiencies lie outside the universal semicircle of the donor.

from phasorpy.plot import PhasorPlotFret

PhasorPlotFret(
    **settings,
    title='FRET efficiency trajectories',
).show()
FRET efficiency trajectories

Fractions not FRETing#

Adding fractions of donors not participating in FRET and fractions of directly excited acceptors (acceptor bleedthrough) pulls the FRET trajectories of the donor and acceptor channels towards the phasor coordinates of the donor and acceptor without FRET:

PhasorPlotFret(
    **settings,
    donor_freting=0.9,  # 90%
    acceptor_bleedthrough=0.1,  # 10%
    title='FRET efficiency trajectories with fractions not FRETing',
).show()
FRET efficiency trajectories with fractions not FRETing

Donor bleedthrough#

If the acceptor channel contains fractions of donor fluorescence (donor bleedthrough), the FRET efficiency trajectory of the acceptor channel is pulled towards the phasor coordinates of the donor channel:

PhasorPlotFret(
    **settings,
    donor_bleedthrough=0.1,  # 10%
    title='FRET efficiency trajectories with donor bleedthrough',
).show()
FRET efficiency trajectories with donor bleedthrough

Background fluorescence#

In the presence of background fluorescence, the FRET efficiency trajectories are linear combinations with the background phasor coordinates. At 100% energy transfer, the donor channel only contains background fluorescence if all donors participate in FRET. At 0% energy transfer, in the absence of donor bleedthrough and directly excited acceptor, the acceptor channel only contains background fluorescence:

PhasorPlotFret(
    **settings,
    donor_freting=1.0,
    acceptor_background=0.1,  # 10%
    donor_background=0.1,  # 10%
    background_real=0.5,
    background_imag=0.2,
    title='FRET efficiency trajectories with background',
).show()
FRET efficiency trajectories with background

Many parameters#

The phasor coordinates of the donor channel may contain fractions of:

  • donor not undergoing energy transfer

  • donor quenched by energy transfer

  • background fluorescence

The phasor coordinates of the acceptor channel may contain fractions of:

  • acceptor sensitized by energy transfer

  • directly excited acceptor

  • donor bleedthrough

  • background fluorescence

PhasorPlotFret(
    **settings,
    donor_freting=0.9,
    donor_bleedthrough=0.1,
    acceptor_bleedthrough=0.1,
    acceptor_background=0.1,
    donor_background=0.1,
    background_real=0.5,
    background_imag=0.2,
    title='FRET efficiency trajectories with many parameters',
).show()
FRET efficiency trajectories with many parameters

Interactive plot#

Run the FRET phasor plot interactively:

$ python -m phasorpy fret

or

PhasorPlotFret(
    **settings,
    donor_freting=0.9,
    donor_bleedthrough=0.1,
    interactive=True,
    title='Interactive FRET phasor plot',
).show()
Interactive FRET phasor plot

Multi-frequency plot#

Since the components of the FRET model have different frequency responses, the multi-frequency plots of donor and acceptor channels may show complex patterns. Background fluorescence is omitted from this example to model an in vitro experiment:

import numpy

from phasorpy.phasor import (
    phasor_from_fret_acceptor,
    phasor_from_fret_donor,
    phasor_to_polar,
)
from phasorpy.plot import plot_polar_frequency

frequency = numpy.logspace(0, 4, 64).reshape(-1, 1)  # 1-10000 MHz
fret_efficiency = numpy.array([0.05, 0.95]).reshape(1, -1)  # 5% and 95%
donor_lifetime = 4.2
acceptor_lifetime = 3.0
donor_freting = 0.9
donor_bleedthrough = 0.1
acceptor_bleedthrough = 0.1

donor_real, donor_imag = phasor_from_fret_donor(
    frequency,
    donor_lifetime,
    fret_efficiency=fret_efficiency,
    donor_freting=donor_freting,
)

# phasor of acceptor channel
acceptor_real, acceptor_imag = phasor_from_fret_acceptor(
    frequency,
    donor_lifetime,
    acceptor_lifetime,
    fret_efficiency=fret_efficiency,
    donor_freting=donor_freting,
    donor_bleedthrough=donor_bleedthrough,
    acceptor_bleedthrough=acceptor_bleedthrough,
)

plot_polar_frequency(
    frequency,
    phasor_to_polar(donor_real, donor_imag)[0],
    phasor_to_polar(donor_real, donor_imag)[1],
    title='Donor channel',
)
Donor channel
plot_polar_frequency(
    frequency,
    *phasor_to_polar(acceptor_real, acceptor_imag),
    title='Acceptor channel',
)
Acceptor channel

sphinx_gallery_thumbnail_number = 5 mypy: allow-untyped-defs, allow-untyped-calls mypy: disable-error-code=”arg-type”

Total running time of the script: (0 minutes 1.866 seconds)

Gallery generated by Sphinx-Gallery