This notebook is part of a tutorial series for the FRETBursts burst analysis software.
For a step-by-step introduction to FRETBursts usage please refer to us-ALEX smFRET burst analysis.
In this notebook we present a typical FRETBursts workflow for ns-ALEX smFRET burst analysis.
While FRETBursts does not specifically includes functions for fitting TCSPC fluorescence decays, a fitting with exponential decays and IRF deconvolution can be easily performed using standard python libraries. For an example and a brief discussion see the notebook Lifetime decay fit.
In [ ]:
from fretbursts import *
In [ ]:
sns = init_notebook()
The full list of smFRET measurements used in the FRETBursts tutorials can be found on Figshare.
Here we download the ns-ALEX data-file and put it in a folder
named data
, inside the notebook folder.
For this purpose we use the download_file
function provided
by FRETBursts:
In [ ]:
url = 'http://files.figshare.com/2182602/dsdna_d7_d17_50_50_1.hdf5'
In [ ]:
download_file(url, save_dir='./data')
In [ ]:
filename = './data/dsdna_d7_d17_50_50_1.hdf5'
filename
In [ ]:
# filename = OpenFileDialog()
# filename
In [ ]:
import os
if os.path.isfile(filename):
print("Perfect, I found the file!")
else:
print("Sorry, I can't find the file:\n%s" % filename)
In [ ]:
d = loader.photon_hdf5(filename)
#d = loader.nsalex(fname)
In [ ]:
d.time_max
In [ ]:
d.det_t
In [ ]:
print("Detector Counts")
print("-------- --------")
for det, count in zip(*np.unique(d.det_t, return_counts=True)):
print("%8d %8d" % (det, count))
In [ ]:
#d.add(A_ON=(200, 1500), D_ON=(1750, 3200), det_donor_accept=(4, 6))
In [ ]:
d.nanotimes_t
In [ ]:
bpl.plot_alternation_hist(d)
Execute the previous 2 cells until you get a satisfying selection for the excitation periods. Then run the following to apply the parameters:
In [ ]:
loader.alex_apply_period(d)
In [ ]:
d.calc_bg(fun=bg.exp_fit, time_s=30, tail_min_us='auto', F_bg=1.7)
In [ ]:
dplot(d, timetrace_bg)
In [ ]:
dplot(d, timetrace)
xlim(1, 2)
ylim(-50, 50)
In [ ]:
d.burst_search()
In [ ]:
ds = d.select_bursts(select_bursts.size, th1=30)
In [ ]:
alex_jointplot(ds)
In [ ]:
ds.leakage = 0.05
In [ ]:
alex_jointplot(ds)
In [ ]:
dplot(ds, hist_fret, show_kde=True)
In [ ]:
d.nanotimes
In [ ]:
nanotimes = d.nanotimes[0]
nanotimes_d = nanotimes[d.get_D_em()]
nanotimes_a = nanotimes[d.get_A_em()]
We can plot the histogram for this 3 nanotimes:
In [ ]:
hist_params = dict(bins=range(4096), histtype='step', alpha=0.6, lw=1.5)
hist(nanotimes, color='k', label='Total ph.', **hist_params)
hist(nanotimes_d, color='g', label='D. em. ph.', **hist_params)
hist(nanotimes_a, color='r', label='A. em. ph.', **hist_params)
plt.legend()
plt.yscale('log')
We can also select only nanotimes of photons inside bursts.
Here, as an example, we will use the ds
variable that
contains a selection of bursts.
First we compute a selection mask (a boolean array) for photons inside bursts:
In [ ]:
ph_in_bursts_mask = d.ph_in_bursts_mask_ich()
Then we apply this selection to the nanotimes array.
To get the donor- and acceptor-emission nanotimes we combine
the in-bursts selection mask (ph_in_bursts_mask
) with
the donor or acceptor emission mask (that we get with
.get_D_em()
and .get_D_em()
):
In [ ]:
bursts_nanotimes_t = nanotimes[ph_in_bursts_mask]
bursts_nanotimes_d = nanotimes[ph_in_bursts_mask * d.get_D_em()]
bursts_nanotimes_a = nanotimes[ph_in_bursts_mask * d.get_A_em()]
And, as before, we can histogram the nanotimes:
In [ ]:
hist_params = dict(bins=range(4096), histtype='step', alpha=0.6, lw=1.5)
hist(bursts_nanotimes_t, color='k', label='Total ph.', **hist_params)
hist(bursts_nanotimes_d, color='g', label='D. em. ph.', **hist_params)
hist(bursts_nanotimes_a, color='r', label='A. em. ph.', **hist_params)
plt.legend()
plt.yscale('log')
To save a single array to a file we can use the .tofile
method:
In [ ]:
nanotimes.tofile('nanotimes_t.csv', sep=',\n') # save in CSV txt format
To save a set of arrays in MATLAB format we can use the
scipy.io.savemat
function.
Here we save 3 arrays bursts_nanotimes_t
, bursts_nanotimes_d
and bursts_nanotimes_a
to a file called bursts_nanotimes.mat:
In [ ]:
from scipy.io import savemat
In [ ]:
savemat('bursts_nanotimes.mat',
dict(bn_t=bursts_nanotimes_t,
bn_d=bursts_nanotimes_d,
bn_a=bursts_nanotimes_a,))
When loaded in MATLAB the arrays will be named bn_t
, bn_d
and bn_a
.
In [ ]:
In [ ]:
In [ ]:
In [ ]: