Fit

Interactive curve fitting for Linux, Windows and macOS

Extension points

One section per seam: what you write, where it goes in, and what is registered through it in this build. Generated from the registries themselves.

Curve type

A shape that can be placed on data and fitted. The only seam whose members self-register, from the unit's own initialization section.

name id class analytic group amplitude unbounded placed by point set explanation preferred axis
2 br. Pseudo-Voigt{6DE06C1B-E51A-48C6-B036-C81A841EC468}T2BranchesPseudoVoigtPointsSetyesA pseudo-Voigt peak with an independent width and Gaussian-Lorentzian mix on each side of its maximum.TDiffractionAngleAxis
Asym. Pseudo-Voigt{74A6EC30-A019-475D-99A3-B62C4AB03A6C}TAsymPseudoVoigtPointsSetyesA pseudo-Voigt peak made asymmetric by giving its two sides different widths, sigma + deltasigma on the right and sigma - deltasigma on the left.TDiffractionAngleAxis
Doniach-Sunjic{EC663A56-0E89-4BC3-91FD-F243AADB253E}TDoniachSunjicPointsSetyesAn asymmetric photoemission line of metals: a Lorentzian of half-width sigma skewed by the singularity index alpha.TDiffractionAngleAxis
Exponentially Modified Gaussian{4D320BBE-1000-4D70-A860-3AC0D7076FF5}TEmgPointsSetyesA Gaussian convolved with a one-sided exponential decay, giving a peak with a tail of time constant tau.TDiffractionAngleAxis
Gaussian{FF4E399C-C33C-482E-84D7-952700BCD4AE}TGaussPointsSetyesA symmetric bell-shaped peak whose area is A, centred at x0, with standard deviation sigma.TDiffractionAngleAxis
Lorentzian{7CA6FDAF-95B7-4D84-BCBA-130C828407CC}TLorentzPointsSetyesA symmetric peak with heavy tails, whose area is A, centred at x0, with full width at half maximum sigma.TDiffractionAngleAxis
Moffat{E6E51486-6970-4AB3-8010-908664116379}TMoffatPointsSetyesA symmetric peak of height A with core width sigma and power-law wings set by m, used for stellar images.TDiffractionAngleAxis
Pearson VII{195B2208-9AA0-4281-8CAB-7D29D959AC4D}TPearson7PointsSetyesA symmetric peak of height A and full width at half maximum sigma, whose tail weight m runs from Lorentzian to Gaussian.TDiffractionAngleAxis
Pseudo-Voigt{9F27DC7C-970F-4DAC-88CD-F5FB3400D38D}TPseudoVoigtPointsSetyesA weighted sum of a Gaussian and a Lorentzian with one shared width, used as a fast stand-in for the Voigt profile.TDiffractionAngleAxis
Skewed Gaussian{A32763F7-18DC-4378-A8E6-C0CCE28B5FD6}TSkewedGaussianPointsSetyesA Gaussian made asymmetric by the shape parameter beta, following the skew-normal distribution.TDiffractionAngleAxis
Step (erf){3FC3B846-3A44-4ACE-B91B-CF84304391F9}TStepPointsSetyesA smooth step of height A centred at x0, whose sharpness is set by sigma.TDiffractionAngleAxis
User Defined{D8CAFCE5-8B03-4CCE-9E93-EA28ACB8E7CA}TUserPointsSetyesA curve whose formula you type yourself, with parameters named in that formula.TIdentityAxis
Voigt{EEED2EC3-D036-473E-81E1-8E40943D8158}TVoigtPointsSetyesThe convolution of a Gaussian of width sigma with a Lorentzian of half-width gamma, scaled by A.TDiffractionAngleAxis

Data loader

Reads one file format. The Open dialog's filter is built from this registry, so a build can only offer what something can actually read.

class extensions format
TDATFileLoader.DATDiffraction profile
TOHLCFileLoader.CSVPrice data, OHLC

Minimizer

An engine, and the capability answers the client greys choices out from. Its factory returns the IFitBackend that does the work.

kind name description needs formula needs python sidecar supports weighting supports curve scaling has backend factory
0Downhill Simplex (native)The original algorithm. Needs no Python and fits any curve type, including those with no formula.yesyes
1Levenberg-Marquardt (Python/lmfit)Trust-region least squares with uncertainties. Needs the Python sidecar, and a curve type that has a formula.yesyesyesyes

Loss function

What "best fit" means. Compatibility with a curve type is DERIVED from the two capability flags, never from a table of type names.

kind name description self normalising least squares poolable
0R-factorSquared deviations normalised by the data, so values are comparable between datasets.yesyes
1R-factor (legacy)The original objective. Normalised by the model rather than by the data, so with curve scaling on it can be lowered by inflating the model. Kept for comparison.yes
2Sum of squaresPlain least squares, with no normalisation at all - the value scales with the data, so compare it only within one dataset.yesyes
3Relative deviationAbsolute deviations as a fraction of the data - reads directly as "the model is off by this much".yes

REST action

One verb of the HTTP API the desktop client and any other caller use.

name description asynchronous
minimize-differenceFit the current model to the profile.yes
minimize-difference-againContinue fitting from where the last fit stopped.yes
minimize-number-of-curvesFit, then drop curves that do not earn their place.yes
do-all-automaticallyBackground, positions and fit, in one pass.yes
smooth-profileSmooth the experimental profile.yes
compute-curve-boundsWork out where each curve begins and ends.yes
compute-background-pointsPropose background points from the profile.yes
compute-curve-positionsPropose a curve position for each peak found.yes
select-all-points-as-curve-positionsUse every profile point as a curve position.yes
select-entire-profileFit over the whole profile rather than a marked interval.yes
create-curve-listRebuild the curve list from the current model.
stopStop the operation now, keeping what it has reached.
subtract-backgroundSubtract the background from the profile.
select-profile-intervalRestrict the fit to the interval between start and stop.

Explanation

What everything a user meets says about itself: what it is, why it is allowed or refused, whether that rests on the field's sources, on convention or on this software's own choice, what it does not cover, and where to read more. A curve type explains itself through its class; anything else a module adds, through its own provider.

topic title summary standing standing hint quote
curve-type/6de06c1b-e51a-48c6-b036-c81a841ec4682 br. Pseudo-VoigtA pseudo-Voigt peak with an independent width and Gaussian-Lorentzian mix on each side of its maximum.This software's choiceA decision made by this software rather than by the field's sources; the explanation says why it was made.
curve-type/74a6ec30-a019-475d-99a3-b62c4ab03a6cAsym. Pseudo-VoigtA pseudo-Voigt peak made asymmetric by giving its two sides different widths, sigma + deltasigma on the right and sigma - deltasigma on the left.This software's choiceA decision made by this software rather than by the field's sources; the explanation says why it was made.
curve-type/ec663a56-0e89-4bc3-91fd-f243aadb253eDoniach-SunjicAn asymmetric photoemission line of metals: a Lorentzian of half-width sigma skewed by the singularity index alpha.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.I(E) = cos(pi alpha / 2 + (1 - alpha) arctan(E / gamma)) / (E^2 + gamma^2)^((1 - alpha) / 2)
curve-type/4d320bbe-1000-4d70-a860-3ac0d7076ff5Exponentially Modified GaussianA Gaussian convolved with a one-sided exponential decay, giving a peak with a tail of time constant tau.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.f(t) = Gaussian(t; t_G, sigma) convolved with exp(-t / tau) / tau
curve-type/ff4e399c-c33c-482e-84d7-952700bcd4aeGaussianA symmetric bell-shaped peak whose area is A, centred at x0, with standard deviation sigma.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.f(x) = exp(-(x - mu)^2 / (2 sigma^2)) / (sigma sqrt(2 pi))
curve-type/7ca6fdaf-95b7-4d84-bcba-130c828407ccLorentzianA symmetric peak with heavy tails, whose area is A, centred at x0, with full width at half maximum sigma.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.f(x) = 1 / (pi s (1 + ((x - t) / s)^2))
curve-type/e6e51486-6970-4ab3-8010-908664116379MoffatA symmetric peak of height A with core width sigma and power-law wings set by m, used for stellar images.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.I(r) = I0 (1 + (r / alpha)^2)^(-beta)
curve-type/195b2208-9aa0-4281-8cab-7d29d959ac4dPearson VIIA symmetric peak of height A and full width at half maximum sigma, whose tail weight m runs from Lorentzian to Gaussian.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.y = A / (1 + (2^(1/m) - 1) (2 (x - x0) / w)^2)^m
curve-type/9f27dc7c-970f-4dac-88cd-f5fb3400d38dPseudo-VoigtA weighted sum of a Gaussian and a Lorentzian with one shared width, used as a fast stand-in for the Voigt profile.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.pV = eta L + (1 - eta) G
curve-type/a32763f7-18dc-4378-a8e6-c0cce28b5fd6Skewed GaussianA Gaussian made asymmetric by the shape parameter beta, following the skew-normal distribution.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.f(x) = 2 phi(x) Phi(alpha x)
curve-type/3fc3b846-3a44-4ace-b91b-cf84304391f9Step (erf)A smooth step of height A centred at x0, whose sharpness is set by sigma.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.erf z = (2 / sqrt(pi)) integral from 0 to z of exp(-t^2) dt
curve-type/d8cafce5-8b03-4cce-9e93-ea28acb8e7caUser DefinedA curve whose formula you type yourself, with parameters named in that formula.This software's choiceA decision made by this software rather than by the field's sources; the explanation says why it was made.
curve-type/eeed2ec3-d036-473e-81e1-8e40943d8158VoigtThe convolution of a Gaussian of width sigma with a Lorentzian of half-width gamma, scaled by A.CanonicalStated by the field's authoritative sources, which the explanation quotes and cites.U(x, t) + i V(x, t) = sqrt(pi / (4 t)) exp(z^2) erfc(z), z = (1 - i x) / (2 sqrt(t))

Server module

An analysis vertical's server side: the resources it answers and its per-problem session state.

UI module

A module's contribution to the window, declared as data. One declaration serves three surfaces: the menu bar, the Tools pane and the Model panel's context menu - Surface says where an entry is shown and Scope whether it acts on the selected row. Structure for the Model panel is pushed separately under structure_id, and the panel itself belongs to the framework. WHICH contributor fills it is not arbitrated: it follows the selected curve type's placed_by_point_set, reported on the curve_types seam - empty means the framework's flat list of curves, and a named set means the module owning that set describes what its markup produced. The client names no module type.

Python sidecar pack

Names a module's <name>_routes.py, which the sidecar imports on start. Only the name travels; the sidecar finds the file itself.

Curve builder

Builds every curve a marked point set describes. Without one, the engine takes the position-based path.

Chart overlay

Redraws a module's own marks after the model is recomputed, so the client need not name the module to refresh it.