{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "RuntimeError",
     "evalue": "module compiled against API version 0xa but this version of numpy is 0x9",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
      "\u001b[0;31mRuntimeError\u001b[0m: module compiled against API version 0xa but this version of numpy is 0x9"
     ]
    },
    {
     "ename": "ImportError",
     "evalue": "numpy.core.multiarray failed to import",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-1-63ea9c24d0f9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mu'matplotlib inline'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/opt/anaconda2/lib/python2.7/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     27\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mcycler\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcycler\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     28\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolorbar\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     30\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mstyle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     31\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m_pylab_helpers\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minteractive\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/opt/anaconda2/lib/python2.7/site-packages/matplotlib/colorbar.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     30\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     31\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmpl\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 32\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0martist\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmartist\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     33\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcbook\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     34\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollections\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mcollections\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/opt/anaconda2/lib/python2.7/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcbook\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmplDeprecation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdocstring\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m from .transforms import (Bbox, IdentityTransform, TransformedBbox,\n\u001b[0m\u001b[1;32m     15\u001b[0m                          TransformedPath, Transform)\n\u001b[1;32m     16\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPath\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/opt/anaconda2/lib/python2.7/site-packages/matplotlib/transforms.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     37\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     38\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 39\u001b[0;31m from matplotlib._path import (affine_transform, count_bboxes_overlapping_bbox,\n\u001b[0m\u001b[1;32m     40\u001b[0m     update_path_extents)\n\u001b[1;32m     41\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinalg\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0minv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mImportError\u001b[0m: numpy.core.multiarray failed to import"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Lmfit provides a high-level interface to non-linear optimization and curve fitting problems for Python.\n",
    "#It builds on and extends many of the optimization methods of scipy.optimize.\n",
    "#The advantage is the ease on parameter settings, change of fitting algorithms,\n",
    "#estimation of confidence intervals, and multiple model combination and a set of ready-to-use fitting models.\n",
    "#I'll show some examples like line deblending and continuum estimation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#let's start with a simple one\n",
    "def parabola(x, a0, a1, a2):\n",
    "    return a2*x**2 + a1*x + a0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-8, 11, -10, 60]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nDyWpdDd5AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbf3567c0b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#and generate some fake data\n",
    "Xf = np.linspace(-7, 10, 100)\n",
    "Yf = parabola(X, 3, 0.1, 0.5)+np.random.randn(100)*3\n",
    "plt.plot(Xf, Yf, 'k.')\n",
    "plt.axis([-8, 11, -10, 60])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['a0', 'a1', 'a2']\n",
      "['x']\n"
     ]
    }
   ],
   "source": [
    "#Lmfit works with Model objects that is the law of the fitting function\n",
    "from lmfit import Model\n",
    "\n",
    "#first, let's create a model from scratch using our parabola function\n",
    "pmodel = Model(parabola)\n",
    "\n",
    "#LmFit automatically recognizes what is a parameter and an independent variable\n",
    "#note: the Model object params are not the ones that will be minimized, they are model properties\n",
    "print(pmodel.param_names)\n",
    "print(pmodel.independent_vars)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<Parameter 'a0', -inf, bounds=[-inf:inf]>\n"
     ]
    }
   ],
   "source": [
    "#the central part of LmFit is the Parameters object. it behaves like a dict and contains the parameters\n",
    "#and values that are going to be adjusted. we create them like this:\n",
    "params = pmodel.make_params()\n",
    "print(params['a0'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Parameters([('a0', <Parameter 'a0', 1, bounds=[-5:5]>), ('a1', <Parameter 'a1', -inf, bounds=[-inf:inf]>), ('a2', <Parameter 'a2', -inf, bounds=[-inf:inf]>)])\n"
     ]
    }
   ],
   "source": [
    "#we can set each parameter value separately, and their range\n",
    "params['a0'].set(value=1, min=-5, max=5)\n",
    "print(params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[Model]]\n",
      "    Model(parabola)\n",
      "[[Fit Statistics]]\n",
      "    # function evals   = 14\n",
      "    # data points      = 100\n",
      "    # variables        = 3\n",
      "    chi-square         = 926.644\n",
      "    reduced chi-square = 9.553\n",
      "    Akaike info crit   = 228.640\n",
      "    Bayesian info crit = 236.455\n",
      "[[Variables]]\n",
      "    a0:   3.13800548 +/- 0.450390 (14.35%) (init= 0)\n",
      "    a1:   0.05806008 +/- 0.075292 (129.68%) (init= 0)\n",
      "    a2:   0.49203068 +/- 0.014066 (2.86%) (init= 0)\n",
      "[[Correlations]] (unreported correlations are <  0.100)\n",
      "    C(a0, a2)                    = -0.697 \n",
      "    C(a1, a2)                    = -0.560 \n",
      "    C(a0, a1)                    =  0.219 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "#so, let's perform the fit giving initial values for every parameter (the fit will fail otherwise)\n",
    "result = pmodel.fit(Yf, x=Xf, a0=0, a1=0, a2=0)\n",
    "#the Results object has several attributes, including a pretty report\n",
    "print(result.fit_report())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-8, 11, -10, 60]"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbf359283c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#let's see how it is\n",
    "plt.plot(Xf, Yf, 'k.')\n",
    "plt.plot(Xf, result.init_fit, 'r--')\n",
    "plt.plot(Xf, result.best_fit, 'b-')\n",
    "plt.axis([-8, 11, -10, 60])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fbf35087a90>]"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbf35754390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#ok, now let's turn adventure mode on\n",
    "#we're going to perform a high-resolution spectrum deblending. let's have a look at it:\n",
    "spec = np.genfromtxt('mg.dat', unpack=True)\n",
    "plt.plot(spec[0], spec[1], 'k-', lw=0.7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#for that, we'll use a constant model for the continuum, a voigt for the Mg line and gaussian for additional lines\n",
    "from lmfit.models import VoigtModel, GaussianModel, ConstantModel\n",
    "\n",
    "#on LmFit we can combine several models to fit data, so to make things easier, let's separate them\n",
    "#calling a the model to make the continuum:\n",
    "cont = ConstantModel(prefix='cont_')\n",
    "#on built-in models we can guess the parameters instead of setting each one\n",
    "pars = cont.guess(spec[1], x=spec[0])\n",
    "#this will create the Parameters object that will store every parameter of each model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#now the Voigt model for the main Mg line\n",
    "mg = VoigtModel(prefix='Mg_')\n",
    "#we can update the parameters using the guess\n",
    "pars.update(mg.guess(spec[1], x=spec[0]))\n",
    "#but if we take it like that it's going to be a mess, so we set some constraints\n",
    "pars['Mg_center'].set(5183.5)\n",
    "pars['Mg_sigma'].set(0.2)\n",
    "pars['Mg_gamma'].set(0.2, vary=True)\n",
    "#now, we have 4 lines to fit a gaussian, and will be easier to create a function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def call_gauss(cen, no, pars):\n",
    "    \n",
    "    #since we can have a lot of parameters, it is good to identify each one\n",
    "    label='g'+str(no)+'_'\n",
    "    gauss = GaussianModel(prefix=label)\n",
    "    #so they would be called g1_sigma for example.\n",
    "    \n",
    "    #now we're going to include this model parameters inside the existing Parameters object\n",
    "    #I'll do it separately, because using guess would use the entire data\n",
    "    pars.update(gauss.make_params())\n",
    "    #and give them initial values\n",
    "    pars[label+'center'].set(cen, min=cen-0.05, max=cen+0.05)\n",
    "    pars[label+'amplitude'].set(-1, max=-0.001)\n",
    "    pars[label+'sigma'].set(0.2, max=0.3)\n",
    "    #now we return this Model object, since we already modified the Parameters object\n",
    "    return gauss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<lmfit.Model: (((((Model(constant, prefix='cont_') + Model(voigt, prefix='Mg_')) + Model(gaussian, prefix='g0_')) + Model(gaussian, prefix='g1_')) + Model(gaussian, prefix='g2_')) + Model(gaussian, prefix='g3_'))>\n"
     ]
    }
   ],
   "source": [
    "#here we have the approximate lambdas\n",
    "lbd = [5181.2, 5182.7, 5184.2, 5184.6]\n",
    "#so let's sum the models\n",
    "finmod = cont + mg\n",
    "for n, l in enumerate(lbd):\n",
    "    finmod = finmod + call_gauss(l, n, pars)\n",
    "print(finmod)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[Model]]\n",
      "    (((((Model(constant, prefix='cont_') + Model(voigt, prefix='Mg_')) + Model(gaussian, prefix='g0_')) + Model(gaussian, prefix='g1_')) + Model(gaussian, prefix='g2_')) + Model(gaussian, prefix='g3_'))\n",
      "[[Fit Statistics]]\n",
      "    # function evals   = 317\n",
      "    # data points      = 341\n",
      "    # variables        = 17\n",
      "    chi-square         = 0.169\n",
      "    reduced chi-square = 0.001\n",
      "    Akaike info crit   = -2560.957\n",
      "    Bayesian info crit = -2495.815\n",
      "[[Variables]]\n",
      "    cont_c:         1.03933539 +/- 0.003784 (0.36%) (init= 0.7928076)\n",
      "    Mg_sigma:       0.00066759 +/- 3.618121 (541971.16%) (init= 0.2)\n",
      "    Mg_center:      5183.61619 +/- 0.002490 (0.00%) (init= 5183.5)\n",
      "    Mg_amplitude:  -1.20474720 +/- 0.027774 (2.31%) (init= 10.18333)\n",
      "    Mg_gamma:       0.42477708 +/- 0.017812 (4.19%) (init= 0.2)\n",
      "    Mg_fwhm:        0.00240418 +/- 13.02997 (541971.16%)  == '3.6013100*Mg_sigma'\n",
      "    Mg_height:     -719.944618 +/- 3.90e+06 (541973.17%)  == '0.3989423*Mg_amplitude/max(1.e-15, Mg_sigma)'\n",
      "    g0_sigma:       0.08432610 +/- 0.005053 (5.99%) (init= 0.2)\n",
      "    g0_center:      5181.21351 +/- 0.004769 (0.00%) (init= 5181.2)\n",
      "    g0_amplitude:  -0.03739501 +/- 0.002145 (5.74%) (init=-1)\n",
      "    g0_fwhm:        0.19857280 +/- 0.011900 (5.99%)  == '2.3548200*g0_sigma'\n",
      "    g0_height:     -0.17691380 +/- 0.008843 (5.00%)  == '0.3989423*g0_amplitude/max(1.e-15, g0_sigma)'\n",
      "    g1_sigma:       0.08533138 +/- 0.005706 (6.69%) (init= 0.2)\n",
      "    g1_center:      5182.65002 +/- 0.008950 (0.00%) (init= 5182.7)\n",
      "    g1_amplitude:  -0.03474847 +/- 0.002327 (6.70%) (init=-1)\n",
      "    g1_fwhm:        0.20094004 +/- 0.013438 (6.69%)  == '2.3548200*g1_sigma'\n",
      "    g1_height:     -0.16245647 +/- 0.008909 (5.48%)  == '0.3989423*g1_amplitude/max(1.e-15, g1_sigma)'\n",
      "    g2_sigma:       0.07450954 +/- 0.004988 (6.70%) (init= 0.2)\n",
      "    g2_center:      5184.24999 +/- 0.002743 (0.00%) (init= 5184.2)\n",
      "    g2_amplitude:  -0.03396740 +/- 0.002434 (7.17%) (init=-1)\n",
      "    g2_fwhm:        0.17545657 +/- 0.011747 (6.70%)  == '2.3548200*g2_sigma'\n",
      "    g2_height:     -0.18186978 +/- 0.010126 (5.57%)  == '0.3989423*g2_amplitude/max(1.e-15, g2_sigma)'\n",
      "    g3_sigma:       0.06498671 +/- 0.004031 (6.20%) (init= 0.2)\n",
      "    g3_center:      5184.55809 +/- 0.003774 (0.00%) (init= 5184.6)\n",
      "    g3_amplitude:  -0.03240532 +/- 0.001961 (6.05%) (init=-1)\n",
      "    g3_fwhm:        0.15303201 +/- 0.009493 (6.20%)  == '2.3548200*g3_sigma'\n",
      "    g3_height:     -0.19893073 +/- 0.010362 (5.21%)  == '0.3989423*g3_amplitude/max(1.e-15, g3_sigma)'\n",
      "[[Correlations]] (unreported correlations are <  0.100)\n",
      "    C(Mg_amplitude, Mg_gamma)    = -0.961 \n",
      "    C(Mg_sigma, Mg_gamma)        = -0.956 \n",
      "    C(cont_c, Mg_amplitude)      = -0.905 \n",
      "    C(Mg_sigma, Mg_amplitude)    =  0.872 \n",
      "    C(cont_c, Mg_gamma)          =  0.834 \n",
      "    C(cont_c, Mg_sigma)          = -0.747 \n",
      "    C(g2_sigma, g2_amplitude)    = -0.679 \n",
      "    C(g1_sigma, g1_amplitude)    = -0.664 \n",
      "    C(g3_sigma, g3_amplitude)    = -0.639 \n",
      "    C(g0_sigma, g0_amplitude)    = -0.638 \n",
      "    C(Mg_amplitude, g2_amplitude)  = -0.557 \n",
      "    C(Mg_gamma, g2_amplitude)    =  0.519 \n",
      "    C(Mg_gamma, g1_amplitude)    =  0.514 \n",
      "    C(cont_c, g0_amplitude)      = -0.493 \n",
      "    C(Mg_amplitude, g1_amplitude)  = -0.481 \n",
      "    C(Mg_sigma, g1_amplitude)    = -0.475 \n",
      "    C(Mg_gamma, g3_amplitude)    =  0.468 \n",
      "    C(Mg_amplitude, g3_amplitude)  = -0.439 \n",
      "    C(Mg_sigma, g3_amplitude)    = -0.432 \n",
      "    C(Mg_sigma, g2_amplitude)    = -0.411 \n",
      "    C(cont_c, g2_amplitude)      =  0.402 \n",
      "    C(Mg_center, g2_amplitude)   =  0.395 \n",
      "    C(Mg_amplitude, g0_amplitude)  =  0.380 \n",
      "    C(Mg_gamma, g1_sigma)        = -0.335 \n",
      "    C(Mg_gamma, g0_amplitude)    = -0.320 \n",
      "    C(g1_amplitude, g2_amplitude)  =  0.318 \n",
      "    C(Mg_amplitude, g1_sigma)    =  0.316 \n",
      "    C(cont_c, g0_sigma)          =  0.313 \n",
      "    C(g1_amplitude, g3_amplitude)  =  0.311 \n",
      "    C(Mg_sigma, g1_sigma)        =  0.307 \n",
      "    C(Mg_amplitude, g2_sigma)    =  0.307 \n",
      "    C(cont_c, g1_amplitude)      =  0.292 \n",
      "    C(Mg_sigma, g0_amplitude)    =  0.273 \n",
      "    C(cont_c, g3_amplitude)      =  0.272 \n",
      "    C(Mg_gamma, g2_sigma)        = -0.271 \n",
      "    C(Mg_center, g2_sigma)       = -0.264 \n",
      "    C(g2_amplitude, g3_amplitude)  =  0.255 \n",
      "    C(Mg_gamma, g3_sigma)        = -0.249 \n",
      "    C(Mg_amplitude, g0_sigma)    = -0.240 \n",
      "    C(Mg_sigma, g3_sigma)        =  0.234 \n",
      "    C(Mg_amplitude, g3_sigma)    =  0.228 \n",
      "    C(cont_c, g2_sigma)          = -0.218 \n",
      "    C(g1_sigma, g2_amplitude)    = -0.209 \n",
      "    C(Mg_center, Mg_amplitude)   = -0.206 \n",
      "    C(g1_sigma, g3_amplitude)    = -0.203 \n",
      "    C(Mg_center, g3_amplitude)   =  0.203 \n",
      "    C(Mg_gamma, g0_sigma)        =  0.202 \n",
      "    C(Mg_sigma, g2_sigma)        =  0.197 \n",
      "    C(cont_c, g1_sigma)          = -0.191 \n",
      "    C(Mg_center, Mg_gamma)       =  0.188 \n",
      "    C(Mg_sigma, g0_sigma)        = -0.172 \n",
      "    C(g1_amplitude, g2_sigma)    = -0.168 \n",
      "    C(g1_amplitude, g3_sigma)    = -0.168 \n",
      "    C(cont_c, Mg_center)         =  0.147 \n",
      "    C(Mg_sigma, Mg_center)       = -0.143 \n",
      "    C(g0_amplitude, g2_amplitude)  = -0.136 \n",
      "    C(cont_c, g3_sigma)          = -0.136 \n",
      "    C(g2_sigma, g3_center)       =  0.124 \n",
      "    C(g2_center, g3_sigma)       = -0.122 \n",
      "    C(Mg_amplitude, g1_center)   = -0.120 \n",
      "    C(cont_c, g1_center)         =  0.112 \n",
      "    C(g1_sigma, g2_sigma)        =  0.111 \n",
      "    C(g1_sigma, g3_sigma)        =  0.110 \n",
      "    C(Mg_gamma, g1_center)       =  0.109 \n",
      "    C(g2_sigma, g3_sigma)        = -0.101 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "#now we perform the fit\n",
    "result = finmod.fit(spec[1], pars, x=spec[0])\n",
    "print(result.fit_report())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mg 5183.62\n",
      "g0 5181.21\n",
      "g1 5182.65\n",
      "g2 5184.25\n",
      "g3 5184.56\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fbf34bd8278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#let's check the resulting fit\n",
    "plt.plot(spec[0], spec[1], 'k-')\n",
    "plt.plot(spec[0], result.best_fit, 'b-')\n",
    "\n",
    "#and extract the fitted lambdas\n",
    "for p in result.params:\n",
    "    if 'center' in p:\n",
    "        print('%s %.2f'%(p.split('_')[0], result.params[p].value))"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
