.. _myxclassfit-short:

myXCLASSFit
===========

**Fitting single spectra**

The **myXCLASSFit** function offers the possibility to fit multiple frequency
ranges in multiple files from multiple telescopes simultaneously. It can
be used with different optimization algorithms to optimize the input
parameters defined in an molfit file to achieve a good description of
the observational data. Details of the **myXCLASSFit** are described in
Sect. ":ref:`api-myxclassfit`".

The **myXCLASSFit** function requires at least the following three input files

- molfit file, see Sect. ":ref:`myxclass-molfit`", to define which molecules
  are taken into account and the corresponding components,

- observational xml, see Sect. ":ref:`myxclassfit-obs-xml-file`" , to control
  the import of the observational data,

- algorithm xml file, see Sect. ":ref:`myxclassfit-alg-xml-file`" to specify
  the optimization algorithm.

In addition to these three input files, the *iso ratio file* for describing
the relationships between molecules and their isotopologues, see
Sect. ":ref:`myxclass-iso`", may also be required.

Example call of the **myXCLASSFit** function:

::

    >>> from xclass import task_myXCLASSFit
    >>> import os

    # get path of current directory
    >>> LocalPath = os.getcwd() + "/"

    # set path and name of molfit file
    >>> MolfitsFileName = LocalPath + "files/my_molecules.molfit"

    # set path and name of observational (obs.) xml file
    >>> ObsXMLFileName = LocalPath + "files/my_observation.xml"

    # set path and name of algorithm (alg.) xml file
    >>> AlgorithmXMLFileName = LocalPath + "files/my_algorithm__trf.xml"

    # set optimization package
    >>> Optimizer = "scipy"

    # define that results of myXCLASSFit function are return as dictionary
    >>> DictOutFlag = True

    # call myXCLASSFit function
    >>> OutDict = task_myXCLASSFit.myXCLASSFitCore( \
                                MolfitsFileName = MolfitsFileName, \
                                ObsXMLFileName = ObsXMLFileName, \
                                AlgorithmXMLFileName = AlgorithmXMLFileName, \
                                Optimizer = Optimizer, \
                                DictOutFlag = DictOutFlag)



.. _myxclassfit-obs-xml-file:

Observational xml file
----------------------

The *observational xml file* (obs. xml file) is used to describe the import
of the observational data within an xml file. Here, each parameter is
defined by so-called tags, i.e. ``<TagName>TagValue</TagName>``.

- The obs. xml file has to start with

::

      <?xml version="1.0" encoding="UTF-8"?>


- All tags in the obs. xml file has to be enclosed by the ``<ExpFiles>`` tag,
  i.e.

::

      <ExpFiles>
      ..
      </ExpFiles>


- The tag ``<NumberExpFiles>`` defines the number of observational data files
  and has to be :math:`>=1`. All parameters for each observational data file
  has to be enclosed by the ``<file>`` tag, e.g.

::

      <NumberExpFiles>2</NumberExpFiles>
      <file>
      ..
      </file>
      <file>
      ..
      </file>


- The tag ``<FileNamesExpFiles>`` defines the path and name of the corresponding
  observational data file. |br| |br|


- For each observational data file the tag ``<ImportFilter>`` describes the
  type of the observational data file. For ASCII files the tag has to be set to
  ``xclassASCII``, for FITS files to ``xclassFITS``, respectively. |br| |br|


- The number of ranges ``<NumberExpRanges>`` must be defined for each file and
  must be :math:`>=1`. The tag must also be set if the whole file is used.
  |br| |br|


- For each frequency range the tags ``<MinExpRange>`` and  ``<MaxExpRange>``
  describe the lowest and highest frequency, respectively. |br| |br|


- The step frequency of the simulated spectrum has to be given by
  the tag ``<StepFrequency>``. |br| |br|


- For each frequency range, the user can define a simple phenomenological
  description of the background continuum

  .. math::
     :label: obsxml:UserTbg

     I_{\rm bg} (\nu) = T_{\rm bg} \cdot \left(\frac{\nu}{\nu_{\rm min}} \right)^{T_{\rm slope}}


  using the tags ``<BackgroundTemperature>`` (for the background temperature
  in~K) and ``<TemperatureSlope>`` (for the temperature slope, dimensionless).
  The tag ``<t_back_flag>`` indicates if the user defined background continuum
  (described by ``<BackgroundTemperature>`` and ``<TemperatureSlope>``)
  describe the continuum contribution completely (``True``) or if
  continuum contributions defined in the molfit file are taken into account
  as well (``False``). |br| |br|


- (optional) The user can specify path and name of an ASCII file describing
  the background intensity between the cosmic microwave background and the
  components at the largest distance as function of frequency (in~MHz)
  by using tag ``<BackgroundFileName>``. |br| |br|


- (optional) In order to specify global values for the parameters describing
  the dust contribution for each frequency range, see :eq:`myXCLASS:tau`, the
  tags ``<HydrogenColumnDensity>`` (for the hydrogen column density in
  cm :math:`^{-2}`), ``<DustBeta>`` (for the dust spectral index,
  dimensionless), and ``<Kappa>`` (in cm :math:`^{2}` g :math:`^{-1}`) can be
  used. Additionally, the user can specify path and name of an ASCII file
  describing the dust optical depth as function of frequency (in MHz) by using
  tag ``<DustFileName>``. |br| |br|


- (optional) In order to define global values for the advanced phenomenological
  description of the continuum for each frequency range, the user has to define
  the tags ``<ContPhenFuncID>`` (for selecting the continuum function,
  dimensionless), ``<ContPhenFuncParam1>`` (for the first continuum parameter,
  dimensionless), ``<ContPhenFuncParam2>`` (for the second continuum parameter,
  dimensionless), ``<ContPhenFuncParam3>`` (for the third continuum parameter,
  dimensionless), ``<ContPhenFuncParam4>`` (for the fourth continuum
  parameter, dimensionless), and ``<ContPhenFuncParam5>`` (for the fifth
  continuum parameter, dimensionless). |br| |br|


- (optional, for *myXCLASSMapFit* and *myXCLASSMapRedoFit* function only) The
  tag ``<Threshold>`` defines a threshold (in~K) for each frequency range for
  a pixel. If the spectrum of a pixel has an max. intensity lower than the
  value defined by this parameter the pixel is not fitted (ignored). |br| |br|


- (optional, for *LineID* function only) The tag ``<NoiseLevel>`` describes the
  noise level (in~K) for each frequency range. All parts of the spectrum with
  intensities lower than the noise level are ignored. |br| |br|


- For each observation file the user has to specify the size of the telescope
  ( :math:`>0`) by defining the tag ``<TelescopeSize>`` (for circle-shaped
  beams) or by tags ``<BMIN>``, ``<BMAJ>`` and ``<BPA>`` for elliptical rotated
  beams. Additionally, the tag ``<Inter_Flag>`` indicates if single dish or
  interferometric observations are described. If the sub-beam description is
  deactivated and an elliptical beam is still used, XCLASS assumes a circular
  beam and calculates an average beam size from BMAJ and BMIN. |br| |br|


- Using the tag ``<GlobalvLSR>`` the user can defined different local standard
  of rest velocities ( :math: `v_{\rm LSR}`) for each obs. data file. Thereby, the
  value defined by the input parameter ``vLSR`` is ignored. |br| |br|


- (optional) The tag ``<Redshift>`` indicates the red-shift for the corresponding
  obs. data file. |br| |br|


- (optional) The tags ``<ErrorY>``, ``<NumberHeaderLines>``, and
  ``<SeparatorColumns>`` control the import of the ASCII file containing the
  observational data. Please note, that these tags are read only if the
  corresponding obs. data file is an ASCII file, i.e. that the tag
  ``<ImportFilter>`` is set to ``xclassASCII``. If tag ``<ErrorY>`` is set to
  ``True``, the ASCII file has to contain an additional 3rd column, describing
  the errors (or weigths) for each frequency channel. These weights are used
  in the computation of the :math:`\chi^2` function

  .. math::
     :label: obsxml:chi2

     \chi^2 = \sum_{i=1}^N \left[ \left(y_i^\mathsf{obs} -
                           y_i^\mathsf{fit} \right)^2
                           \cdot \frac{1}{\left(\sigma_i^\mathsf{error}\right)^2}
                           \right],

  where :math:`\sigma_i^{\rm error}` represents the error of the *i* th data point.
  |br| |br|


- In order to use isotopologues, the user has to set the tag
  ``<iso_flag>`` to ``True`` and to specify path and name of an iso ratio
  file using tag ``<IsoTableFileName>``. If no isotopologues are used, tag
  ``<iso_flag>`` has to be set to ``False``. |br| |br|


- (optional) Local-overlap is taken into account by setting tag
  ``<LocalOverlap_Flag>`` to ``True`` otherwise to ``False``, see Sect.
  ":ref:`myxclass-localoverlap`". |br| |br|


- (optional) The number of model pixels along x- and y-direction required for
  the sub-beam description are defined by tags ``<NumModelPixelXX>`` and
  ``<NumModelPixelYY>``, respectively. |br| |br|


- (optional) Deactivate sub-beam description, see Sect.
  ":ref:`myxclass-molfit-subbeam`",
  by setting the ``<NoSubBeamFlag>`` to ``True`` otherwise to ``False``.
  |br| |br|


- (optional) In order to use pre-computed emission and absorption functions
  used in :eq:`myxclass-sourceFunction` for different layer distances
  the user can define the path of a directory, using tag ``<EmAbsPATH>``,
  containing ASCII files describing both functions for different frequencies
  and distances. |br| |br|


- (optional) By default *XCLASS* uses the SQLite3 database file ``cdms_sqlite.db``
  located in the directory defined in the ``xclass/init.dat`` file. In order to
  use a different database file, the user has to define the path and name of
  another database file using the tag ``<dbFilename>``.



Example **observational xml file** used by many *XCLASS* functions:

