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 | preferred axis |
|---|---|---|---|---|---|---|---|
| 2 br. Pseudo-Voigt | {6DE06C1B-E51A-48C6-B036-C81A841EC468} | T2BranchesPseudoVoigtPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Asym. Pseudo-Voigt | {74A6EC30-A019-475D-99A3-B62C4AB03A6C} | TAsymPseudoVoigtPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Doniach-Sunjic | {EC663A56-0E89-4BC3-91FD-F243AADB253E} | TDoniachSunjicPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Exponentially Modified Gaussian | {4D320BBE-1000-4D70-A860-3AC0D7076FF5} | TEmgPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Gaussian | {FF4E399C-C33C-482E-84D7-952700BCD4AE} | TGaussPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Lorentzian | {7CA6FDAF-95B7-4D84-BCBA-130C828407CC} | TLorentzPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Moffat | {E6E51486-6970-4AB3-8010-908664116379} | TMoffatPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Pearson VII | {195B2208-9AA0-4281-8CAB-7D29D959AC4D} | TPearson7PointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Pseudo-Voigt | {9F27DC7C-970F-4DAC-88CD-F5FB3400D38D} | TPseudoVoigtPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Skewed Gaussian | {A32763F7-18DC-4378-A8E6-C0CCE28B5FD6} | TSkewedGaussianPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| Step (erf) | {3FC3B846-3A44-4ACE-B91B-CF84304391F9} | TStepPointsSet | yes | — | — | — | TDiffractionAngleAxis |
| User Defined | {D8CAFCE5-8B03-4CCE-9E93-EA28ACB8E7CA} | TUserPointsSet | yes | — | — | — | TIdentityAxis |
| Voigt | {EEED2EC3-D036-473E-81E1-8E40943D8158} | TVoigtPointsSet | yes | — | — | — | 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. | — |
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: menu entries and one panel. 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.