[ANN] GModelFit.jl: a model fitting framework for Julia

[ANN] GModelFit.jl: a model fitting framework for Julia.

Dear community, after a few years of testing and improving the user interface, the GModelFit data-driven model fitting framework for Julia is now released!!

The package allows to define complex models (both numerical and analytical) to be compared to empirical data. A non-linear least square minimizer varies the model parameters to reduce the residuals between model and data, thus providing the best fit parameter values (with uncertainties).

Links:

Quick example:

using GModelFit
dom = Domain(0:0.01:5)
model = Model(dom, :bkg => GModelFit.OffsetSlope(1, 1, 0.1),
                   :l1 => GModelFit.Gaussian(1, 2, 0.2),
                   :l2 => GModelFit.Gaussian(1, 3, 0.4),
                   :main => SumReducer(:bkg, :l1, :l2))
data = GModelFit.mock(Measures, model)
best, res = fit(model, data)

The above code results in the following output:

(Components:
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Component โ”‚ Type                     โ”‚ Eval. count โ”‚ Min       โ”‚ Max       โ”‚ Mean      โ”‚ NaN/Inf โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ main      โ”‚ SumReducer               โ”‚ 204         โ”‚    0.8851 โ”‚     3.151 โ”‚     1.543 โ”‚ 0       โ”‚
โ”‚  โ”œโ”€ bkg   โ”‚ GModelFit.OffsetSlope_1D โ”‚ 65          โ”‚    0.8851 โ”‚     1.398 โ”‚     1.142 โ”‚ 0       โ”‚
โ”‚  โ”œโ”€ l1    โ”‚ GModelFit.Gaussian_1D    โ”‚ 87          โ”‚ 2.189e-49 โ”‚     2.018 โ”‚    0.2016 โ”‚ 0       โ”‚
โ”‚  โ””โ”€ l2    โ”‚ GModelFit.Gaussian_1D    โ”‚ 78          โ”‚ 3.608e-13 โ”‚     1.007 โ”‚       0.2 โ”‚ 0       โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Parameters:
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Component โ”‚ Param. โ”‚ Range โ”‚ Value     โ”‚ Uncert.   โ”‚ Actual โ”‚ Patch โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ bkg       โ”‚ offset โ”‚       โ”‚    0.9877 โ”‚  0.009352 โ”‚        โ”‚       โ”‚
โ”‚           โ”‚ x0     โ”‚       โ”‚         1 โ”‚  (FIXED)  โ”‚        โ”‚       โ”‚
โ”‚           โ”‚ slope  โ”‚       โ”‚    0.1026 โ”‚  0.004225 โ”‚        โ”‚       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ l1        โ”‚ norm   โ”‚ 0:Inf โ”‚      1.01 โ”‚   0.01883 โ”‚        โ”‚       โ”‚
โ”‚           โ”‚ center โ”‚       โ”‚     2.002 โ”‚  0.003727 โ”‚        โ”‚       โ”‚
โ”‚           โ”‚ sigma  โ”‚ 0:Inf โ”‚    0.1997 โ”‚  0.003704 โ”‚        โ”‚       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ l2        โ”‚ norm   โ”‚ 0:Inf โ”‚     1.002 โ”‚    0.0288 โ”‚        โ”‚       โ”‚
โ”‚           โ”‚ center โ”‚       โ”‚     3.005 โ”‚    0.0102 โ”‚        โ”‚       โ”‚
โ”‚           โ”‚ sigma  โ”‚ 0:Inf โ”‚    0.3969 โ”‚   0.01204 โ”‚        โ”‚       โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
, Fit results:
    #Data :      501         Red. fit stat.:     1.0225  (DOF: 493)
    #Free :        8         Elapsed time  :      0.011 s
    Status:       OK
)

A quick plot of data and best fit model can be obtained with (e.g.) Gnuplot.jl:

using Gnuplot
@gp data best

(this new post replaces a previous one, wrote when the package still had the old name โ€œDataFittingโ€: [ANN] DataFitting.jl general purpose data fitting framework)

Comments and suggestions (as well as PRs) are very welcome!!

9 Likes

This looks great, Iโ€™ll try it next time I need to fit something.

1 Like