::

    <?xml version="1.0" encoding="UTF-8"?>
    <ExpFiles>


        <!-- define number of experimental data file(s) -->
        <NumberExpFiles>1</NumberExpFiles>


        <!-- **************************************************************** -->
        <!-- define parameters for first obs. data file -->
        <file>


            <!-- define path and name of obs. data file -->
            <FileNamesExpFiles>demo/myXCLASSFit/band1b.dat</FileNamesExpFiles>


            <!-- define format of obs. data file -->
            <ImportFilter>xclassASCII</ImportFilter>


            <!-- define number of frequency ranges in the current data file -->
            <NumberExpRanges>1</NumberExpRanges>


            <!-- define parameters for each frequency range -->
            <FrequencyRange>


                <!-- define min., max. and step frequency -->
                <MinExpRange>580102.0</MinExpRange>
                <MaxExpRange>580546.5</MaxExpRange>
                <StepFrequency>0.5</StepFrequency>


                <!-- define parameters describing the background -->
                <t_back_flag>False</t_back_flag>
                <BackgroundTemperature>0.88</BackgroundTemperature>
                <TemperatureSlope>3.0</TemperatureSlope>
                <BackgroundFileName>background.dat</BackgroundFileName>


                <!-- define parameters describing dust contribution -->
                <HydrogenColumnDensity>3.0e+24</HydrogenColumnDensity>
                <DustBeta>2.0</DustBeta>
                <Kappa>0.42</Kappa>
                <DustFileName>jena_thin_no__MHz.dat</DustFileName>
            </FrequencyRange>


            <!-- define source velocity (in km/s) -->
            <GlobalvLSR>0.0</GlobalvLSR>


            <!-- define redschift -->
            <Redshift>1.1</Redshift>


            <!-- define size of minor axis (in arcsec) -->
            <BMIN>2.098</BMIN>


            <!-- define size of major axis (in arcsec) -->
            <BMAJ>2.432</BMAJ>


            <!-- define degree of rotation (in degree) -->
            <BPA>20.0</BPA>


            <!-- define if interferometric observation is modeled -->
            <Inter_Flag>False</Inter_Flag>


            <!-- define parameters (for ASCII file import only) -->
            <ErrorY>no</ErrorY>
            <NumberHeaderLines>1</NumberHeaderLines>
            <SeparatorColumns> </SeparatorColumns>
        </file>


        <!-- ******************************************************* -->
        <!-- parameters for isotopologues -->
        <iso_flag>True</iso_flag>
        <IsoTableFileName>demo/myXCLASS/iso_names.txt</IsoTableFileName>


        <!-- **************************************************** -->
        <!-- define if local-overlap is taken into account or not -->
        <LocalOverlap_Flag>True</LocalOverlap_Flag>


        <!-- **************************************************** -->
        <!-- deactivate sub-beam description -->
        <NoSubBeamFlag>True</NoSubBeamFlag>


        <!-- ***************************************************** -->
        <!-- define number of model pixel along x- and y-direction -->
        <NumModelPixelXX>500</NumModelPixelXX>
        <NumModelPixelYY>500</NumModelPixelYY>


        <!-- *************************************************** -->
        <!-- define path and name of database file -->
        <dbFilename>Database/cdms_sqlite__2016-06-15.db</dbFilename>
    </ExpFiles>



.. _myxclassfit-alg-xml-file:

Algorithm xml file
------------------

The *algorithm xml file* (alg. xml file) is used to describe the
optimization algorithms, which are used to fit the model parameters
defined in the molfit and other input files (iso-ratio) to the
observational data. Here, each parameter is defined by so-called tags, i.e.
``<TagName>TagValue</TagName>``.

- The alg. xml file has to start with

::

      <?xml version="1.0" encoding="UTF-8"?>


- All tags in the alg. xml file has to be enclosed by the ``<FitControl>`` tag,
  i.e.

::

      <FitControl>
      ..
      </FitControl>


- The tag ``<NumberOfFitAlgorithms>`` defines the number of optimization
  algorithms and has to be :math:`>=1`. All parameters for each algorithm
  has to be enclosed by the ``<algorithm>`` tag, e.g.

::

      <NumberExpFiles>2</NumberExpFiles>
      <algorithm>
      ..
      </algorithm>
      <algorithm>
      ..
      </algorithm>


