Skip to content
Snippets Groups Projects
Commit d29baa6a authored by Philipp Niedermayer's avatar Philipp Niedermayer
Browse files

Add fitting functions

parent 760f8cee
No related branches found
No related tags found
No related merge requests found
import scipy
import numpy as np
# Fitting
def fit_gaussian(S, V, **kwargs):
gauss = lambda s, v0, vp, s0, sigma: v0+vp*np.exp(-0.5*((s-s0)/sigma)**2)
v0 = np.min(V)
vp = np.max(V)-v0
s0 = S[np.argmax(V)]
sigma = np.sqrt(np.abs(np.sum((S - s0) ** 2 * V) / np.sum(V)))
return fit_function(gauss, S, V, p0=(v0, vp, s0, sigma), bounds=((-np.inf, -np.inf, -np.inf, 0), (np.inf, np.inf, np.inf, np.inf)), **kwargs)
def fit_lorenzian(S, V, log=False, **kwargs):
lorenzian = lambda s, v0, vp, s0, gamma: v0 + vp/(1+((s-s0)/gamma)**2)
v0 = np.min(V)
vp = np.max(V)-v0
s0 = S[np.argmax(V)]
sigma = np.sqrt(np.abs(np.sum((S - s0) ** 2 * V) / np.sum(V)))
return fit_function(lorenzian, S, V, p0=(v0, vp, s0, sigma), bounds=((-np.inf, -np.inf, -np.inf, 0), (np.inf, np.inf, np.inf, np.inf)), **kwargs)
def fit_function(function, x, y, p0=None, **kwargs):
"""
:param log: if the y-data is log-scaled
"""
param, cov = scipy.optimize.curve_fit(function, x, y, p0, **kwargs)
param_error = np.sqrt(cov.diagonal())
X = np.linspace(min(x), max(x), 1000)
return param, param_error, function, [X, function(X, *param)]
def fit_exponential(S, V, **kwargs):
exponential = lambda s, v0, vp, s0: v0 + vp*np.exp(s/s0)
v0 = np.min(V)
vp = np.max(V)-v0
s0 = 1
return fit_function(exponential, S, V, p0=(v0, vp, s0), **kwargs)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment