diff --git a/Doc/UserManual/Fitting.tex b/Doc/UserManual/Fitting.tex index 5ffbff8428b8698be72a8584b62ef7d6abdff5cc..52514717e816defc494a8063dff5d024c266e155 100644 --- a/Doc/UserManual/Fitting.tex +++ b/Doc/UserManual/Fitting.tex @@ -6,20 +6,23 @@ X-ray and neutron scattering by multilayered samples, \BornAgain\ also offers the option to fit the numerical model to reference data by modifying a selection of sample parameters from the numerical model. This aspect -of the software is discussed in the following chapter. - -\SecRef{FittingGentleIntroducion} gives a short introduction to the -basic concepts of data fitting. Users familiar with fitting can -directly proceed to \SecRef{FittingImplementation}, which details the -implementation of fittings in -\BornAgain\ . \Python\ fitting examples with detailed +of the software is discussed in the current chapter. + +%\SecRef{FittingGentleIntroducion} gives a short introduction to the +%basic concepts of data fitting. Users familiar with fitting can +%directly proceed to \SecRef{FittingImplementation}, which details the +%implementation of fittings in +%\BornAgain\ . +\SecRef{FittingImplementation} details the +implementation of fittings in \BornAgain\ . +\Python\ fitting examples with detailed explanations of every fitting step are given in \SecRef{FittingExamples}. Advanced fitting techniques, including fine tuning of minimization algorithms, simultaneous fit of different data sets, parameters correlation, are covered in -\SecRef{FittingAdvanced}. \SecRef{FittingRightAnswers} contains some practical advise which might +\SecRef{FittingAdvanced}. \SecRef{FittingRightAnswers} contains some practical advice which might help the user to get right answers from \BornAgain\ fitting. -\input{FittingGentleIntroduction} +%\input{FittingGentleIntroduction} \input{FittingImplementation} diff --git a/Doc/UserManual/FittingExamples.tex b/Doc/UserManual/FittingExamples.tex index f6adcb77f6c407e9ec7cea169db4343c07fa0099..11bbc0fb85c3fa683b3c06ff7b0545d017953fd0 100644 --- a/Doc/UserManual/FittingExamples.tex +++ b/Doc/UserManual/FittingExamples.tex @@ -13,7 +13,7 @@ The script can also be found at \noindent This example uses the same sample geometry as in \SecRef{Example1Python}. Cylindrical and -prismatic particles in equal proportion, in an air layer, are deposited on a substrate layer, with no interference +prismatic particles in equal proportion are deposited on a substrate layer, with no interference between the particles. We consider the following parameters to be unkown \begin{itemize} \item the radius of cylinders, @@ -70,7 +70,7 @@ def get_sample(): @\label{script2::get_sample}@ # air layer with particles and substrate form multi layer air_layer = Layer(m_air) air_layer.setDecoration(particle_decoration) - substrate_layer = Layer(m_substrate, 0) + substrate_layer = Layer(m_substrate) multi_layer = MultiLayer() multi_layer.addLayer(air_layer) multi_layer.addLayer(substrate_layer) @@ -143,17 +143,8 @@ the screen the information about fit progress once per 10 iterations. \end{lstlisting} Lines ~\ref{script2::fitpars1}--~\ref{script2::fitpars2} enter the list of fitting parameters. Here we use the cylinders' height and -radius and the prisms' height and half side length. The syntax of -\Code{addFitParameter} is -\begin{lstlisting}[language=python, style=eclipse,numbers=none] -FitSuite().addFitParameter(<name>, <initial value>, <iteration step>, <limits>) -\end{lstlisting} -where \Code{<name>} is the name of the sample pool parameters (see \SecRef{WorkingWithSampleParameters} -) selected -as a fitting parameter. Then we input its initial -value and the iteration step to be used in the minimization process. Finally -\Code{<limits>} specify the boundaries of the parameter's value. Here -the cylinder's length and prism half side are initially equal to $4\,{\rm nm}$, +radius and the prisms' height and half side length. +The cylinder's length and prism half side are initially equal to $4\,{\rm nm}$, whereas the cylinder's radius and the prism length are equal to $6\,{\rm nm}$ before the minimization. The iteration step is equal to $0.01\,{\rm nm}$ and only the lower boundary is imposed to be equal to $0.01\,{\rm nm}$. diff --git a/Doc/UserManual/FittingGentleIntroduction.tex b/Doc/UserManual/FittingGentleIntroduction.tex index b86df7a3d0da4a3f7eeebc80f923f2fcf7f094b1..eb02c7da81f096f871eb9f037dabbcc84a719ca5 100644 --- a/Doc/UserManual/FittingGentleIntroduction.tex +++ b/Doc/UserManual/FittingGentleIntroduction.tex @@ -33,7 +33,7 @@ as a function of $(x,y)$, the positions on the detector ``measured'' in this toy The scattering picture, similar to some GISAS patterns, has been generated using the simple function -$$I(x,y) = G(0.1,~0.01) + \frac{\sin(x)}{x} \cdot \frac{\sin(y)}{y}$$ +$$I(x,y) = G(0.1,~0.01) + sincx(x) \cdot sinc(y)$$ Here $G(0.1, 0.01)$ is a random variable distributed according to a Gaussian distribution with a mean of 0.1 and a standard deviation $\sigma=0.01$. Constant $0.1$ symbolizes our experimental background and constant $0.01$ refers @@ -54,7 +54,7 @@ Figure~\ref{fig:toyfit_data},right shows the intensity as a function of $(x,y)$ calculated using our model and a fixed set of parameters $p_0=0, p_1=1, p_2=0, p_3=0$. -Two distributions are qualitatively identical. However in order to find the +The two distributions are qualitatively identical. However in order to find the values of parameters which best describe the experimental data, one has to \begin{itemize} \item define criteria for the difference between the actual data and the model, @@ -103,8 +103,7 @@ to total number of detector pixels. The model function has the form $f(\mathbf{x_{i}},\mathbf{p})$ where adjustable parameters are held in vector $\mathbf{p}$. -The least squared method finds the optimum of the model function which best -fits the data by searching the minimum of the sum of squared +The least squares method finds the optimum of the model function by searching the minimum of the sum of squared residuals $$ \chi^{2}(\mathbf{p}) = \sum_{i=1}^{N}r_{i}^{2}$$ where the residual is defined as the difference between the measured value and the value predicted by the model. @@ -145,7 +144,7 @@ The $\chi^2$ objective function is obtained by calculating the sum of squared residuals between the measured (Fig.~\ref{fig:toyfit_data}, left) and the predicted (Fig.~\ref{fig:toyfit_data}, right) values over $x,y$ space. It is defined -in parameter space $\mathbf{p}$, which have 4 dimensions. +in parameter space $\mathbf{p}$, which has 4 dimensions. Figure~\ref{fig:toyfit_chi2} (left) shows the $\chi^2$ distribution as a function of parameters $p_1,p_2$ while parameters $p_0,p_3$ remain fixed. @@ -155,7 +154,7 @@ parameters $p_2,p_3$ while parameters $p_0,p_1$ remain fixed. One can see that the given objective function has a strongly pronounced global minimum, which we aim to determine. In addition the objective function presents a number of local minima. -The presence of these minima leads to a poor or slow convergence +The presence of these minima leads to slow, or even no convergence towards the single global minimum. diff --git a/Doc/UserManual/FittingImplementation.tex b/Doc/UserManual/FittingImplementation.tex index c283239ebd8a009bbe9d1e8c0d0fe73e83900c7f..0bc4c2ec8769a98c01796b503aabb1258c0ed7f0 100644 --- a/Doc/UserManual/FittingImplementation.tex +++ b/Doc/UserManual/FittingImplementation.tex @@ -5,12 +5,14 @@ Fitting in \BornAgain\ deals with estimating the optimum parameters in the numerical model by minimizing the difference between -numerical and reference data using $\chi^2$ or maximum likelihood methods. The features include +numerical and reference data. +%using $\chi^2$ or maximum likelihood methods. +The features include \begin{itemize} \item a variety of multidimensional minimization algorithms and strategies. \item the choice over possible fitting parameters, their properties and correlations. -\item the full control on $\chi^2$ calculations, including applications of different normalizations and assignments of different masks and weights to different areas of reference data. +\item the full control on objective function calculations, including applications of different normalizations and assignments of different masks and weights to different areas of reference data. \item the possibility to fit simultaneously an arbitrary number of data sets. \end{itemize} @@ -24,8 +26,9 @@ Fitting work flow. } \label{fig:minimization_workflow} \end{figure} + Before running the fitting the user is required to prepare some data and to -configure the fitting kernel of \BornAgain\ . The required stages consist in +configure the fitting kernel of \BornAgain\ . The required stages are \begin{itemize} \item Preparing the sample and the simulation description (multilayer, beam, detector parameters). @@ -96,21 +99,20 @@ to read it before proceeding any further. The user specifies selected sample parameters as fit parameters using \Code{FitSuite} and its \Code{addFitParameter} method - \begin{lstlisting}[language=shell, style=commandline] fit_suite = FitSuite() -fit_suite.addFitParameter(<name>, <value>, <AttLimits>) +fit_suite.addFitParameter(<name>, <initial value>, <step>, <limits>) \end{lstlisting} - -Here \Code{<name>} corresponds to the parameter name in the sample's parameter pool. -By using wildcard's in the parameter name the group of sample parameters, corresponding to the given -pattern, can be associated with single fitting parameter and -fitted simultaneously to get common optimal value. - -The second parameter \Code <value> correspond to the initial value of -the fitting parameter -while the third one \Code{<AttLimits>} corresponds to -the boundaries imposed on the range of variations of that value. It can be +where \Code{<name>} corresponds to the parameter name in the sample's parameter pool. +By using wildcards in the parameter name, a group of sample parameters, corresponding to the given +pattern, can be associated with a single fitting parameter and +fitted simultaneously to get a common optimal value (see \SecRef{WorkingWithSampleParameters}). + +The second parameter \Code <initial value> correspond to the initial value of +the fitting parameter, while the third one +is responsible to the initial iteration steps size. +The last parameter \Code{<AttLimits>} corresponds to +the boundaries imposed on parameter value. It can be \begin{itemize} \item \Code{limitless()} by default, \item \Code{fixed()}, @@ -144,25 +146,25 @@ this feature in the following releases and welcome users' requests on this subje } \vspace*{1mm} -To associate the simulation with the reference data, method \newline +To associate the simulation and the reference data to the fitting engine, method \newline \Code{addSimulationAndRealData} has to be used as shown \begin{lstlisting}[language=python, style=eclipseboxed,numbers=none] fit_suite = FitSuite() fit_suite.addSimulationAndRealData(<simulation>, <reference>, <chi2_module>) \end{lstlisting} -Here \Code{<simulation>} corresponds to \BornAgain\ simulation object +Here \Code{<simulation>} corresponds to a \BornAgain\ simulation object with the sample, beam and detector fully defined, \Code{<reference>} corresponds to the experimental data object obtained from the ASCII file and \Code{<chi2\_module>} is an optional parameter for advanced control of $\chi2$ calculations. It is possible to call this given method more than once to submit more than one pair of -\Code{<simulation>, <reference>} to the fitting procedure and so in -order to proceed to simultaneous fits of -some combined data sets. +\Code{<simulation>, <reference>} to the fitting procedure. +In this way, simultaneous fits of +some combined data sets are performed. -By using the third \Code{<chi2\_module>} parameter different normalizations and weights -can be applied to let the user in full control of the way $\chi2$ is calculated. +By using the third \Code{<chi2\_module>} parameter, different normalizations and weights +can be applied to give user full control of the way $\chi2$ is calculated. This feature will be explained in \SecRef{FittingAdvanced}. @@ -175,7 +177,7 @@ This feature will be explained in \SecRef{FittingAdvanced}. libraries. They are listed in Table~\ref{table:fit_minimizers}. By default \Code{Minuit2} minimizer with default settings will be used and no additional configuration needs to be done. -The remainder of this section explains some of the expert setting, which can be applied to get better +The remainder of this section explains some of the expert settings, which can be applied to get better fit results. The default minimization algorithm can be changed using @@ -276,7 +278,7 @@ fit_suite.runFit() \end{lstlisting} Depending on the complexity of the sample and the number of free sample parameters the fitting -process can count from tenths to thousands of iterations. The results of the fit can +process can take from tens to thousands of iterations. The results of the fit can be printed on the screen using the command \begin{lstlisting}[language=python, style=eclipseboxed, numbers = none] fit_suite.printResults() diff --git a/Doc/UserManual/FittingRightAnswers.tex b/Doc/UserManual/FittingRightAnswers.tex index 635b1c281d2fbb68640b87ec5aade936d91976db..e8a8b0a41bb66598f272d313d0ee80cb389853ab 100644 --- a/Doc/UserManual/FittingRightAnswers.tex +++ b/Doc/UserManual/FittingRightAnswers.tex @@ -8,12 +8,13 @@ local minima in the objective function. Many problems can cause the fit to fail, for example: \begin{itemize} \item an unreliable physical model, +\item an unappropriate choice of objective function \item multiple local minima, \item an unphysical behavior of the objective function, unphysical regions in the parameters space, \item an unreliable parameter error calculation in the presence of limits on the parameter value, -\item often an exponential behavior of the objective function and the +\item an exponential behavior of the objective function and the corresponding numerical inaccuracies, excessive numerical roundoff in the calculation of its value and derivatives, \item large correlations between parameters, @@ -34,10 +35,10 @@ fitting. It remains applicable to any fitting program and any kind of theoretica \item provide a good initial guess for the fit parameters, \item start from the default minimizer settings and perform some fine tuning after some experience has been acquired, \item repeat the fit using different starting values for the parameters or their limits, -\item repeat the fit fixing and varying different groups of parameters, -\item use \Code{Minuit2} minimizer with \Code{Migrad} algorithm - (default) to get the most reliable parameter error estimation, -\item try \Code{GSLMultiFit} minimizer or \Code{Minuit2} minimizer with \Code{Fumili} algorithm to get fewer iterations. +\item repeat the fit, fixing and varying different groups of parameters, +%\item use \Code{Minuit2} minimizer with \Code{Migrad} algorithm +% (default) to get the most reliable parameter error estimation, +%\item try \Code{GSLMultiFit} minimizer or \Code{Minuit2} minimizer with \Code{Fumili} %algorithm to get fewer iterations. %\subsection*{Interpretation of errors.} diff --git a/Doc/UserManual/SoftwareArchitecture.tex b/Doc/UserManual/SoftwareArchitecture.tex index ebe2fe85235ce5e3711d8f9a7c933101ef9ada52..42ab0b34b86ccd15a8739c3f212392fcdf49f117 100644 --- a/Doc/UserManual/SoftwareArchitecture.tex +++ b/Doc/UserManual/SoftwareArchitecture.tex @@ -46,7 +46,7 @@ The framework consists of two shared libraries, \Code{libBornAgainCore} and The library \Code{libBornAgainFit} contains a number of minimization engines and interfaces to them, allowing the user to fit real data with the model previously defined. -\BornAgain\ depends from a few external and well established +\BornAgain\ depends on a few external and well established open-source libraries: \Code{boost}, GNU scientific library, Eigen and Fast Fourier Transformation libraries. They are required to be installed on the system to run \BornAgain\ on Unix Platforms. In the diff --git a/Doc/UserManual/UserManual.pdf b/Doc/UserManual/UserManual.pdf index b718cd89d60ac71eac11a20d17123f0223db83c9..d77105b786d6a4368ee13dd5e285945d36a77e71 100644 Binary files a/Doc/UserManual/UserManual.pdf and b/Doc/UserManual/UserManual.pdf differ