Förster resonance energy transfer#
Calculate and plot phasor coordinates of FRET donor and acceptor channels.
The phasorpy.lifetime.phasor_from_fret_donor(),
phasorpy.lifetime.phasor_from_fret_acceptor(), and
phasorpy.plot.PhasorPlotFret functions and classes
are used to calculate and plot phasor coordinates of
Förster resonance energy transfer (FRET) 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 signal in acceptor channel (donor bleedthrough)
fraction of background signal
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 signal intensity \(F_{DA}\) of a FRET donor quenched by energy transfer of efficiency \(E\) are 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 the absence of energy transfer.
Hence, in the absence of background signal 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 signal intensity are zero.
The sensitized emission of a FRET acceptor is phase-shifted and demodulated relative to the FRET donor due to time delays and energy dissipation during relaxation and energy transfer processes. Hence, in the absence of directly excited acceptor, donor bleedthrough, and background signal, 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()

Fractions not fretting#
Adding fractions of donors not participating in FRET (not fretting) 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_fretting=0.9, # 90%
acceptor_bleedthrough=0.1, # 10%
title='FRET efficiency trajectories with fractions not fretting',
).show()

Donor bleedthrough#
When the acceptor channel contains fractions of donor signal (donor bleedthrough), the FRET efficiency trajectory of the acceptor channel shifts towards the phasor coordinates of the donor channel:
PhasorPlotFret(
**settings,
donor_bleedthrough=0.1, # 10%
title='FRET efficiency trajectories with donor bleedthrough',
).show()

Background signal#
In the presence of background signal, the FRET efficiency trajectories are linear combinations with the background phasor coordinates. At 100% energy transfer, the donor channel only contains background signal 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 signal:
PhasorPlotFret(
**settings,
donor_fretting=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()

Many parameters#
The phasor coordinates of the donor channel may contain fractions of:
donor not undergoing energy transfer
donor quenched by energy transfer
background signal
The phasor coordinates of the acceptor channel may contain fractions of:
acceptor sensitized by energy transfer
directly excited acceptor
donor bleedthrough
background signal
PhasorPlotFret(
**settings,
donor_fretting=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()

Multi-frequency plot#
Since each component of the FRET model has a distinct frequency response, the multi-frequency plots of donor and acceptor channels reveal complex patterns. Background signal is omitted from this example to model an in vitro experiment:
import numpy
from phasorpy.lifetime import phasor_from_fret_acceptor, phasor_from_fret_donor
from phasorpy.phasor import 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_fretting = 0.9
donor_bleedthrough = 0.1
acceptor_bleedthrough = 0.1
# phasor of donor channel
donor_real, donor_imag = phasor_from_fret_donor(
frequency,
donor_lifetime,
fret_efficiency=fret_efficiency,
donor_fretting=donor_fretting,
)
# phasor of acceptor channel
acceptor_real, acceptor_imag = phasor_from_fret_acceptor(
frequency,
donor_lifetime,
acceptor_lifetime,
fret_efficiency=fret_efficiency,
donor_fretting=donor_fretting,
donor_bleedthrough=donor_bleedthrough,
acceptor_bleedthrough=acceptor_bleedthrough,
)
plot_polar_frequency(
frequency,
*phasor_to_polar(donor_real, donor_imag),
title='Donor channel',
)

plot_polar_frequency(
frequency,
*phasor_to_polar(acceptor_real, acceptor_imag),
title='Acceptor channel',
)

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