OpenSMFS / FRETBursts

Burst analysis software for single and multi-spot single-molecule FRET (smFRET) data.
https://opensmfs.github.io/FRETBursts/
GNU General Public License v2.0
12 stars 9 forks source link

correction: Acceptor Direct Excitation #5

Open tritemio opened 6 years ago

tritemio commented 6 years ago

From @ncodina on February 8, 2017 22:26

Hi, I want to ask for advise on how to correct for the acceptor direct excitation. We've observed than when we have a solution of only acceptor dye, exciting with the donor laser, we still detect photons in the donor and acceptor channel:

screen shot 2017-02-08 at 20 46 51

In the "smFRET" mode (with only one excitation laser), is FRETBursts correcting for direct excitation?

In "nsALEX" (PIE measurement), we've seen that is applied: na -= naa*dir_ex Is it correct to measure dir_ex, as: (Acceptor-detector counts during Donor excitation) / (Acceptor-detector counts during Acceptor excitation) in a sample of Acceptor only?

We've found this paper: Applying Corrections in Single-Molecule FRET (http://biorxiv.org/content/early/2017/02/01/083287) Could you explain me how to measure Dir from Definition 2?

Copied from original issue: tritemio/FRETBursts#55

tritemio commented 6 years ago

@ncodina, direct acceptor excitation by the donor laser means: you can weakly excite the acceptor dye with the donor laser, the acceptor emission spectrum doesn't change.

In other words, even though you can excite the acceptor with the donor laser, its emission spectrum only overlaps with the acceptor detection channel. The effect is signal in the acceptor channel even though you excite the donor. You don't get any signal in the donor channel!

The coefficient Data.dir_ex in FRETBursts is only used to correct na in case of ALEX/PIE. No correction is applied for single-laser measurements. This is a little inconsistent and it is like this for historical reasons. Even for PIE/ALEX, I suggest to use the RAW histograms (no leakage, Dir, gamma, only background correction) to fit the populations. Then, you can correct the single value of the FRET peak position with the correction function fretmath.correct_E_gamma_leak_dir (see http://fretbursts.readthedocs.io/en/latest/fretmath.html). I prefer this approach because fitting the raw E/S histograms is generally more robust and you don't propagate errors if the correction are not perfectly accurate.

One caveat, in FRETBursts, the coefficient Data.dir_ex is dir_ex_aa (Definition 1 in the paper you cited). Instead, when using the correction formula correct_E_gamma_leak_dir, you need to pass dir_ex_t (Definition 2).

If you know dir_ex_aa (valid only for ALEX/PIE) you can compute dir_ex_t using eq. 26. If you don't know dir_ex_aa, or you only have a single laser smFRET, then you can estimate dir_ex_t from the absorption cross-section of D and A at the donor-laser wavelength (eq. 25). The nice thing about using coefficient dir_ex_t is that it is a physical property of the pair of dye (and excitation wavelength) so once you have estimated it, it is valid for any setup. On the other hand, the "classical" dir_ex_aa (definition 1), is a parameter that can only be defined for ALEX/PIE measurements and depends on the ratio of the D/A laser excitation intensities (see eq. 22). Even on the same setup, if the ratio of the excitation intensities changes the coefficient will change. The convenience is that it can be estimated from a simple A-only measurement.

tritemio commented 6 years ago

From @ncodina on February 9, 2017 17:0

@tritemio Thanks very much for the explanation! I have some further questions.

In the case with only donor excitation laser and Acceptor only sample, I get some signal in the donor channel. I understand that the acceptor does not emit in this range... do you know what this signal might be?

screen shot 2017-02-09 at 16 31 49

Is it correct to compute dir_ex_t , in my case, as the ratio between: dT = (Relative intensity (%) of AF594 excitation at 488 nm) / (Relative intensity (%) of AF488 excitation at 488 nm) = 5 / 80 = 0.0625 https://www.thermofisher.com/uk/en/home/life-science/cell-analysis/labeling-chemistry/fluorescence-spectraviewer.html?ICID=svtool&UID=11005p72

Is there an example of how to apply: fretbursts.fretmath.correct_E_gamma_leak_dir(Eraw, gamma=1, leakage=0, dir_ex_t=0)

I tried using: ds.E = fretmath.correct_E_gamma_leak_dir(ds.E, gamma=1, leakage=0.08, dir_ex_t=0.06) dplot(ds, hist_fret) but did not correct the histogram

thanks very much again!

tritemio commented 6 years ago

Donor signal may be any sort of autfluorescence from coverglass or impurities. Did you check the buffer?

To compute dir_ex_t you can use the published spectra if you can't measure it. But to have more reliable values you need to measure it yourself in the conditions/buffer that you use for the measurement. Anyway, you don't need the exact value unless you want to extract structural information. In which case you also need a set of measurement from which to extract gamma under the assumption that Ro does not changes.

To apply the dir_ex_t coefficient I was suggesting to correct only the fitted peak center value, not the entire histogram. If you want to plot the corrected histogram you can either use dir_ex_aa (Data.dir_ex) or you can correct the array ds.E[0] and plot an histogram manually with matplotlib. The [0] is needed because ds.E is a list of arrays, one array per spot. In single-spot the list has only one array.

I would not manually override ds.E as in your example. I may work sometimes but as a soon as the E values are recomputed (for example after selection), the "corrected" values are lost again.

The ability to apply dir_ex_t on a burst level can be implemented in FRETBursts using eq. 23 in previously mentioned paper. The right approach would be creating a new Data.dir_ex_t property that when non-zero will be used to correct na (just like Data.leakage). Also when Data.dir_ex_t > 0, it should override Data.dir_ex in ALEX/PIE data. I don't personally need this feature, but I would accept a PR that implements it.

tritemio commented 6 years ago

@ncodina, I thought of an another (easier) approach for plotting corrected fret histograms using FRETBursts.

Let say you have loaded a measurement in d (Data object). After burst search and selection, correct the E values with:

Ec = fretmath.correct_E_gamma_leak_dir(d.E[0], gamma, leakage, dir_ex_t)

then add a new field to Data containing these corrected values:

d.add(Ec=[Ec])

note that you need to wrap Ec in a list.

Finally, plot the histograms with hist_burst_data which is the underlying function used by both hist_fret and hist_S. With hist_burst_data you need to specify which field to plot (Ec in this case):

dplot(d, hist_burst_data, data_name='Ec')

With hist_burst_data you have lot of options to customize the plot:

http://fretbursts.readthedocs.io/en/latest/plots.html?highlight=hist_burst_data#fretbursts.burst_plot.hist_burst_data

It accepts the same options as hist_fret, so if you are already used the it nothing changes.

tritemio commented 6 years ago

@ncodina did my answer clarifies your doubts? If yes I would close this.