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.
- You write —
TCurveClass (class of TNamedPointsSet) - Entry point —
TCurveTypesSingleton.CreateCurveFactory.RegisterCurveType - Registered here — 13
| name | id | class | analytic | group | amplitude unbounded | placed by point set | explanation | preferred axis |
|---|---|---|---|---|---|---|---|---|
| 2 br. Pseudo-Voigt | {6DE06C1B-E51A-48C6-B036-C81A841EC468} | T2BranchesPseudoVoigtPointsSet | yes | — | — | — | A 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} | TAsymPseudoVoigtPointsSet | yes | — | — | — | A 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} | TDoniachSunjicPointsSet | yes | — | — | — | An 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} | TEmgPointsSet | yes | — | — | — | A 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} | TGaussPointsSet | yes | — | — | — | A symmetric bell-shaped peak whose area is A, centred at x0, with standard deviation sigma. | TDiffractionAngleAxis |
| Lorentzian | {7CA6FDAF-95B7-4D84-BCBA-130C828407CC} | TLorentzPointsSet | yes | — | — | — | A 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} | TMoffatPointsSet | yes | — | — | — | A 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} | TPearson7PointsSet | yes | — | — | — | A 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} | TPseudoVoigtPointsSet | yes | — | — | — | A 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} | TSkewedGaussianPointsSet | yes | — | — | — | A Gaussian made asymmetric by the shape parameter beta, following the skew-normal distribution. | TDiffractionAngleAxis |
| Step (erf) | {3FC3B846-3A44-4ACE-B91B-CF84304391F9} | TStepPointsSet | yes | — | — | — | A smooth step of height A centred at x0, whose sharpness is set by sigma. | TDiffractionAngleAxis |
| User Defined | {D8CAFCE5-8B03-4CCE-9E93-EA28ACB8E7CA} | TUserPointsSet | yes | — | — | — | A curve whose formula you type yourself, with parameters named in that formula. | TIdentityAxis |
| Voigt | {EEED2EC3-D036-473E-81E1-8E40943D8158} | TVoigtPointsSet | yes | — | — | — | The 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.
- You write —
TDataLoaderClass + extensions + format name - Entry point —
RegisterDataLoader - Registered here — 2
| class | extensions | format |
|---|---|---|
| TDATFileLoader | .DAT | Diffraction profile |
| TOHLCFileLoader | .CSV | Price data, OHLC |
Minimizer
An engine, and the capability answers the client greys choices out from. Its factory returns the IFitBackend that does the work.
- You write —
TMinimizerInfo (with a TBackendFactory) - Entry point —
RegisterMinimizer - Registered here — 2
| kind | name | description | needs formula | needs python sidecar | supports weighting | supports curve scaling | has backend factory |
|---|---|---|---|---|---|---|---|
| 0 | Downhill Simplex (native) | The original algorithm. Needs no Python and fits any curve type, including those with no formula. | — | — | — | yes | yes |
| 1 | Levenberg-Marquardt (Python/lmfit) | Trust-region least squares with uncertainties. Needs the Python sidecar, and a curve type that has a formula. | yes | yes | yes | — | yes |
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.
- You write —
TLossInfo (evaluate + pool) - Entry point —
RegisterLoss - Registered here — 4
| kind | name | description | self normalising | least squares | poolable |
|---|---|---|---|---|---|
| 0 | R-factor | Squared deviations normalised by the data, so values are comparable between datasets. | — | yes | yes |
| 1 | R-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 | — | — |
| 2 | Sum of squares | Plain least squares, with no normalisation at all - the value scales with the data, so compare it only within one dataset. | — | yes | yes |
| 3 | Relative deviation | Absolute 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.
- You write —
TActionInfo (with a TActionHandler) - Entry point —
RegisterAction - Registered here — 14
| name | description | asynchronous |
|---|---|---|
| minimize-difference | Fit the current model to the profile. | yes |
| minimize-difference-again | Continue fitting from where the last fit stopped. | yes |
| minimize-number-of-curves | Fit, then drop curves that do not earn their place. | yes |
| do-all-automatically | Background, positions and fit, in one pass. | yes |
| smooth-profile | Smooth the experimental profile. | yes |
| compute-curve-bounds | Work out where each curve begins and ends. | yes |
| compute-background-points | Propose background points from the profile. | yes |
| compute-curve-positions | Propose a curve position for each peak found. | yes |
| select-all-points-as-curve-positions | Use every profile point as a curve position. | yes |
| select-entire-profile | Fit over the whole profile rather than a marked interval. | yes |
| create-curve-list | Rebuild the curve list from the current model. | — |
| stop | Stop the operation now, keeping what it has reached. | — |
| subtract-background | Subtract the background from the profile. | — |
| select-profile-interval | Restrict 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.
- You write —
IExplanationProvider (a namespace and its topics) - Entry point —
RegisterExplanationProvider - Registered here — 13
| topic | title | summary | standing | standing hint | quote |
|---|---|---|---|---|---|
| curve-type/6de06c1b-e51a-48c6-b036-c81a841ec468 | 2 br. Pseudo-Voigt | A pseudo-Voigt peak with an independent width and Gaussian-Lorentzian mix on each side of its maximum. | This software's choice | A 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-b62c4ab03a6c | Asym. Pseudo-Voigt | A 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 choice | A 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-f243aadb253e | Doniach-Sunjic | An asymmetric photoemission line of metals: a Lorentzian of half-width sigma skewed by the singularity index alpha. | Canonical | Stated 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-3ac0d7076ff5 | Exponentially Modified Gaussian | A Gaussian convolved with a one-sided exponential decay, giving a peak with a tail of time constant tau. | Canonical | Stated 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-952700bcd4ae | Gaussian | A symmetric bell-shaped peak whose area is A, centred at x0, with standard deviation sigma. | Canonical | Stated 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-130c828407cc | Lorentzian | A symmetric peak with heavy tails, whose area is A, centred at x0, with full width at half maximum sigma. | Canonical | Stated 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-908664116379 | Moffat | A symmetric peak of height A with core width sigma and power-law wings set by m, used for stellar images. | Canonical | Stated 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-7d29d959ac4d | Pearson VII | A symmetric peak of height A and full width at half maximum sigma, whose tail weight m runs from Lorentzian to Gaussian. | Canonical | Stated 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-f5fb3400d38d | Pseudo-Voigt | A weighted sum of a Gaussian and a Lorentzian with one shared width, used as a fast stand-in for the Voigt profile. | Canonical | Stated by the field's authoritative sources, which the explanation quotes and cites. | pV = eta L + (1 - eta) G |
| curve-type/a32763f7-18dc-4378-a8e6-c0cce28b5fd6 | Skewed Gaussian | A Gaussian made asymmetric by the shape parameter beta, following the skew-normal distribution. | Canonical | Stated 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-cf84304391f9 | Step (erf) | A smooth step of height A centred at x0, whose sharpness is set by sigma. | Canonical | Stated 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-ea28acb8e7ca | User Defined | A curve whose formula you type yourself, with parameters named in that formula. | This software's choice | A 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-8e40943d8158 | Voigt | The convolution of a Gaussian of width sigma with a Lorentzian of half-width gamma, scaled by A. | Canonical | Stated 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.
- You write —
IAppModule - Entry point —
RegisterAppModule - Registered here — none. This seam exists for modules; the public framework ships none, and it is yours to claim.
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.
- You write —
IUiModule - Entry point —
RegisterUiModule - Registered here — none. This seam exists for modules; the public framework ships none, and it is yours to claim.
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.
- You write —
a package name - Entry point —
RegisterSidecarModule - Registered here — none. This seam exists for modules; the public framework ships none, and it is yours to claim.
Curve builder
Builds every curve a marked point set describes. Without one, the engine takes the position-based path.
- You write —
point set name -> TCurveBuilder - Entry point —
RegisterCurveBuilder - Registered here — none. This seam exists for modules; the public framework ships none, and it is yours to claim.
Chart overlay
Redraws a module's own marks after the model is recomputed, so the client need not name the module to refresh it.
- You write —
TModuleOverlayProc - Entry point —
RegisterModuleOverlay - Registered here — none. This seam exists for modules; the public framework ships none, and it is yours to claim.