Simple fitting of single datasets

Classes used:

Making informed guesses for the initial values of the variable parameters of a model and fit the model to the data is the most straight-forward strategy. Still, different optimisation algorithms can be chosen. The recipe presented here uses fitpy.analysis.SimpleFit with standard values and shows as well how to use the dedicated plotters and reporters.

Recipe

 1format:
 2  type: ASpecD recipe
 3  version: '0.2'
 4
 5settings:
 6  autosave_plots: false
 7
 8tasks:
 9  # Create "dataset" to fit model to
10  - kind: model
11    type: Zeros
12    properties:
13      parameters:
14        shape: 1001
15        range: [-10, 10]
16    result: dummy
17    comment: >
18        Create a dummy model.
19  - kind: model
20    type: Gaussian
21    from_dataset: dummy
22    properties:
23      parameters:
24        position: 2
25      label: Random spectral line
26    comment: >
27        Create a simple Gaussian line.
28    result: dataset
29  - kind: processing
30    type: Noise
31    properties:
32      parameters:
33        amplitude: 0.2
34    apply_to: dataset
35    comment: >
36        Add a bit of noise.
37  - kind: singleplot
38    type: SinglePlotter1D
39    properties:
40      filename: dataset2fit.pdf
41    apply_to: dataset
42    comment: >
43        Just to be on the safe side, plot data of created "dataset"
44
45  # Now for the actual fitting: (i) create model, (ii) fit to data
46  - kind: model
47    type: Gaussian
48    from_dataset: dataset
49    output: model
50    result: gaussian_model
51
52  - kind: fitpy.singleanalysis
53    type: SimpleFit
54    properties:
55      model: gaussian_model
56      parameters:
57        fit:
58          position:
59            start: 1
60            range: [0, 5]
61        algorithm:
62          method: least_squares
63          parameters:
64            ftol: 1e-6
65            xtol: 1e-6
66    result: fitted_gaussian
67    apply_to: dataset
68
69  # Plot result
70  - kind: fitpy.singleplot
71    type: SinglePlotter1D
72    properties:
73      filename: fit_result.pdf
74      parameters:
75        show_legend: true
76    apply_to: fitted_gaussian
77
78  # Create report
79  - kind: fitpy.report
80    type: LaTeXFitReporter
81    properties:
82        template: simplefit.tex
83        filename: report.tex
84    compile: true
85    apply_to: fitted_gaussian

Comments

  • The purpose of the first block of four tasks is solely to create some data a model can be fitted to. The actual fitting starts only afterwards.

  • Usually, you will have set another ASpecD-derived package as default package in your recipe for processing and analysing your data. Hence, you need to provide the package name (fitpy) in the kind property, as shown in the examples.

  • Fitting is always a two-step process: (i) define the model, and (ii) define the fitting task.

  • To get a quick overview of the fit results, use the dedicated plotter from the FitPy framework: fitpy.plotting.SinglePlotter1D.

  • For a more detailed overview, particularly in case of several fits with different settings on one and the same dataset or for a series of similar fits on different datasets, use reports, as shown here using fitpy.report.LaTeXFitReporter. This reporter will automatically create the figure showing both, fitted model and original data.

Result

Examples for the two figures created in the recipe are given below. While in the recipe, the output format has been set to PDF, for rendering them here they have been converted to PNG. Due to the noise added to the model having an inherently random component, your data will look slightly different. Therefore, the fit results will be slightly different as well. Nevertheless, overall it should be fairly identical.

../_images/simplefit-dataset2fit.png

Created dataset that shall be fitted. The dataset consists of a single Gaussian line with pink (1/f) noise added to it. For this figure, a standard plotter from the ASpecD framework has been used. The fitted line together with the original data is shown in the next figure.

../_images/simplefit-fit_result.png

Fitted model together with the original data. The dataset is identical to the one shown in the previous figure. For this figure, a dedicated plotter from the FitPy package, fitpy.plotting.SinglePlotter1D, has been used that is aware of the structure of the calculated dataset resulting from the fitpy.analysis.SimpleFit fitting step. Therefore, both, fitted model and (reconstructed) original data are displayed, together with default labels and a legend.