- The tag ``<FitAlgorithm>`` defines the name of the optimization algorithm.
  The following algorithms are available:

    - **"trf"**: (Trust Region Reflective algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a fast local optimization
      algorithm that takes into account the parameter limits, i.e. the
      algorithm guarantees that the fitting parameters remain within the
      user-defined parameter limits.

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"dogbox"**: (dogleg algorithm with rectangular trust region, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*), very similar
      to the aforementioned "trf" algorithm.

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"lm"**: the Levenberg-Marquardt algorithm as implemented in MINPACK but
      without taking parameter limits into account! Please use "trf" algorithm
      instead.

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"nelder-mead"**: (Nelder-Mead algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *not parallelized*)
      a local optimization algorithm
      |br| |br|


    - **"powell"**: (modified Powell algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *not parallelized*)
      a local optimization algorithm
      |br| |br|


    - **"cobyla"**: (Constrained Optimization BY Linear Approximation (COBYLA)
      algorithm, only used with optimizer ``SCIPY`` or MapFit
      function, *not parallelized*) a local optimization algorithm. |br| |br|


    - **"cg"**: (conjugate gradient algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a local optimization algorithm

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"bfgs"**: (BFGS algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a local optimization algorithm

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"l-bfgs-b"**: (L-BFGS-B algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a local optimization algorithm

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"slsqp"**: (Sequential Least Squares Programming (SLSQP) Algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a local optimization algorithm

      Additional tags required by this algorithm:

      - tag ``<VariationValue>``
        sets the value of variation (in percent) for the calculation
        of the gradient of the :math:`\chi^2` function.
        |br| |br|


    - **"basinhopping"**: (Basin-Hopping Algorithm, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a global optimization algorithm
      |br| |br|


    - **"brute", "bruteforce", "brute-force"**: (brute force, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a global optimization algorithm.

      Additional tags required by this algorithm:

      - tag ``<BruteSteps>`` can be used to define the number of grid points
        along each parameter axis as python list. (Each element indicates the
        number of grid points for the corresponding fit parameter).
        |br| |br|


    - **"differential_evolution"**: (Differential Evolution, only used with
      optimizer ``SCIPY`` or MapFit function, *parallelized*)
      a global optimization algorithm. |br| |br|


    - **"dual_annealing"**: (Dual Annealing, only used with optimizer ``SCIPY``
      or MapFit function, *parallelized*) a global optimization algorithm.
      |br| |br|


    - **"error-estimation", "errorestim_ins"**: estimate error of model parameters
      using "mcmc" or "ultranest", *parallelized*.

      Additional tags required by this algorithm:

      - tag ``<NumberSampler>`` sets the number of sampler,

      - tag ``<MultiplicitySigma>`` sets multiplicity of standard deviation
        (1-sigma, 2-sigma, 3-sigma, etc.),

      - tag ``<ErrorType>`` sets the type of error range: ["Gaussian",
        "Percentile", "HPD", "UltraNest"].
        |br| |br|


    - **"mcmc", "emcee"**: (*parallelized*) The *emcee* [1]_ package
      [ForemanMackey_2013]_, implements the affine-invariant ensemble sampler
      of [Goodman_2010]_, to perform a full-parallelized MCMC algorithm,

      Additional tags required by this algorithm:

      - tag ``<ErrorMethod>`` sets the used algorithm to compute errors, i.e.
        ``mcmc``, ``ultranest``, or ``ins``.

      - tag ``<NumberSampler>`` sets the number of sampler

      - tag ``<BackendFileName>`` describes the path and name of the backend file,
        which is used to store and resume an interrupted MCMC run. If the given file
        does not exists before the MCMC run starts, *XCLASS* stores all MCMC parameters
        into a HDF5 file. In order to resume an interrupted MCMC run, the path and
        name of the corresponding HDF5 file has to be defined by this tag.

      - tag ``<SampleMethod>`` sets the initial sampling method. If the tag is set
        to ``local``, the initial starting values of the MCMC samplers are drawn
        in a small sphere around the initial parameter values. If the tag is set
        to ``global``, the initial starting values are randomly distributed within
        the given parameter limits.

      - tag ``<NumberBurnInIter>`` sets the number of iterations for burn-in phase
        |br| |br|


    - **"ultranest"**: (*parallelized*) UltraNest [2]_ is a general-purpose Bayesian
      inference package [Buchner_2016]_, [Buchner_2019]_ for parameter estimation
      and model comparison. It is especially useful for multi-modal or
      non-Gaussian parameter spaces, computational expensive models, in robust
      pipelines. Furthermore, UltraNest is intended for fitting complex physical
      models with slow likelihood evaluations, with one to hundreds of
      parameters. In addition, it intends to replace heuristic methods like
      multi-ellipsoid nested sampling and dynamic nested sampling with more
      rigorous methods.

      Additional tags required by this algorithm:

      - tag ``<NumberSampler>``
        sets the number of sampler

      - tag ``<BackendFileName>`` describes the path and name of the backend file,
        which is used to store and resume an interrupted UltraNest run.

      - tag ``<dictionary>`` describes additional parameters for the UltraNest
        package as python dictionary

      - tag ``<NumberBurnInIter>`` sets the number of iterations for burn-in phase
        |br| |br|


    - **"genetic"**: (Genetic algorithm, only used with optimizer ``MAGIX``,
      *parallelized*) a global optimization algorithm

      - tag ``<BestSiteCounter>`` sets the number of best sites.
        |br| |br|


    - **"pso"**: (Particle swarm optimization, only used with optimizer ``MAGIX``,
      *parallelized*) a global optimization algorithm

      - tag ``<BestSiteCounter>`` sets the number of best sites.
        |br| |br|


    - **"ins"**: (Interval nested sampling algorithm, only used with
      optimizer ``MAGIX``, *parallelized*) a global optimization algorithm

      - tag ``<vol_bound>`` get critical bound for volume,

      - tag ``<delta_incl>`` defines the difference between
        maximal and minimal value of inclusion function,
        |br| |br|


    - **"ns"**: (Nested sampling algorithm, only used with optimizer ``MAGIX``,
      *parallelized*) a global optimization algorithm.
      |br| |br|


    - **"bees"**: (Bees algorithm, only used with optimizer ``MAGIX``,
      *parallelized*) a global optimization algorithm

      - tag ``<BestSiteCounter>`` sets the number of best sites,

      - tag ``<NumberBees>`` sets the number of bees.
        |br| |br|


    - **"blank"**: (only used with optimizer ``SCIPY`` or MapFit or
      CubeFit function)
      using this method the fit parameters are not optimized,
      but the synthetic spectra based on the given parameter values are
      computed.
      |br| |br|


- The tag ``<number_iterations>`` (or ``<NumberIterations>``) defines the
  max. number of iterations for the corresponding optimization algorithm and
  has to be :math:`>=1`.
  |br| |br|


- The tag ``<NumberProcessors>`` defines the max. number of cores used for the
  corresponding optimization algorithm and has to be :math:`>=1`.

  Note that a value :math:`>1` is considered only for parallelized algorithms.
  |br| |br|


- The tag ``<limit_of_chi2>`` (or ``<LimitChi2>``) defines the stopping criterion
  for the :math:`\chi^2` function. If the :math:`\chi^2` function drops below
  this threshold, the algorithm is stopped.
  |br| |br|


- The tag ``<RenormalizedChi2>`` defines if a renormalized :math:`\chi^2`
  function is used.

  .. math::
     \left(\chi^2_{\rm limit} \right)_\mathsf{renom} =
        \left(\sum_{i=1}^{N_\mathsf{exp}} \cdot N_\mathsf{points}(i) - N_\mathsf{par}\right) \cdot \left(\chi^2_{\rm limit} \right)_\mathsf{orig},

  where :math:`N_{\rm exp}` is the number of observation files
  :math:`N_{\rm points}(i)` indicates the number of observation data points in the
  observation file :math:`i`;
  :math:`N_{\rm par}` is the total number of all fit parameters;
  :math:`\left(\chi^2_{\rm limit} \right)_\mathsf{\rm orig}` is the original
  unmodified value of :math:`\chi^2`.
  |br| |br|


- The tag ``<SaveChi2>`` indicates the storage of the :math:`\chi^2` function.
  |br| |br|


- With the optimizer ``MAGIX``, see Sect. ":ref:`api-myxclassfit`" the following
  optimization algorithms are available as MPI-parallelized implementations

  **"Levenberg-Marquardt"**, **"genetic"**, **"pso"**, **"ins"**, **"ns"**, and **"bees"**.


- With optimizer ``MAGIX`` the tag ``<MPIHostFileName>`` defines path and name
  of a host file used for MPI parallelized algorithms.
  |br| |br|


- With optimizer ``SCIPY`` the tag ``<LogChi2>`` indicates the usage of a
  log file containing all :math:`\chi^2` values with the corresponding parameter
  vectors computed during the application of each optimization algorithm.
  |br| |br|


- With optimizer ``SCIPY`` the tag ``<PlotFlag>`` indicates the creation of
  plots describing the obs. data together with the synthetic spectra and
  :math:`\chi^2` function for each obs. data file.
  |br| |br|



Example of an **algorithm xml file**:

::

    <?xml version="1.0" encoding="UTF-8"?>
    <FitControl>
        <!-- settings for fit process -->


        <!-- set number of used algorithms -->
        <NumberOfFitAlgorithms>2</NumberOfFitAlgorithms>


        <algorithm>
            <!-- define algorithm -->
            <FitAlgorithm>bees</FitAlgorithm>


            <!-- set max. number of iterations -->
            <number_iterations>30</number_iterations>


            <!-- set max. number of processors -->
            <NumberProcessors>8</NumberProcessors>


            <!-- set path and name of host file -->
            <MPIHostFileName>hostfile.txt</MPIHostFileName>


            <!-- settings for chi^2 -->
            <limit_of_chi2>0.001</limit_of_chi2>
            <RenormalizedChi2>yes</RenormalizedChi2>
            <DeterminationChi2>default</DeterminationChi2>
            <SaveChi2>yes</SaveChi2>


            <!-- set plot options -->
            <PlotAxisX>Frequency [Hz]</PlotAxisX>
            <PlotAxisY>Intensity</PlotAxisY>
            <PlotIteration>yes</PlotIteration>
        </algorithm>

        <algorithm>
            <!-- define algorithm -->
            <FitAlgorithm>Levenberg-Marquardt</FitAlgorithm>


            <!-- set max. number of iterations -->
            <number_iterations>20</number_iterations>


            <!-- set max. number of processors -->
            <NumberProcessors>8</NumberProcessors>


            <!-- set path and name of host file -->
            <MPIHostFileName>hostfile.txt</MPIHostFileName>


            <!-- settings for chi^2 -->
            <limit_of_chi2>0.0008</limit_of_chi2>
            <RenormalizedChi2>yes</RenormalizedChi2>
            <DeterminationChi2>default</DeterminationChi2>
            <SaveChi2>yes</SaveChi2>


            <!-- set plot options -->
            <PlotAxisX>Frequency [Hz]</PlotAxisX>
            <PlotAxisY>Intensity</PlotAxisY>
            <PlotIteration>yes</PlotIteration>
        </algorithm>
    </FitControl>



.. ----------------------------------------------------------------------------------------



Footnotes
---------

.. Footnotes
.. [1]   https://emcee.readthedocs.io/en/stable/

.. [2]   https://johannesbuchner.github.io/UltraNest/index.html



.. ----------------------------------------------------------------------------------------



References
----------

.. citation reference
.. [ForemanMackey_2013]   Foreman-Mackey, Daniel, David W. Hogg, Dustin Lang, and Jonathan
                          Goodman. 2013. “Emcee: The MCMC Hammer.” *Publications of the
                          Astronomical Society of the Pacific* 125 (925): 306.
                          https://doi.org/10.1086/670067.

.. [Goodman_2010]         Goodman, Jonathan, and Jonathan Weare. 2010. “Ensemble Samplers
                          with Affine Invariance.” *Communications in Applied Mathematics
                          and Computational Science* 5 (1): 65–80.

.. [Buchner_2016]         Buchner, Johannes. 2016. “A statistical test for Nested Sampling
                          algorithms.” *Statistics and Computing* 26 (1-2): 383–92.
                          https://doi.org/10.1007/s11222-014-9512-y.

.. [Buchner_2019]         ———. 2019. “Collaborative Nested Sampling: Big Data versus Complex
                          Physical Models” 131 (1004): 108005.
                          https://doi.org/10.1088/1538-3873/aae7fc.



.. ----------------------------------------------------------------------------------------



.. hack to get extra blank line
.. |br| raw:: html

      <br>
