initial_search¶
- sofia_redux.toolkit.fitting.fitpeaks1d.initial_search(fitter, model, x, y, npeaks=1, xpeak_parname=None, ypeak_parname=None, baseline_func=<function medabs_baseline>, guess_func=<function guess_xy_mad>, guess=None, fitopts=None)[source]¶
Perform an initial search for peaks in the data
The procedure is:
Take the original (x, y) data and optionally modify it to some form where it is easier to fit a more accurate peak. In the default case, the median is subtracted from y before taking the absolute value. At this stage we do not typically fit the background level so instead try to center most of the data around zero and then take the absolute value. This is sensible for stable baselines with positive and negative peaks, but may not be so for other flavours of data. Different baseline removal and data modification functions may be specified with the
baseline_funcargument.Start a loop of
npeaksiterations. On each interation:Identify the most prominent peak in the modified y data. This is done via the
guess_funcfunction. In the default case this simply finds the (x, y) position of the maximumyvalue. Optionally, the user may parse in specifiedxvalues using theguessargument.Fit the data to the search model using the x and y guesses obtained in the previous step.
Store the parameters obtained from the fit, then subtract a fit of the peak from the data and begin the next iteration. If successful, the most prominent peak was removed and we can move on to fitting the next most prominent peak.
After
npeaksiterations take thexvalues of the fit and use interpolation to get an estimate ofyon the original unmodified data set. This y estimate is added to the other stored peak parameters which are then used as a more accurate starting point for a refined search later.
- Parameters:
- fitterfitting object
Typically a “solver” from scipy.optimize or astropy.modeling that performs the function:
fitted_model = solver(model, x, y)
- modelastropy.modeling.Fittable1DModel
The model to fit. Typically from
get_search_model.- xarray_like of float
(N,) array of independent data to fit
- yarray_like of float
(N,) array of dependent data to fit
- xpeak_parnamestr, optional
Name of the parameter in the peak model governing the location of the peak along the x-axis. If None, will attempt to autodetect.
- ypeak_parnamestr, optional
Name of the parameter in the peak model governing the location of the peak along the y-axis. If None, will attempt to autodetect.
- npeaksint, optional
The number of peaks to find
- guess_funcfunction
A function of the form:
x_guess, y_guess = guess_func(x, y_modified)
Here x_guess and y_guess are the x (position) and y (amplitude) estimates of the most prominent peak in the data. Here we use the output from
baseline_funcas the dependent values which allows the user to do things such as smoothing, filtering, or whatever other ideas they may have. The default function,guess_xy_madsimply finds the x and y coordinate of the maximum value in y_modified.- guessarray_like of float, optional
An array where each element gives a guess at an initial
xposition for the peak. If there are less guesses thannpeaks,guess_funcwill be used after the inital guesses have been taken. If there are more guesses thannpeaks, then only guess[:npeaks] will be used.- baseline_funcfunction, optional
A function of the form:
y_modified, baseline = baseline_func(x, y)
Here y_modified may be the original
ydata, or theydata modified such that the combination ofmodelandsolveris able to identify peaks. In the default case, themedabs_baselinefunction is used which returns y_modified = abs(y - median(y)) and baseline = y - median(y).- fitoptsdict, optional
Optional arguments to pass into the solver at runtime.
- Returns:
- numpy.ndarray of numpy.float64
(npeaks, n_parameters) array of the initial guesses for the model parameters of each peak. Note that this contains the
peakonly portion of parameters and not the filtering parameters of the optionalbox_modelthat may have been appended to the peak model atget_search_model.