Guillawme / rfret

Analyze FRET Binding Data with R
https://guillawme.github.io/rfret
Other
2 stars 5 forks source link

Add support for Job plots #29

Open Guillawme opened 7 years ago

Guillawme commented 7 years ago

This simply requires the following:

dododas commented 7 years ago

Hey GuilIaume,

I can volunteer to tackle the first task this weekend.

For the other two, can you explain what you mean by the "best guess of the stoichiometry"? Are you referring to multiple ligand molecules binding to a single receptor?

Guillawme commented 7 years ago

Hi @dododas !

Actually, I wrote this issue as a quick note/reminder, and I need to clarify a couple things.

I think inspect_raw_data is good as it is. To inspect a titration experiment, in which the concentration range is very wide, we need a log x scale for the donor and fret channels plots to see all data points properly (otherwise these plots are not very useful: their main value is in visually getting a feel of the data quality). So I think this should not change.

I would like to make a function for rapid plotting of a job plot (see https://en.wikipedia.org/wiki/Job_plot for the principle) and I think it will be easy.

Maybe you already know the following, but I feel I need to explain a little bit. A Job plot aims at figuring out the stoichiometry, not the binding constant. Therefore, it requires a different experiment: instead of having molecule 1 at a fixed low concentration and a titration series of molecule 2, in a stoichiometry experiment the two molecules are titrated in opposite directions in a way that their molar fraction across the series will vary linearly, but the total concentration [molecule 1] + [molecule 2] will stay constant across the series. In this type of experiment, we need to follow a signal that is proportional to the amount of complex (which is the case of FRET) as a function of the molar fraction of one of the two molecules (usually, the one that we consider being the "receptor"). The resulting plot looks like a bell-shaped curve, where the maximum happens at the molar fraction that corresponds to the complex's stoichiometry (i.e. molar fraction of 0.5 if this is a 1:1 complex, molar fraction of 0.667 for a complex with two ligands per receptor, etc.). To get a reliable stoichiometry, the total concentration [molecule 1] + [molecule 2] must be at least 10x higher than the binding constant. For this reason, this kind of stoichiometry experiment is usually done after a binding curve. These two papers helped me understand the principle:

Since the concentration series in a stoichiometry experiment are linear, a log scale only distorts plots in a useless way. This is why I mentioned using a linear x scale, but I actually don't think we should modify inspect_raw_data. We could add some logic to this function to figure out whether the input data are from a binding experiment (then use a log scale where appropriate) of from a stoichiometry experiment (then use only linear scales), but I think this would only add inappropriate complexity to this function. An alternative that I prefer would be to write a dedicated function for the Job plot: this would add a bit of code redundancy, but would be easier to maintain and reason about (because these two types of experiments are independent anyway).

I did some test experiments, and it turns out the Job plot looks similar whether I plot the raw or corrected FRET signal. The signal correction already works perfectly, it is simply a matter of naming columns in the input file appropriately.

I hope I answered your questions.

Please make sure you retrieve my latest commits in your branch before doing anything: I changed a lot of things in the past few weeks.

Thanks for contributing! :-)

Guillawme commented 7 years ago

Essentially done with #30. Might need minor improvements like plotting vertical line at theoretical ratios 1:2, 1:1 and 2:1.

Guillawme commented 7 years ago

Current function fret_job_plot can only take one dataset. Make it vectorized, so it works on any number of datasets.