This module provides functions to fit gaussian distributions and gaussian
distribution mixtures (2 components). These functions can be used directly,
or more often, in a typical FRETBursts workflow they are passed to higher
level methods like fretbursts.burstlib.Data.fit_E_generic()
.
Single Gaussian distribution fit:
For 2-Gaussians fit we have the following models:
two_gauss_mix_pdf()
: PDF of 2-components Gaussians mixturetwo_gauss_mix_ab()
: linear combination of 2 Gaussians
Main functions for mixture of 2 Gaussian distribution fit:
two_gaussian_fit_hist()
histogram fit using `leastsq`two_gaussian_fit_hist_min()
histogram fit using `minimize`two_gaussian_fit_hist_min_ab()
the same but using _ab modeltwo_gaussian_fit_cdf()
curve fit of the CDFtwo_gaussian_fit_EM()
Expectation-Maximization fittwo_gaussian_fit_EM_b()
the same with boundaries
Also, some functions to fit 2-D gaussian distributions and mixtures are implemented but not thoroughly tested.
The reference documentation for all the functions follows.
fretbursts.fit.gaussian_fitting.
bound_check
(val, bounds)¶Returns val
clipped inside the interval bounds
.
fretbursts.fit.gaussian_fitting.
gaussian2d_fit
(sx, sy, guess=[0.5, 1])¶2D-Gaussian fit of samples S using a fit to the empirical CDF.
fretbursts.fit.gaussian_fitting.
gaussian_fit_cdf
(s, mu0=0, sigma0=1, return_all=False, **leastsq_kwargs)¶Gaussian fit of samples s fitting the empirical CDF. Additional kwargs are passed to the leastsq() function. If return_all=False then return only the fitted (mu,sigma) values If return_all=True (or full_output=True is passed to leastsq) then the full output of leastsq and the histogram is returned.
fretbursts.fit.gaussian_fitting.
gaussian_fit_curve
(x, y, mu0=0, sigma0=1, a0=None, return_all=False, **kwargs)¶Gaussian fit of curve (x,y).
If a0 is None then only (mu,sigma) are fitted (to a gaussian density).
kwargs
are passed to the leastsq() function.
If return_all=False then return only the fitted (mu,sigma) values If return_all=True (or full_output=True is passed to leastsq) then the full output of leastsq is returned.
fretbursts.fit.gaussian_fitting.
gaussian_fit_hist
(s, mu0=0, sigma0=1, a0=None, bins=array([-0.5, -0.499, -0.498, ..., 1.497, 1.498, 1.499]), return_all=False, leastsq_kwargs={}, weights=None, **kwargs)¶Gaussian fit of samples s fitting the hist to a Gaussian function.
If a0 is None then only (mu,sigma) are fitted (to a gaussian density).
kwargs are passed to the histogram function.
If return_all=False then return only the fitted (mu,sigma) values
If return_all=True (or full_output=True is passed to leastsq)
then the full output of leastsq and the histogram is returned.
weights
optional weights for the histogram.
fretbursts.fit.gaussian_fitting.
gaussian_fit_ml
(s, mu_sigma_guess=[0.5, 1])¶Gaussian fit of samples s using the Maximum Likelihood (ML method). Didactical, since scipy.stats.norm.fit() implements the same method.
fretbursts.fit.gaussian_fitting.
gaussian_fit_pdf
(s, mu0=0, sigma0=1, a0=1, return_all=False, leastsq_kwargs={}, **kwargs)¶Gaussian fit of samples s using a fit to the empirical PDF.
If a0 is None then only (mu,sigma) are fitted (to a gaussian density).
kwargs
are passed to get_epdf().
If return_all=False then return only the fitted (mu,sigma) values
If return_all=True (or full_output=True is passed to leastsq)
then the full output of leastsq and the PDF curve is returned.
fretbursts.fit.gaussian_fitting.
get_epdf
(s, smooth=0, N=1000, smooth_pdf=False, smooth_cdf=True)¶Compute the empirical PDF of the sample s
.
If smooth > 0 then apply a gaussian filter with sigma=smooth. N is the number of points for interpolation of the CDF on a uniform range.
fretbursts.fit.gaussian_fitting.
normpdf
(x, mu=0, sigma=1.0)¶Return the normal pdf evaluated at x
.
fretbursts.fit.gaussian_fitting.
reorder_parameters
(p)¶Reorder 2-gauss mix params to have the 1st component with smaller mean.
fretbursts.fit.gaussian_fitting.
reorder_parameters_ab
(p)¶Reorder 2-gauss mix params to have the 1st component with smaller mean.
fretbursts.fit.gaussian_fitting.
two_gauss_mix_ab
(x, p)¶Mixture of two Gaussians with no area constrain.
fretbursts.fit.gaussian_fitting.
two_gauss_mix_pdf
(x, p)¶PDF for the distribution of a mixture of two Gaussians.
fretbursts.fit.gaussian_fitting.
two_gaussian2d_fit
(sx, sy, guess=[0.5, 1])¶2D-Gaussian fit of samples S using a fit to the empirical CDF.
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_EM
(s, p0=[0, 0.1, 0.6, 0.1, 0.5], max_iter=300, ptol=0.0001, fix_mu=[0, 0], fix_sig=[0, 0], debug=False, weights=None)¶Fit the sample s with two gaussians using Expectation Maximization.
This vesion allows to optionally fix mean or std. dev. of each component.
Parameters: |
|
---|---|
Returns: | Array of parameters for the 2-gaussians (5 elements) |
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_EM_b
(s, p0=[0, 0.1, 0.6, 0.1, 0.5], weights=None, bounds=[(None, None), (None, None), (None, None), (None, None), (None, None)], max_iter=300, ptol=0.0001, debug=False)¶Fit the sample s with two gaussians using Expectation Maximization.
This version allows setting boundaries for each parameter.
Parameters: |
|
---|---|
Returns: | Array of parameters for the 2-gaussians (5 elements) |
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_KDE_curve
(s, p0=[0, 0.1, 0.6, 0.1, 0.5], weights=None, bandwidth=0.05, x_pdf=None, debug=False, method='SLSQP', bounds=None, verbose=False, **kde_kwargs)¶Fit sample s
with two gaussians using a KDE pdf approximation.
The 2-gaussian pdf is then curve-fitted to the KDE pdf.
Parameters: |
|
---|
Additional kwargs are passed to scipy.stats.gaussian_kde().
Returns: | Array of parameters for the 2-gaussians (5 elements) |
---|
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_cdf
(s, p0=[0.0, 0.05, 0.6, 0.1, 0.5], fix_mu=[0, 0], fix_sig=[0, 0])¶Fit the sample s with two gaussians using a CDF fit.
Curve fit 2-gauss mixture Cumulative Distribution Function (CDF) to the
empirical CDF for sample s
.
Note that with a CDF fit no weighting is possible.
Parameters: |
|
---|---|
Returns: | Array of parameters for the 2-gaussians (5 elements) |
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_curve
(x, y, p0, return_all=False, verbose=False, **kwargs)¶Fit a 2-gaussian mixture to the (x,y) curve.
kwargs
are passed to the leastsq() function.
If return_all=False then return only the fitted paramaters If return_all=True then the full output of leastsq is returned.
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_hist
(s, bins=array([-0.5 , -0.499, -0.498, ..., 1.497, 1.498, 1.499]), weights=None, p0=[0.2, 1, 0.8, 1, 0.3], fix_mu=[0, 0], fix_sig=[0, 0], fix_a=False)¶Fit the sample s with 2-gaussian mixture (histogram fit).
Uses scipy.optimize.leastsq function. Parameters can be fixed but cannot be constrained in an interval.
Parameters: |
|
---|---|
Returns: | Array of parameters for the 2-gaussians (5 elements) |
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_hist_min
(s, bounds=None, method='L-BFGS-B', bins=array([-0.5 , -0.499, -0.498, ..., 1.497, 1.498, 1.499]), weights=None, p0=[0.2, 1, 0.8, 1, 0.3], fix_mu=[0, 0], fix_sig=[0, 0], fix_a=False, verbose=False)¶Fit the sample s
with 2-gaussian mixture (histogram fit). [Bounded]
Uses scipy.optimize.minimize allowing constrained minimization.
Parameters: |
|
---|---|
Returns: | Array of parameters for the 2-gaussians (5 elements) |
fretbursts.fit.gaussian_fitting.
two_gaussian_fit_hist_min_ab
(s, bounds=None, method='L-BFGS-B', bins=array([-0.5 , -0.499, -0.498, ..., 1.497, 1.498, 1.499]), weights=None, p0=[0.2, 1, 0.8, 1, 0.3], fix_mu=[0, 0], fix_sig=[0, 0], fix_a=[0, 0], verbose=False)¶Histogram fit of sample s
with 2-gaussian functions.
Uses scipy.optimize.minimize allowing constrained minimization. Also each parameter can be fixed.
The order of the parameters is: mu1, sigma1, a1, mu2, sigma2, a2.
Parameters: |
|
---|---|
Returns: | Array of parameters for the 2-gaussians (6 elements) |