{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Calibration of the 9-Mythen detector at the Cristal beamline at Soleil\n",
    "\n",
    "Mythen detectors are 1D-strip detector sold by Dectris. \n",
    "On the Cristal beamline at Soleil, 9 of them are mounted on the goniometer. \n",
    "\n",
    "This notebook explains how to calibrate precisely their position (including the wavelength used) as function of the goniometer position.\n",
    "\n",
    "All input data are provided in a Nexus file wich contrains both the (approximate) energy, the goniometer positions (500 points have been measured) and the measured signal.\n",
    "\n",
    "As pyFAI is not made for 1D data, the Mythen detector will be considered as a 1x1280 image.\n",
    "\n",
    "We start by importing a whole bunch of modules:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib nbagg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import OrderedDict\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy\n",
    "import os\n",
    "import h5py\n",
    "from silx.resources import ExternalResources\n",
    "\n",
    "from pyFAI import goniometer\n",
    "from pyFAI.detectors import Detector\n",
    "from pyFAI.goniometer import ExtendedTransformation, GoniometerRefinement\n",
    "from pyFAI.control_points import ControlPoints\n",
    "from pyFAI.geometryRefinement import GeometryRefinement\n",
    "from pyFAI.gui import jupyter\n",
    "from pyFAI.units import hc\n",
    "from pyFAI.calibrant import get_calibrant\n",
    "from pyFAI.containers import Integrate1dResult\n",
    "\n",
    "import ipywidgets as widgets\n",
    "\n",
    "from scipy.signal import find_peaks_cwt\n",
    "from scipy.interpolate import interp1d\n",
    "from scipy.optimize import bisect, minimize\n",
    "from scipy.spatial import distance_matrix\n",
    "import time\n",
    "\n",
    "start_time = time.time()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Nota: Useful to configure a proxy if you are behind a firewall\n",
    "#os.environ[\"http_proxy\"] = \"http://proxy.company.fr:3128\"\n",
    "\n",
    "downloader = ExternalResources(\"detector_calibration\", \"http://www.silx.org/pub/pyFAI/gonio/\")\n",
    "mythen_ring_file = downloader.getfile(\"LaB6_17keV_att3_tth2C_24_01_2018_19-43-20_1555.nxs\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The data file can be downoaded from:\n",
    "http://www.silx.org/pub/pyFAI/gonio/LaB6_17keV_att3_tth2C_24_01_2018_19-43-20_1555.nxs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Positions:  [90.00000001 89.79994445 89.5998889  89.39994445 89.19994445] ...\n"
     ]
    }
   ],
   "source": [
    "#Open the Nexus file and retrieve the actual positions:\n",
    "\n",
    "h5 = h5py.File(mythen_ring_file, mode=\"r\")\n",
    "position = h5[\"/LaB6_17keV_att3_1555/scan_data/actuator_1_1\"][:]\n",
    "print(\"Positions: \", position[:5], \"...\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_01 (501, 5120)\n",
      "data_02 (501, 1280)\n",
      "data_03 (501, 1280)\n",
      "data_04 (501, 1280)\n",
      "data_05 (501, 1280)\n",
      "data_06 (501, 5120)\n",
      "data_07 (501, 1280)\n",
      "data_08 (501, 1280)\n",
      "data_09 (501, 1280)\n",
      "data_10 (501, 1280)\n",
      "data_11 (501, 1280)\n",
      "data_12 (501, 1280)\n",
      "['data_02', 'data_03', 'data_04', 'data_05', 'data_07', 'data_08', 'data_09', 'data_10', 'data_11', 'data_12']\n"
     ]
    }
   ],
   "source": [
    "#Read all data\n",
    "\n",
    "data = {}\n",
    "ds_names = []\n",
    "for idx in range(1,13):\n",
    "    name = \"data_%02i\"%idx\n",
    "    ds = h5[\"/LaB6_17keV_att3_1555/scan_data/\"+name][:]\n",
    "    print(name, ds.shape)\n",
    "    if ds.shape[1]<2000:\n",
    "        #Keep only the single modules\n",
    "        data[name] = ds\n",
    "        ds_names.append(name)\n",
    "\n",
    "print(ds_names)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Define a Mythen-detector mounted vertically:\n",
    "\n",
    "class MythenV(Detector):\n",
    "    \"Verical Mythen dtrip detector from Dectris\"\n",
    "    aliases = [\"MythenV 1280\"]\n",
    "    force_pixel = True\n",
    "    MAX_SHAPE = (1280, 1)\n",
    "\n",
    "    def __init__(self,pixel1=50e-6, pixel2=8e-3):\n",
    "        super(MythenV, self).__init__(pixel1=pixel1, pixel2=pixel2)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02 MythenV 1280\n",
      "data_03 MythenV 1280\n",
      "data_04 MythenV 1280\n",
      "data_05 MythenV 1280\n",
      "data_07 MythenV 1280\n",
      "data_08 MythenV 1280\n",
      "data_09 MythenV 1280\n",
      "data_10 MythenV 1280\n",
      "data_11 MythenV 1280\n",
      "data_12 MythenV 1280\n"
     ]
    }
   ],
   "source": [
    "#Define all modules as single detectors of class MythenV. \n",
    "# Each one has a mask defined from dummy-values in the dataset\n",
    "\n",
    "modules = {}\n",
    "for name, ds in data.items():\n",
    "    one_module = MythenV()\n",
    "    mask = ds[0]<0\n",
    "    #discard the first 20 and last 20 pixels as their intensities are less reliable\n",
    "    mask[:20] = True\n",
    "    mask[-20:] = True\n",
    "    one_module.mask = mask.reshape(-1,1)\n",
    "    modules[name] = one_module\n",
    "\n",
    "for k,v in modules.items():\n",
    "    print(k, v.name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.1 ms ± 25.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "[[287.06072343   0.5       ]]\n"
     ]
    }
   ],
   "source": [
    "# Define a peak-picking function based on the dataset-name and the frame_id:\n",
    "\n",
    "def peak_picking(module_name, frame_id,  \n",
    "                 threshold=500):\n",
    "    \"\"\"Peak-picking base on find_peaks_cwt from scipy plus \n",
    "    second-order tailor exapention refinement for sub-pixel resolution.\n",
    "    \n",
    "    The half-pixel offset is accounted here, i.e pixel #0 has its center at 0.5\n",
    "    \n",
    "    \"\"\"\n",
    "    module = modules[module_name]\n",
    "    msk = module.mask.ravel()\n",
    "    \n",
    "    spectrum = data[module_name][frame_id]\n",
    "    guess = find_peaks_cwt(spectrum, [20])\n",
    "    \n",
    "    valid = numpy.logical_and(numpy.logical_not(msk[guess]), \n",
    "                               spectrum[guess]>threshold)\n",
    "    guess = guess[valid]\n",
    "    \n",
    "    #Based on maximum is f'(x) = 0 ~ f'(x0) + (x-x0)*(f''(x0))\n",
    "    df = numpy.gradient(spectrum)\n",
    "    d2f = numpy.gradient(df)\n",
    "    bad = d2f==0\n",
    "    d2f[bad] = 1e-10 #prevent devision by zero. Discared later on\n",
    "    cor = df / d2f\n",
    "    cor[abs(cor)>1] = 0\n",
    "    cor[bad] = 0\n",
    "    ref = guess - cor[guess] + 0.5 #half a pixel offset\n",
    "    x = numpy.zeros_like(ref) + 0.5 #half a pixel offset\n",
    "    return numpy.vstack((ref,x)).T\n",
    "\n",
    "%timeit peak_picking(ds_names[0], 93)\n",
    "print(peak_picking(ds_names[0], 93))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy (keV):  17.027082549190933 \n",
      "Wavelength (A):  7.281587849134994e-11\n",
      "LaB6 Calibrant with 109 reflections at wavelength 7.281587849134994e-11\n"
     ]
    }
   ],
   "source": [
    "nrj = h5[\"/LaB6_17keV_att3_1555/CRISTAL/Monochromator/energy\"][0]\n",
    "wl = hc / nrj *1e-10\n",
    "print(\"Energy (keV): \",nrj, \"\\nWavelength (A): \",wl)\n",
    "\n",
    "LaB6 = get_calibrant(\"LaB6\")\n",
    "LaB6.wavelength = wl\n",
    "print(LaB6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#This cell defines the transformation of coordinates for a simple goniometer mounted vertically.\n",
    "\n",
    "trans = ExtendedTransformation(dist_expr=\"dist\", \n",
    "                                   poni1_expr=\"poni1\", \n",
    "                                   poni2_expr=\"poni2\", \n",
    "                                   rot1_expr=\"rot1\", \n",
    "                                   rot2_expr=\"pi*(offset+scale*angle)/180.\", \n",
    "                                   rot3_expr=\"0.0\", \n",
    "                                   wavelength_expr=\"hc/nrj*1e-10\", \n",
    "                                   param_names=[\"dist\", \"poni1\", \"poni2\", \"rot1\", \"offset\", \"scale\", \"nrj\"], \n",
    "                                   pos_names=[\"angle\"], \n",
    "                                   constants={\"hc\": hc})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Approximated offset for the first module:  82.79994445106844\n"
     ]
    }
   ],
   "source": [
    "def get_position(idx):\n",
    "    \"Returns the postion of the goniometer for the given frame_id\"\n",
    "    return position[idx]\n",
    "\n",
    "#Approximate offset for the module #0 at 0°\n",
    "print(\"Approximated offset for the first module: \",get_position(36))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXhU1cHH8RMIZEGUgGyCRkFRixTFla0oKqBYFRVrC0gFpSD1pVYwWFHUSBQ3ZBMBFcsqpSpiEFkUWWURUAmLLEY22VQ2IYSQ/N4/MMNMZpCQOjm5534/z3OfJjd37j2THq7zzczcMQIAAADgG8b2AAAAAAAUHwIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAAAA8BECAAAAAPARAgAAAADwEQIAAILMnj1bxhj17dv3f96XMUbNmjX7n/cDAMBviQAAYJUxRsYYxcTEaMOGDSfc7tprrw1sO2rUqKiNx8sBsHv3blWrVk3GGDVu3Pg32Wf+7+PXlszMzN/kWF6Sl5enjz76SN27d1f9+vVVoUIFxcXFqU6dOnr44Ye1c+fOiLdr3Ljxr/4uc3JyIt5u5cqVuvPOO3XmmWcGjvPUU08pKysrmncTgKMIAABWGWMUGxsrY4wee+yxiNusW7cuZDsCILI77rhDp512WlQCIDk5WX379o247Nmz5zc5lpccOHBAxhjFxcXpxhtv1COPPKIePXqoXr16MsaoWrVqEYO2cePGiomJOeHvMjc3N+w2CxYsUEJCgsqUKaO//OUvevTRR9WgQQMZY/SHP/xB2dnZxXGXATiEAABglTFGNWrU0BVXXKFq1apF/Avoo48+KmOM2rRpQwCcwL///W8ZY/Taa69FJQB4KVOorKwspaWlhcVPbm6uOnfuLGOMbr/99rDbNW7cWKVLly70cXJyclSnTh0ZYzR16tTA+qNHj+r222+XMUYvvvhi0e8IAF8iAABYlR8Aw4cPlzFG77//fsjPjxw5oipVqqhRo0Z6/PHHTxgA69atU4cOHXTWWWepTJkyql69ujp06KB169ZFPO6OHTvUqVMnValSRfHx8apfv77efvvtEwZAcnKykpOTI+6rb9++MsZo9uzZYfct0gPnnJwcDR06VFdffbXKly+vhIQEXXrppRo8eHDEvwCfzKZNm3TGGWeoc+fOyszMtBoANWrUUO3atbV371716NFD55xzjmJjY5WamipJ2rp1q5566ik1bNhQVatWVZkyZXTWWWfpL3/5i9asWRO2v/Xr18sYo86dO2vdunVq06aNkpKSVL58ebVs2VKrVq2SJO3cuVOdO3dWtWrVFBcXpyuvvFKfffZZxDHm5ORo8ODBuuqqq3TaaacpISFBl112mYYOHaq8vLyi/aKCbNq0ScYYVahQIexnpxoA06dPlzFGzZs3D/vZN998I2OMatWq9T+NF4D/EAAArMoPgP3796tcuXJq3bp1yM//+9//Bh70nygAlixZotNPP10xMTG67bbb9Nhjj6lNmzaKiYnR6aefriVLloRsv3v3btWqVUvGGDVp0kS9e/dWx44dFR8fr1tvvTWqAXDkyBG1bNlSxhhdeOGF+tvf/qYePXro97//vYwxat++fWF/dZKOvRb9uuuu0znnnKN9+/aViACoUaOGLr30UtWqVUtdunTRI488ojFjxkiSxowZo8TERLVu3VoPPvigevXqpdtvv12xsbEqX768Vq5cGbK//AC47rrrlJSUpKZNm+qf//xn4NmgypUra/369Tr33HN12WWXqUePHmrfvr1iY2MVHx+vLVu2hOwvOztbN9xwg4wxuuiii9S1a9eQl+789a9//Z9/Z99//72MMTrzzDPDfpYfAO+8847S0tL08ssva9q0aTp8+HDEfaWkpMgYoxdeeCHiz/Pn8Xffffc/jxuAfxAAAKzKDwBJ6ty5s0qXLh3yoK1ly5Y6/fTTdfDgwYgBkJeXp4suukjGGI0dOzZk3++8807ggXbwX9YfeOABGWP0j3/8I2T7pUuXBt5nEK0AyN/273//u44ePRpYf/ToUXXq1EnGGE2ePDnicSJ55ZVXFBMTo5kzZ0pS1ALgRO8BKHifa9SoIWOMWrZsqYMHD4btb8eOHTpw4EDY+uXLlysxMVG33HJLyPr8ADDG6Pnnnw/52ZNPPiljjJKSkvTggw+G/H/81ltv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K3C+WZr5oxo994mSU9L1z4kEAOCy4ACoSwCUaASARbYCoP80AgBA9MxeuzNwvvniu5/UpP+xAHj4nRW2hwYgiggA7yAALCrOSXsfAQCgmHyyZkfgfLNi8x794YVPlZySrh4TltseGoAoaj1oLgHgEQSARbYC4HkCAEAUzVh1PAC+3rJX1704W8kp6XpoPAEAuKzlgDkEgEcQABYV56T961uLCQAAxWLayu2B803Gtr1q/tKxAHhw3DLbQwMQRTe+8hkB4BEEgEW2AuC5jwgAANEz9evvA+ebNdv36YaXjz0o6Db2C9tDAxBF1/0S+wRAyUcAWFSck7YjAQCgmHz41bbA+eabHfvV4pVjLwv422gCAHBZ/vt9klPS9bsnphXLMQmAoiEALLIVAGkfrY768QD41+QVWwPnm/U7D6jVq8feGPjAv5faHhqAKGr8/CcEgEcQABYRAABc9N7yLYHzzbe7f9bNA48FQOe3l9geGoAouuaXD/0jAEo+AsCi4py0974ZFABTCQAA0TPpi+MBsOmHg4Frg983igAAXHbFszMJAI8gACwiAAC4aOKSzYHzzZafDurWIfOVnJKujm8ttj00AFHU4JkZBIBHEAAWFeek7UAAACgmExZvCpxvtu05pNuHHguADm8SAIDLfv/UdALAIwgAi2wFQD8CAEAUjV30XeB8s2Nflu54bYGSU9LVbuQi20MDEEV1n/yYAPAIAsCi4py07d9YRAAAKBajF2YGzje79h/WXcOOBcCfR3xue2gAouiiPtMC//YvJgBKNALAIlsB8Gz6qqgfD4B/jZr/beB88+PP2br79YVKTknXn4YvtD00AFF0wb8+IgA8ggCwiAAA4KI35h0PgL0Hj+ie4Z8rOSVdbV8nAACX1XpsKgHgEQSARbYCIPVDAgBA9IycuzFwvtmXdUR/GXksAO58bYHtoQGIkry8vMC/ewKg5CMALCIAALjo9c82BM43Px/OCZx/2gydb3toAKIk52guAeAhBIBFxTlp2408HgDPEAAAomjo7PWB803WkaOBzyG5bQgBALjqcM5RAsBDCACLCAAALhr8ybrA+SY7J1d/fetYANw6eJ7toQGIkoPZOQSAhxAAFhXnpM1/DW5ySrqenkIAAIiel6evVXJKus7tna68vDx1GrVEySnpaj1oru2hAYiSfVlHQgLgoj4EQElGAFj0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jBkYMGCA3hu///Wvf6Ffv36saTfcbIfVGNvNrk6zt7pZPTMyMnD33XfDwcFB51n+N2pqasLQoUMxY8YMneHz5s2Dra0tqqqqpGGbNm2CEAJxcXHSsKysLPTv3x9OTk7//ytEZokBoI9zdHSUjmC5ublhwoQJsLKy0ruW2JItXrwYQgi88sor8PT01GvtFAoF7r77btjb22PHjh1wdnbGkCFD8MQTT+hdc9p+LepHH30EDw8P6Y2Whw4dutWrZzY6ehFYQkICrK2tdd6yOnDgQOnxq9ez9L48f/58CCHw+uuvY+fOnXB0dIQQQudFPaxn17W/o2LYsGFYt24ddu7ciWnTpkEIgQ8++EAajzXt3A8//ID169fjk08+gRACs2bNwvr167F+/XrU1NQAMM52szvT7E1+r551dXUYOXIk+vXrh02bNun9rbrx7HX7NfyvvfYaPDw8pJfcbdy4UWe8uro62NvbY9iwYdiyZQtcXFwwcuRI/OlPf5Ke4kZ9DwNAH6dUKrF06VIMHz4c1tbWGDt2LPz9/U29WGblueeeu+nlKtdLS0vDlClTYGtri7vuugtz585FaWmp3jTVajWcnZ1hZ2eHAQMGwMHBAQcPHrxVq2SWOgoAABAeHo4JEyZg4MCBuOeee7Bw4cIOrzm19L7c0tKCr7/+GnZ2drj99tsxevToDp8sw3p2nUwmw7Rp0zB8+HDcfvvtGDNmDDZu3Kh3TTVr2jE7O7tOt5sFBQXSeMbYbnZ1mr3J79WzoKDgpn+r3n33Xb1puru74+GHH8aAAQNgb28PFxcXvfssAO0ZmNdeew2DBw/GHXfcgRkzZiA3N/cWrDWZCgMAEREREZEFYQAgIiIiIrIgDABERERERBaEAYCIiIiIyIIwABARERERWRAGACIiIiIiC8IAQERERERkQRgAiIiIiIgsCAMAEREREZEFYQAgIiIiIrIgDABERERERBaEAYCIiIiIyIIwABARERERWRAGACIiIiIiC8IAQERERERkQRgAiIiIiIgsCAMAEREREZEFYQAgIiIiIrIgDABERERERBaEAYCIiIiIyIIwABARERERWRAGACIiIiIiC8IAQERERERkQRgAiIiIiIgsCAMAEREREZEFYQAgIiIiIrIgDABERERERBaEAYCIiIiIyIIwABARERERWRAGACIiIiIiC8IAQERERERkQRgAiIiIiIgsCAMAEREREZEFYQAgIiIiIrIgDABERERERBaEAYCIiIiIyIIwABARERERWRAGACIiIiIiC/J/CH1z+dr5gdYAAAAASUVORK5CYII=\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a7d0c4b4220f4d849673cba3b0d6be22",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(IntSlider(value=4, description='module_id', max=9), IntSlider(value=250, description='fr…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#This interactive plot lets one visualize any spectra acquired by any module\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "line = ax.plot(data[ds_names[0]][250])[0]\n",
    "ligne = plt.Line2D(xdata=[640,640], ydata=[-500, 1000], figure=fig, linestyle=\"--\", color='red', axes=ax)\n",
    "ax.add_line(ligne)\n",
    "ax.set_title(\"spectrum\")\n",
    "fig.show()\n",
    "\n",
    "def update(module_id, frame_id):\n",
    "   spectrum = data[ds_names[module_id]][frame_id]\n",
    "   line.set_data(numpy.arange(spectrum.size), spectrum)\n",
    "   ax.set_title(\"Module %i, Frame %i\"%(module_id, frame_id))\n",
    "   \n",
    "   fig.canvas.draw()\n",
    "\n",
    "    \n",
    "interactive_plot = widgets.interactive(update, \n",
    "                                       module_id=(0, len(data)-1), \n",
    "                                       frame_id=(0, data[ds_names[0]].shape[0]-1))\n",
    "display(interactive_plot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02\n"
     ]
    }
   ],
   "source": [
    "#Work with the first module corresponding to:\n",
    "name = ds_names[0]\n",
    "print(name)\n",
    "ds = data[name]\n",
    "module = modules[name]\n",
    "\n",
    "#Use the previous widget to select:\n",
    "## the index where the beam-center is in the middle of the module\n",
    "zero_pos = 36\n",
    "\n",
    "## The frame index where the first LaB6 peak enters the right-hand side of the spectrum\n",
    "peak_zero_start = 74\n",
    "\n",
    "## The frame index where this first LaB6 leaves the spectrum or the second LaB6 peak appears:\n",
    "peak_zero_end = 94\n",
    "\n",
    "# The frames between peak_zero_start and peak_zero_end will be used to calibrate roughly the goniometer \n",
    "# and used later for finer peak extraction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 0 geometries labeled: .\n"
     ]
    }
   ],
   "source": [
    "param0 = {\"dist\": 0.72, \n",
    "          \"poni1\": 640*50e-6, \n",
    "          \"poni2\": 4e-3, \n",
    "          \"rot1\":0, \n",
    "          \"offset\": -get_position(zero_pos), \n",
    "          \"scale\":1, \n",
    "          \"nrj\": nrj}\n",
    "\n",
    "#Lock enegy for now and a couple of other parameters\n",
    "bounds0 = {\"nrj\": (nrj, nrj),\n",
    "           \"dist\": (0.71, 0.73),\n",
    "           \"poni2\": (4e-3, 4e-3),\n",
    "           \"rot1\": (0,0),\n",
    "           \"scale\":(1,1), \n",
    "          }\n",
    "\n",
    "gonioref0 = GoniometerRefinement(param0, \n",
    "                                 get_position, \n",
    "                                 trans, \n",
    "                                 detector=module, \n",
    "                                 wavelength=wl, \n",
    "                                 bounds=bounds0\n",
    "                                 )\n",
    "goniometers = {name:  gonioref0} \n",
    "print(gonioref0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 20 geometries labeled: data_02_0074, data_02_0075, data_02_0076, data_02_0077, data_02_0078, data_02_0079, data_02_0080, data_02_0081, data_02_0082, data_02_0083, data_02_0084, data_02_0085, data_02_0086, data_02_0087, data_02_0088, data_02_0089, data_02_0090, data_02_0091, data_02_0092, data_02_0093.\n",
      "Residual error before fit:\n",
      "6.737384336276989e-07\n"
     ]
    }
   ],
   "source": [
    "# Extract the frames where only the peak zero from LaB6 is present.\n",
    "\n",
    "for i in range(peak_zero_start, peak_zero_end):\n",
    "    cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "    peak = peak_picking(name, i)\n",
    "    if len(peak)!=1: \n",
    "        continue\n",
    "    cp.append([peak[0]], ring=0)\n",
    "    img = ds[i].reshape((-1,1)) #Images are vertical ... transpose the spectrum\n",
    "    sg = gonioref0.new_geometry(\"%s_%04i\"%(name,i), \n",
    "                                image=img, \n",
    "                                metadata=i, \n",
    "                                control_points=cp, \n",
    "                                calibrant=LaB6)\n",
    "    sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "\n",
    "print(gonioref0)\n",
    "print(\"Residual error before fit:\")\n",
    "print(gonioref0.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 6.737384336276989e-07\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -8.27999445e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.490988798391531e-11\n",
      "     jac: array([ 1.58414573e-07,  2.91897065e-08,  5.74391333e-11, -6.39962716e-10,\n",
      "        3.42479452e-11,  1.40698490e-07, -1.59997085e-11])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19994724e-01,  3.14085784e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -8.27999519e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.490988798391531e-11\n",
      "GonioParam(dist=0.7199947243683663, poni1=0.03140857835160603, poni2=0.004, rot1=0.0, offset=-82.7999518865857, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03140857835160603\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.19994724e-01,  3.14085784e-02,  4.00000000e-03,  0.00000000e+00,\n",
       "       -8.27999519e+01,  1.00000000e+00,  1.70270825e+01])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#First refinement:\n",
    "gonioref0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Number of peaks found and used for refinement\n",
      "1203\n",
      "Residual error before fitting:  3.118672809442448e-06\n"
     ]
    }
   ],
   "source": [
    "#Here we extract all spectra for peaks,\n",
    "# If there are as many peaks as expected from the theoritical LaB6. perform the assignment.\n",
    "\n",
    "#Peaks from LaB6:\n",
    "tths = LaB6.get_2th()\n",
    "\n",
    "for i in range(peak_zero_end, ds.shape[0]):\n",
    "    peak = peak_picking(name, i)\n",
    "    ai=gonioref0.get_ai(get_position(i))\n",
    "    tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "    tth_low = tth[20]\n",
    "    tth_hi = tth[-20]\n",
    "    ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "    valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "    cnt = valid_peaks.sum()\n",
    "    if (len(peak) ==  cnt):    \n",
    "        cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "        #revert the order of assignment if needed !!\n",
    "        if tth_hi < tth_low:\n",
    "            peak = peak[-1::-1]\n",
    "        for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "            #print(p,r)\n",
    "            cp.append([p], ring=r)\n",
    "        img = ds[i].reshape((-1,1))\n",
    "        sg = gonioref0.new_geometry(\"%s_%04i\"%(name,i), \n",
    "                                    image=img, \n",
    "                                    metadata=i, \n",
    "                                    control_points=cp, \n",
    "                                    calibrant=LaB6)\n",
    "        sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "        #print(sg.label, len(sg.geometry_refinement.data))\n",
    "\n",
    "#print(gonioref0)\n",
    "print(\" Number of peaks found and used for refinement\")\n",
    "print(sum([len(sg.geometry_refinement.data) for sg in gonioref0.single_geometries.values()]))\n",
    "print(\"Residual error before fitting: \", gonioref0.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 3.118672809442448e-06\n",
      "[ 7.19994724e-01  3.14085784e-02  4.00000000e-03  0.00000000e+00\n",
      " -8.27999519e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.734250432678472e-06\n",
      "     jac: array([-5.58224542e-08, -3.65304231e-10,  3.63058044e-06, -2.62495314e-06,\n",
      "        6.31729336e-10,  1.53969062e-04,  9.87797637e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 65\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.23095347e-01,  3.18453768e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -8.27999466e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.734250432678472e-06\n",
      "GonioParam(dist=0.7230953467494027, poni1=0.03184537681912273, poni2=0.004, rot1=0.0, offset=-82.79994661694376, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7199947243683663 --> 0.7230953467494027\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.23095347e-01,  3.18453768e-02,  4.00000000e-03,  0.00000000e+00,\n",
       "       -8.27999466e+01,  1.00000000e+00,  1.70270825e+01])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 2.734250432678472e-06\n",
      "[ 7.23095347e-01  3.18453768e-02  4.00000000e-03  0.00000000e+00\n",
      " -8.27999466e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.6891723022540698e-06\n",
      "     jac: array([-5.14464347e-07, -1.24120874e-07,  5.95670514e-07, -4.28660144e-07,\n",
      "       -9.28110921e-10, -8.53860058e-08, -1.60467593e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 36\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.23096248e-01,  3.20537111e-02,  3.98485468e-03,  1.09479202e-05,\n",
      "       -8.27999440e+01,  9.99415047e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.6891723022540698e-06\n",
      "GonioParam(dist=0.7230962484347616, poni1=0.03205371109950758, poni2=0.003984854679408886, rot1=1.0947920188414968e-05, offset=-82.7999439896301, scale=0.9994150470263444, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9994150470263444\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.23096248e-01,  3.20537111e-02,  3.98485468e-03,  1.09479202e-05,\n",
       "       -8.27999440e+01,  9.99415047e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref0.set_bounds(\"poni1\", -1, 1)\n",
    "gonioref0.set_bounds(\"poni2\", -1, 1)\n",
    "gonioref0.set_bounds(\"rot1\", -1, 1)\n",
    "gonioref0.set_bounds(\"scale\", 0.9, 1.1)\n",
    "gonioref0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'data_02': (array([9.50000113e-04, 2.85000034e-03, 4.75000057e-03, ...,\n",
      "       9.49952613e+01, 9.49971613e+01, 9.49990613e+01]), array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,\n",
      "       1.27163419e+08, 1.30591592e+08, 1.33665230e+08]))}\n"
     ]
    }
   ],
   "source": [
    "# Perform the azimuthal intgration of all data for the first module:\n",
    "\n",
    "mg = gonioref0.get_mg(position)\n",
    "mg.radial_range = (0, 95)\n",
    "images = [i.reshape(-1, 1) for i in ds]\n",
    "res_mg = mg.integrate1d(images, 50000)\n",
    "results={name: res_mg}\n",
    "print(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOy9fZhVZdX4v2cY5UVUEr0e5JseFUURTBMQwRQznxQtfKwQSB/h0szIckwHTqU4okk/I6UH1CQDTMV8yZh8JiXTyADBF8ByiL6+MIKJCSgiAsPr+v1Bc74zzuw9Z+977fu+Z5/P57rOxcXa973W2ufscH2a2fsEAgAAAAAAJUPgugEAAAAAALAHAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAAAAAAUEIgAAAAAAAAJQQCAAAAAABQQiAAAAAAAAAlBAIAAAAAAFBCIAAAAAAAACUEAgAA4BFjxoyRIAikvr7edSvtkqFDh0oQ8J82AIAo+FcSAEBEHnvsMfnOd74jn/vc52T//feXIAjk4osvDl0/f/58CYKg2atz587So0cPOf3006WqqkqWLVsWuw8tAZg9e7YEQSCzZ882yuMbbb0/CAAAQNvwryQAgIiceOKJEgSBdO3aVY477riiBSCXy0l1dbVUV1fLD37wA/nGN74hJ598ckEKvv71r8vmzZuL7mPt2rWycuVK2bFjh9H5lKoArF69WlauXGm3KQCAdgYCAAAgIn/605/ktddekz179hSG+2IEYOjQoa0eX758uZxwwgkSBIGce+65KXUdTqkKAAAAtA0CAADwCTQEQETkvffek0MOOUSCIJC5c+cWVbu1Abe+vl6CIJAxY8ZIfX29jBw5Urp37y4dO3aU/v37y//+7/82y9H4azCtvZrm3blzp9x1110yaNAg2X///aVz585y0kknyfTp02X37t0tetuzZ4/87Gc/kz59+kjHjh2lZ8+ectVVV8mHH34ouVxOcrlcs/VNJeSpp56SoUOHygEHHNDsV3Tmzp0rF198sRxzzDHSpUsX6dKli5x88snyP//zPy16CDunpnXDfgVo9+7d8vOf/1wGDBgg++23n3Tp0kUGDBggd999d6vn2vjZrl+/Xq644grp0aOH7LvvvnL88cfLrFmzWvvoAADaDQgAAMAn0BIAEZEbbrhBgiCQr33ta0XVjhKAM888Uw455BAZNGiQXHPNNXLppZdKx44dpby8XP70pz8V1s+ePVsuuOACCYJALrjggsKvKFVXV8vGjRtFRGTHjh1yzjnnSBAEcuyxx8qVV14plZWV8pnPfEaCIJBLLrmkRW/jxo2TIAikZ8+e8t3vfleuu+46OeaYY2TgwIHSs2fPUAE4//zzpUOHDvKlL31JJkyYICNHjiysOfbYY6VPnz5yySWXSD6fl29961vSu3fvVnuorq4u/KpWZWVl4ZymTp1aWBMmAF//+tclCAI57LDDpLKyUq655hrJ5XKFX9P6JEEQyIknnii9e/eWfv36yXe+8x254oorpFu3bhIEgdx3333RHyQAgMcgAAAAn0BTAJ555hkJgkAOP/zwompHCUAQBHLTTTc1Wz9v3jwJgkCGDRvWLN7WrwBVV1dLEATyne98R3bt2lWI79q1Sy677DIJgkBqamoK8b/85S8SBIH07t27IBEiItu3b5fTTz+9xf8T37SHsrIyeeqpp1rt44033mgR2717t1x66aUSBIEsWbKkzfenKa0JwEMPPSRBEMhnP/vZZvdjfPzxx9K/f38JgkDmzJnTbE/j+3355Zc3e39WrFghHTp0kD59+rRaHwCgPYAAeMLmzZvlxhtvlHPOOUc+9alPGf/u7tq1ayWfz8uZZ54pXbt2lSAIZP78+a2u/cMf/iCXXXaZ9O3bV8rLy1v8Rxyg1NAUgJUrVxaeEFQMUQKQy+WaDaONHH744dK9e/dmsSgB2L17txx00EHSo0cP2blzZ4vjGzdulLKyMhkxYkQhdvnll0sQBPKrX/2qxfqFCxdGCsB//dd/tXHWLVm6dKkEQSCTJk1qFk8iAGeffbYEQSB/+MMfWqxvFLTPf/7zzeJBEEiXLl1k06ZNLfacccYZEgRBrJu7AQB8AgHwhMb/wB9++OFy5plnGgtA43ByzDHHyODBgyMFYMyYMdKpUycZMmSIfPrTn0YAoOTRFIC///3vhWGyGKIE4IILLmh1z2mnnSbl5eXNYlEC0CglxxxzTLNfD2r66tKli/Tr16+wp/HJRm+++WaLfLt27ZKKiopQAZg8eXLo+W7YsEHy+byccMIJst9++7X4/f5vfvObbb4/TWlNAA466CApLy+X7du3t1i/c+dO6dChg3Tr1q1ZvPFXgFrj4osvliAIZM2aNaHnBQDgMwiAJzQ0NMi7774rIiIvvfSSsQB89NFH8v7774vI3uebRwnAO++8U3jk4Pnnn48AQMmTxq8AFfu/q7ZuAm6N1obeKAFo/H/s23odccQRhT29evWSIAjk448/brWH//iP/wgVgLCbZjdu3ChHHnmkBEEgp5xyiowbN06uv/56qa6ulsrKylbPOYkAdOjQQQ4++OBW1zf2XlZW1iwW9dnyJCIAaO8gAB7SlgA8+eST8rnPfU66dOkiXbt2lfPOO0/q6upC87UlAE1BAAB0BeD666+XIAjkoosuKqq2DQF49dVXJQgCufDCC4vqSUTks5/9bOKfAIT9WzZlyhQJgkCqq6tbHHv++efVBKDxJwCtfbdC408ADjzwwGZxBAAAsgwC4CFRAnD//fdLWVmZnHvuuTJ9+nS57bbb5IgjjpBu3bqF/scIAQCIh+ZjQA8++GAJgkB+97vfFVVbSwDuv/9+CYJAfvnLX7ZYv3PnTunWrZsceuihRX/hWOONwUnuAQgTgCuvvFKCIJC//e1vLY79+Mc/bvWcG/to7eZhkdbfiy984QsSBIE888wzLdY/++yzofcAIAAAkFUQAA8JE4DNmzdLt27d5IorrmgW/9e//iUHHnhgi3gjCABAPDQE4JVXXik8UvO8884ruraWAPz+97+XIAjkxhtvbHXPxIkTJQgC+da3viVbt25tcXzt2rWyYsWKwt///Oc/F54C9OGHHxbi27dvL9wUG1cAGof8adOmNYsvW7as8H0Bnzzn8ePHSxAEzR572pTW3os5c+ZIEAQycOBA2bJlSyG+ZcsWGThwoARBIA8++GCzPQgAAGQZBMBDwgTgt7/9beE/fOvXr2/2+uIXvyhHH310q/kQAIC2mTt3rowZM0bGjBlTeD7+UUcdVYhdd911zdY3CkAulyvcOPvDH/5QvvnNbxYeLRkEe59lH/Z7862hJQAffPCBdOnSRQ444AC56qqr5JZbbpFbbrmlMLzv2LFDhg8fLkEQyP/5P/9H/vu//1u+//3vy2WXXSann366lJeXy49//ONmOb/5zW8W1l999dVy3XXXSe/evQvfA3DkkUc2W9+WALzzzjuFX8+58MILZcKECXLhhRfKPvvsIyNHjmz1nBsfe9qrVy+ZMGGC3HLLLTJ9+vTI90JE5KKLLirc13DNNdfI9773vcL9B02/l6ARBAAAsgwC4CFhAnDbbbdF3rB3wAEHtJoPAQBom8bn4oe9Pvm/i0YBaPrq1KmT9OjRQ04//XSpqqqS5cuXx+5DSwBERJ566ik59dRTmz1dp2nePXv2yP333y9nnXWWfOpTn5J99tlHevbsKaeddprceuutLZ5ys3v3brnjjjvk2GOPlX333VcOPfRQ+fa3vy0ffvihdO3atcVTc9oSAJG9z9X/8pe/LIccckjhW4DvvffeyHO+/fbb5bjjjpN99923xWcT9U3Ad911l/Tv3186d+4snTt3lpNPPlnuvPPOyG8Cbg0EAADaOwiAh4QJQOOPyx944AH54x//2OIVNuAjAACQJq+99poEQSCjRo1y3QoAABQBAuAhYQLw6KOPShC0/mU2USAAAKDBu+++2+L/Ld+yZYucd955EgSBPPLII446AwCAOCAAHhImAJs2bZIDDjhAhg4d2uqTO9atW9dqPgQAADTI5/Ny+OGHy6WXXir5fF7GjBkjn/70pyUIAhk2bJjs2bPHdYsAAFAECIBHTJ8+XW655RYZN26cBEEgX/nKV1rcuDdnzhwpLy+Xfv36yY9+9COZMWOGXH/99XLSSSfJVVdd1Sxf495Ro0ZJEARy2WWXFWJN+etf/1qIH3vssdKtW7fC35944glr5w8AfvPMM8/IueeeKz169JB9991XunTpIieddJL85Cc/KfpxogAA4B4EwCNyuVzoDYhNbzabP3++nHPOOXLggQdKp06dpFevXjJ27Fh5+eWXm+WLuqGxKY036rX2CrvpEAAAAADaJwgAAAAAAEAJgQAAAAAAAJQQCAAAAAAAQAmBAAAAAAAAlBAIgEM2btwoNTU1snTpUqmrq+PFixcvXrx48eIV47V06VKpqamRjRs3uh7r2hUIgENqamoin9TDixcvXrx48eLFq+1XTU2N67GuXYEAOGTp0qWFi9a1QWfiNWCA1AXB3j99zm+aJ+n+uPvSej/j5C1mrU9r0vxsTWprH9O+BrXimrVt96+x1rTnNPoy7dVVzFaPJjXa43uYQt2afwvA0qVLXY917QoEwCF1dXUSBIHU1dW5biUbDB0qEgR7//Q5v2mepPvj7kvr/YyTt5i1Pq1J87M1qa19TPsa1Ipr1tbIESeusda05zT6Mu3VVcxWjyY1bPTn6txixOr+LQDMUvFAAByCACiT1sCqnT/NIVFzX1rvp8bw4uuaND9bk9rax7SvQa24Zm2NHBpDfRoDa5y8ae0vtlefhldbdTwbsBGAbIIAOAQBUCatgVU7f5pDoua+tN5PjeHF1zVpfrYmtbWPaV+DWnHN2ho5NIb6NAbWOHnT2l9srz4Nr7bqeDZgIwDZBAFwCAKgTFoDq3b+NIdEzX1pvZ8aw4uva9L8bE1qax/Tvga14pq1NXJoDPVpDKxx8qa1v9hefRpebdXxbMBGALIJAuAQBECZtAZW7fxpDoma+9J6PzWGF1/XpPnZmtTWPqZ9DWrFNWtr5NAY6tMYWOPkTWt/sb36NLzaquPZgI0AZBMEwCEIgDLLl4vMn7/3T5/zm+ZJuj/uvrTezzh5i1nr05o0P1uT2trHtK9Brbhmbdv9a6w17TmNvkx7dRWz1aNJDRv9uTq3GLG6WbOYpRKAADgEAQAAAABIDrNUMhAAh3DRAgAAACSHWSoZCIBDuGgBAAAAksMslQwEwCFctMpUVu69Oaiy0u/8pnmS7o+7L633M07eYtb6tCbNz9aktvYx7WtQK65Z23b/GmtNe06jL9NeXcVs9WhSw0Z/rs4tRqxuwABmqQQgAA5BAJSJ8yQHl/lN8yTdH3dfWu+n6RM3fF6T5mdrUlv7mPY1qBXXrK2RI05cY61pz2n0Zdqrq5itHk1q2OjP1bnFiPEUoGQgAA5BAJRJa2DVzp/mkKi5L633U2N48XVNmp+tSW3tY9rXoFZcs7ZGDo2hPo2BNU7etPYX26tPw6utOp4N2AhANkEAHIIAKJPWwKqdP80hUXNfWu+nxvDi65o0P1uT2trHtK9BrbhmbY0cGkN9GgNrnLxp7S+2V5+GV1t1PBuwEYBsggA4BAFQJq2BVTt/mkOi5r603k+N4cXXNWl+tia1tY9pX4Nacc3aGjk0hvo0BtY4edPaX2yvPg2vtup4NmAjANkEAXAIAqBMWgOrdv40h0TNfWm9nxrDi69r0vxsTWprH9O+BrXimrU1cmgM9WkMrHHyprW/2F59Gl5t1fFswEYAsgkC4BAEQJm0Blbt/GkOiZr70no/NYYXX9ek+dma1NY+pn0NasU1a2vk0Bjq0xhY4+RNa3+xvfo0vNqq49mAjQBkEwTAIQiAMmkNrNr50xwSNfel9X5qDC++rknzszWprX1M+xrUimvW1sihMdSnMbDGyZvW/mJ79Wl4tVXHswEbAcgmCIBDEABl0hpYRWTnrt3y996fFQkC2X3GGWbJEAAEIEl+BMCsPgKQLC8CkG6PJjVs9IcAZBYEwCEIgDKzZ4tUV+/9U5m5y/4p1513jUw9bbQ8M+H/M0tm2mfS/XH3pfV+xslbzFqf1qT52ZrU1j6mfQ1qxTVra+SIE9dYa9pzGn2Z9uoqZqtHkxo2+nN1bjFidePGMUslAAFwCALQfpi5YJXk8rWSy9dK9e/4vAAAAHyAWSoZCIBDuGjbDwgAAACAfzBLJQMBcAgXbfsBAQAAAPAPZqlkIAAO4aJVJsV7AGYuWFW4B2Du1T8yS8Y9ANwDkCQ/9wCY1ecegGR5uQcg3R5Natjoj3sAMgsC4BAEQJkUnwI0c8EqWXxYP5EgkPp+A8yS8RQgngKUJD9PATKrz1OAkuXlKUDp9mhSw0Z/PAUos5ScAGzevFluvPFGOeecc+RTn/qUBEEgs2P8v0gbN26UK664Qg4++GDp0qWLnHnmmbJ06dJEvSAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE1KTgDq6+slCAI5/PDD5cwzz4wlALt375YhQ4bIfvvtJzfddJPceeedcvzxx8v+++8vr732WuxeEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJiUnAA0NDfLuu++KiMhLL70USwAeeeQRCYJAHnvssUJs3bp10q1bNxk9enTsXhAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYlJwBNiSsAI0aMkP/4j/+Q3bt3N4t/85vflC5dukhDQ0Os+giAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEIIYAHH300TJs2LAW8V/+8pcSBIH87W9/i1UfAVAGAdDdhwDEX4MARIMAhMcRAP+HV1t1PBuwEYBsggDEEID99ttPLrvsshbx3//+9xIEgcybNy9073vvvSd1dXXNXjU1NVy0miAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QgBgCUF5eLuPGjWsRf/bZZyUIApk7d27o3urqagn+fZF+8sVFq0SKAjBrIQKgBgKQLD8CYFYfAUiWFwFIt0eTGjb6QwAyCwIQQwD4CYDnVFbu/YehslI99ayFq2Rm/+Gy+LB+svjLl5glM+0z6f64+9J6P+PkLWatT2vS/GxNamsf074GteKatW33r7HWtOc0+jLt1VXMVo8mNWz05+rcYsTqBgxglkoAAhBDALgHoHSZuWCV5PK1ksvXSvXv+LwAAAB8gFkqGQhADAH42te+1upTgK644gqeApRxEAAAAAD/YJZKBgIQIgBr166VlStXyo4dOwqxhx9+WD75PQDr16+Xbt26yciRI2PX56JtPyAAAAAA/sEslYySFIDp06fLLbfcIuPGjZMgCOQrX/mK3HLLLXLLLbfIhx9+KCIiY8aMkSAIpL6+vrBv165dcuqpp0rXrl1l0qRJctddd0nfvn1l//33l3/84x+x++CiVWb5cpH58/f+qczMBatk2NhpMnL0ZPn51N+YJTPtM+n+uPvSej/j5C1mrU9r0vxsTWprH9O+BrXimrVt96+x1rTnNPoy7dVVzFaPJjVs9Ofq3GLE6mbNYpZKQEkKQC6XC30iT+PA35oAiIh88MEHcvnll0v37t2lS5cuMnToUHnppZcS9YEAKBPnSQ4x4TGgipg+ccPnNWl+tia1tY9pX4Nacc3aGjnixDXWmvacRl+mvbqK2erRpIaN/lydW4wYTwFKRkkKgC8gAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKpCgAsxYiAGogAMnyIwBm9RGAZHkRgHR7NKlhoz8EILMgAA5BAJRBAHT3IQDx1yAA0SAA4XEEwP/h1VYdzwZsBCCbIAAOQQCUQQB09yEA8dcgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEAlEEAdPchAPHXIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BANoPMxeskly+VnL5Wqn+HZ8XAACADzBLJQMBcAgXbfsBAQAAAPAPZqlkIAAO4aJtPyAAAAAA/sEslQwEwCFctO0HBAAAAMA/mKWSgQA4hItWmRRvAuaLwBThJuBk+bkJ2Kw+NwEny8tNwOn2aFLDRn/cBJxZEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAMqkKAB8D4AiCECy/AiAWX0EIFleBCDdHk1q2OgPAcgsCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYIgEMQAGUQAN19CED8NQhANAhAeBwB8H94tVXHswEbAcgmCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYIgEMQAGWWLxeZP3/vn8rMWrhKho2dJiNHT5afT/2NWTLTPpPuj7svrfczTt5i1vq0Js3P1qS29jHta1Arrlnbdv8aa017TqMv015dxWz1aFLDRn+uzi1GrG7WLGapBCAADkEA2g8zF6ySXL5Wcvlaqf4dnxcAAIAPMEslAwFwCBdt+wEBAAAA8A9mqWQgAA7hom0/IAAAAAD+wSyVDATAIVy0ylRW7r05qLJSPfXMBatkZv/hsviwfrL4y5eYJTPtM+n+uPvSej/j5C1mrU9r0vxsTWprH9O+BrXimrVt96+x1rTnNPoy7dVVzFaPJjVs9Ofq3GLE6gYMYJZKAALgEARAmThPcogJTwFSxPSJGz6vSfOzNamtfUz7GtSKa9bWyBEnrrHWtOc0+jLt1VXMVo8mNWz05+rcYsR4ClAyEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAysyeLVJdvfdPZWYtXCXXnXeNTD1ttMy9+kdmyUz7TLo/7r603s84eYtZ69OaND9bk9rax7SvQa24Zm2NHHHiGmtNe06jL9NeXcVs9WhSw0Z/rs4tRqxu3DhmqQQgAA5BANoPsxaukly+VnL5Wqn+HZ8XAACADzBLJQMBcAgXbfsBAQAAAPAPZqlkIAAO4aJtPyAAAAAA/sEslQwEwCFctMpwD4DuPu4BiL+GewCi4R6A8Dj3APj/++u26nj2O/bcA5BNEACHIADK8BQg3X08BSj+Gp4CFA1PAQqP8xQg/59gY6uOZ0/Z4SlA2QQBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZBAFwCAKgDAKguw8BiL8GAYgGAQiPIwD+D6+26ng2YCMA2QQBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZBAFwCAKgDAKguw8BiL8GAYgGAQiPIwD+D6+26ng2YCMA2QQBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqBMZeXefxgqK9VTz1q4Smb2Hy6LD+snz3/pErNkpn0m3R93X1rvZ5y8xaz1aU2an61Jbe1j2tegVlyztu3+Ndaa9pxGX6a9uorZ6tGkho3+XJ1bjFjdgAHMUglAAByCALQfZi9cJbl8reTytXJjzauu2wEAAABhlkoKAuAQLtr2AwIAAADgH8xSyUAAHMJF236YhQAAAAB4B7NUMhAAh3DRKrN8ucj8+Xv/VGbWwlUybOw0GTl6svx86m/Mkpn2mXR/3H1pvZ9x8haz1qc1aX62JrW1j2lfg1pxzdq2+9dYa9pzGn2Z9uoqZqtHkxo2+nN1bjFidbNmMUslAAFwCAKgTJwnOcSEpwApYvrEDZ/XpPnZmtTWPqZ9DWrFNWtr5IgT11hr2nMafZn26ipmq0eTGjb6c3VuMWI8BSgZCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYIgEMQAGUQAN19CED8NQhANAhAeBwB8H94tVXHswEbAcgmCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYIgEMQAGUsCcCqvgiAEQhAsvwIgFl9BMVZ0FMAACAASURBVCBZXgQg3R5NatjoDwHILAiAQxAAZVIUgNkIgB4IQLL8CIBZfQQgWV4EIN0eTWrY6A8ByCwIgEMQAGUQAN19CED8NQhANAhAeBwB8H94tVXHswEbAcgmCIBDEID2w+yFqySXr5VcvlZurHnVdTsAAAAgzFJJQQAcwkXbfkAAAAAA/INZKhkIgEO4aNsPCAAAAIB/MEslAwFwCBdt+2EWAgAAAOAdzFLJKDkBaGhokAkTJsihhx4qnTp1klNOOUWefvrpovb+8Y9/lDPPPFO6d+8uBx54oAwcOFDuv//+xL1w0SqT4k3AfA+AItwEnCw/NwGb1ecm4GR5uQk43R5Natjoj5uAM0vJCcCoUaOkoqJCqqqqZMaMGTJ48GCpqKiQBQsWRO773e9+J2VlZTJkyBCZPn263HnnnXLGGWdIEARyxx13JOoFAVAGAdDdhwDEX4MARIMAhMcRAP+HV1t1PBuwEYBsUlIC8MILL0gQBDJlypRCbNu2bdKrVy8ZPHhw5N7//M//lJ49e0pDQ0MhtnPnTunVq5d85jOfSdQPAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZpKQEYPz48dKhQwfZtGlTs/jkyZMlCAJZs2ZN6N5BgwZJ3759W40PGjQoUT8IgDIIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGSTkhKAs88+W/r06dMi/swzz0gQBPLEE0+E7s3n8xIEgdxwww3y+uuvyxtvvCE333yzdOjQQR5//PFE/SAAylgSAL4IzBAEIFl+BMCsPgKQLC8CkG6PJjVs9IcAZJaSEoC+ffvKWWed1SK+YsUKCYJA7rnnntC9H3/8sVx00UVSVlYmwb8vti5dukhNTU1Rtd977z2pq6tr9qqpqeGi1SRFAeCbgBVBAJLlRwDM6iMAyfIiAOn2aFLDRn8IQGYpKQE46qijZNiwYS3ib775pgRBIFOnTg3du3PnTrnhhhtkxIgR8utf/1oefPBBOeOMM6Rr166yePHiNmtXV1cXxOGTLy5aJRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYlJQAmPwG48sor5cQTT5Tdu3cXYjt27JBjjjlGTjnllDZr8xMACyAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE1KSgCS3gOwfft2qaiokB/+8Ictjl199dVSXl4u27dvj90P9wAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANikpAaiqqmr1KUC33nqrRD0FaO3atRIEgeTz+RbHxo0bJ0EQyNatW2P3gwAos3y5yPz5e/9UZvbCVTJs7DQZOXqy3H3HY2bJTPtMuj/uvrTezzh5i1nr05o0P1uT2trHtK9Brbhmbdv9a6w17TmNvkx7dRWz1aNJDRv9uTq3GLG6WbOYpRJQUgKwZMkS+eT3ADQ0NMjRRx/d7FGeq1evlpUrVxb+vmvXLunWrZv07t272f/Tv3nzZvn0pz8txx13XKJ+EID2w+yFqySXr5VcvlZurHnVdTsAAAAgzFJJKSkBEBEZMWKEVFRUyPjx42XGjBkyZMgQqaiokOeee66wZujQoRIEzd+aH/3oRxIEgXz2s5+VqVOnyk9/+lPp06ePBEEgDz74YKJeuGjbDwgAAACAfzBLJaPkBGDbtm1SVVUlPXr0kI4dO8rAgQNl3rx5zda0JgAiInPmzJFTTjlFunXrJp07d5ZBgwbJb37zm8S9cNG2H2YhAAAAAN7BLJWMkhMAn+CiVaaycu/NQZWV6qlnLVwlM/sPl8WH9ZPFX77ELJlpn0n3x92X1vsZJ28xa31ak+Zna1Jb+5j2NagV16xtu3+NtaY9p9GXaa+uYrZ6NKlhoz9X5xYjVjdgALNUAhAAhyAAysR5kkNMmn4TcH0/ngJkhOkTN3xek+Zna1Jb+5j2NagV16ytkSNOXGOtac9p9GXaq6uYrR5Natjoz9W5xYjxFKBkIAAOQQCUsSQAPAbUEAQgWX4EwKw+ApAsLwKQbo8mNWz0hwBkFgTAIQiAMikKAN8DoAgCkCw/AmBWHwFIlhcBSLdHkxo2+kMAMgsC4BAEQBkEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCyCQLgEARAGQRAdx8CEH8NAhANAhAeRwD8H15t1fFswEYAsgkC4BAEQBkEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCyCQLgEARAmdmzRaqr9/6pnXrhKrnuvGtk6mmj5bffvcUw2WyzPpPuj7svrfczTt5i1vq0Js3P1qS29jHta1ArrllbI0ecuMZa057T6Mu0V1cxWz2a1LDRn6tzixGrGzeOWSoBCIBDEID2w+yFqySXr5VcvlZurHnVdTsAAAAgzFJJQQAcwkXbfkAAAAAA/INZKhkIgEO4aNsPCAAAAIB/MEslAwFwCBetMtwDoLuPewDir+EegGi4ByA8zj0A/v/+uq06nv2OPfcAZBMEwCEIgDI8BUh3H08Bir+GpwBFw1OAwuM8Bcj/J9jYquPZU3Z4ClA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKFNZufcfhspK9dSzF66Smf2Hy+LD+snzX7rELJlpn0n3x92X1vsZJ28xa31ak+Zna1Jb+5j2NagV16xtu3+NtaY9p9GXaa+uYrZ6NKlhoz9X5xYjVjdgALNUAhAAhyAA7YfZC1dJLl8ruXyt3Fjzqut2AAAAQJilkoIAOISLtv3QVAAmIgAAAABewCyVDATAIVy07Yf7FtUjAAAAAJ7BLJUMBMAhXLTKLF8uMn/+3j+VuW9RvQwbO01Gjp4sd93xmFky0z6T7o+7L633M07eYtb6tCbNz9aktvYx7WtQK65Z23b/GmtNe06jL9NeXcVs9WhSw0Z/rs4tRqxu1ixmqQQgAA5BAJSJ8ySHmPAUIEVMn7jh85o0P1uT2trHtK9BrbhmbY0cceIaa017TqMv015dxWz1aFLDRn+uzi1GjKcAJQMBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZBAFwCAKgDAKguw8BiL8GAYgGAQiPIwD+D6+26ng2YCMA2QQBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZBAFwCAKgDAKguw8BiL8GAYgGAQiPIwD+D6+26ng2YCMA2QQBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZBAFwCALQfrhvUb3k8rWSy9fKxJpXXbcDAAAAwiyVFATAIVy07QcEAAAAwD+YpZKBADiEi7b9gAAAAAD4B7NUMhAAh3DRth8QAAAAAP9glkoGAuAQLlplUrwJ+L5F9dwErAU3ASfLz03AZvW5CThZXm4CTrdHkxo2+uMm4MyCADgEAVAmRQHgKUCKIADJ8iMAZvURgGR5EYB0ezSpYaM/BCCzIAAOQQCUQQB09yEA8dcgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEAlEEAdPchAPHXIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BAJRBAHT3IQDx1yAA0SAA4XEEwP/h1VYdzwZsBCCbIAAOQQCUQQB09yEA8dcgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEAlEEAdPchAPHXIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BAJRJUQB4DKgiCECy/AiAWX0EIFleBCDdHk1q2OgPAcgsCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAZZYvF5k/f++fyty3qF6GjZ0mI0dPlrvueMwsmWmfSffH3ZfW+xknbzFrfVqT5mdrUlv7mPY1qBXXrG27f421pj2n0Zdpr65itno0qWGjP1fnFiNWN2sWs1QCEACHIADth/sW1UsuXyu5fK1MrHnVdTsAAAAgzFJJQQAcwkXbfkAAAAAA/INZKhkIgEO4aNsPCAAAAIB/MEslAwFwCBetMpWVe28OqqxUT33fonqZ2X+4LD6snzz/pUvMkpn2mXR/3H1pvZ9x8haz1qc1aX62JrW1j2lfg1pxzdq2+9dYa9pzGn2Z9uoqZqtHkxo2+nN1bjFidQMGMEslAAFwCAKgTJwnOcSEpwApYvrEDZ/XpPnZmtTWPqZ9DWrFNWtr5IgT11hr2nMafZn26ipmq0eTGjb6c3VuMWI8BSgZCIBDEABlUhQAvghMEQQgWX4EwKw+ApAsLwKQbo8mNWz0hwBkFgTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgDIIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGQTBMAhCIAyKQoA9wAoggAky48AmNVHAJLlRQDS7dGkho3+EIDMggA4BAFQBgHQ3YcAxF+DAESDAITHEQD/h1dbdTwbsBGAbIIAOAQBUAYB0N2HAMRfgwBEgwCExxEA/4dXW3U8G7ARgGyCADgEAVAGAdDdhwDEX4MARIMAhMcRAP+HV1t1PBuwEYBsggA4BAFQZvZskerqvX8qc9+iernuvGtk6mmj5fHv3mKWzLTPpPvj7kvr/YyTt5i1Pq1J87M1qa19TPsa1Ipr1tbIESeusda05zT6Mu3VVcxWjyY1bPTn6txixOrGjWOWSgAC4BAEoP1w36J6yeVrJZevlYk1r7puBwAAAIRZKikIgEO4aNsPCAAAAIB/MEslAwFwCBdt+wEBAAAA8A9mqWSUnAA0NDTIhAkT5NBDD5VOnTrJKaecIk8//XTR+x9++GE59dRTpUuXLnLggQfK4MGD5dlnn03UCxetMtwDoLuPewDir+EegGi4ByA8zj0A/v/+uq06nv2OPfcAZJOSE4BRo0ZJRUWFVFVVyYwZM2Tw4MFSUVEhCxYsaHNvdXW1lJWVyYgRI+See+6R6dOny5VXXin3339/ol4QAGV4CpDuPp4CFH8NTwGKhqcAhcd5CpD/T7CxVcezp+zwFKBsUlIC8MILL0gQBDJlypRCbNu2bdKrVy8ZPHhw5N7FixdLWVmZ3HHHHWr9IADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTUpKAMaPHy8dOnSQTZs2NYtPnjxZgiCQNWvWhO4dOXKkHHroobJ7927Zs2ePbN682bgfBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCySUkJwNlnny19+vRpEX/mmWckCAJ54oknQvcefPDBMnz4cJk6dap0795dgiCQHj16yPTp0xP3gwAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANikpAejbt6+cddZZLeIrVqyQIAjknnvuaXXfBx98IEEQSPfu3aVr164yZcoUeeSRR+Tcc8+N3NeU9957T+rq6pq9ampquGg1QQB09yEA8dcgANEgAOFxBMD/4dVWHc8GbAQgm3grAOeee67MmTNHtm7dqpbzqKOOkmHDhrWIv/nmmxIEgUydOrXVfWvWrJHg3xfYww8/XIjv3r1bjj/+ePn0pz/dZu3q6upCjk++uGiVQAB09yEA8dcgANEgAOFxBMD/4dVWHc8GbAQgm3grAL1795aysjLZf//95dJLL5U//vGPsmfPHqOcSX8CsH79egmCQPbZZx/ZtWtXs2OTJk2SIAhk9erVkbX5CYAFEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJt4KgIjIiy++KFdffbX06NFDysvLpWfPnlJVVSXLly9PlC/pPQC7d++WTp06SY8ePVoc+/nPfy5BEMgrr7wSux/uAdClvt9AkSCQrUM+p54bAVAEAUiWHwEwq48AJMuLAKTbo0kNG/0hAJnFawFoZPfu3TJv3jy55JJLZP/995fy8nLp27ev3HbbbfL2228XnaeqqqrVpwDdeuut0tZTgE499VTp0KGDbN++vVl84sSJEgSBvPPOO/FOShAATbZu3yUz+w+XxYf1k5qhI9Tz37eovpD/+S9dYpassnLvP2CVlXb3x91n2qdG3mLW+rQmzc/WpLb2Me1rUCuuWdt2/xprTXtOoy/TXl3FbPVoUsNGf67OLUasbsAAZqkEtAsBaMrGjRvloosukrKyMikrK5MOHTrIF77wBamtrW1z75IlS+ST3wPQ0NAgRx99tAwaNKgQW716taxcubLZ3qlTp0oQBPKLX/yiENu2bZscddRRcvzxxyc6FwRAj80NOyWXr5VcvlaOn/iUev77FtUX8k+seVU9PwAAAMSHWSoZ7UYAFixYIFdeeaV0795dysrK5IQTTpApU6bIz372M/nMZz4j5eXlMnHixDbzjBgxQioqKmT8+PEyY8YMGTJkiFRUVMhzzz1XWDN06FAJguZvzdatW6Vv376yzz77SFVVlUybNk0GDhwoHTp0kCeffDLROXHR6oEARLNz1275y2vrZOOW7W0vBgAAaCcwSyXDawFYsWKF/OAHP5AjjjhCysvLpUePHnLttde2eg/AFVdcIQcddFCbObdt2yZVVVXSo0cP6dixowwcOFDmzZvXbE1rAiCy90beMWPGyEEHHSQdO3aUQYMGtdgbBy5aPRCAaH4yb6Xk8rVy+m1/ct0KAACAGsxSyfBWAE488UQpLy+Xzp07y6hRo+TJJ5+U3bt3h65/6KGHpKyszGKH5nDR6rG5YacMGztNRo6eLF+54k71/Pctqi/kv/OOx8ySLV8uMn/+3j8t7c/lawv9F73PtE+NvMWs9WlNmp+tSW3tY0nPM24+zfoaudLsX2Otac9p9GXaq6uYrR5Natjoz9W5xYjVzZrFLJUAbwVg6NCh8stf/rLFDbthbNmyRd56662Uu9IFAdBjc8POwlN6XsidoJ7/V8+376cA5fK1hf6L3mfap0beYtb6tCbNz9aktvaxpOcZN59mfY1cafavsda05zT6Mu3VVcxWjyY1bPTn6txixHgKUDK8FYDVq1dHfgnY1q1b23z2vu8gAHogANEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJt4KwDl5eUyZ86c0OMPP/ywlJeXW+xIHwRAj7QFoL1/DwACYGkNAhANAhAeRwD8H15t1fFswEYAsom3AlBWVhYpAA888IBUVFRY7EgfBEAPBCAaBMDSGgQgGgQgPI4A+D+82qrj2YCNAGQTrwRg06ZNsnr1alm9erWUlZXJtGnTCn9v+vrrX/8q559/vhx22GGuWzYCAdADAYgGAbC0BgGIBgEIjyMA/g+vtup4NmAjANnEKwG46aabpLy8vKhXWVmZ3Hrrra5bNgIB0AMBiAYBsLQGAYgGAQiPIwD+D6+26ng2YCMA2cQrAXj++eflpz/9qUyZMkXKysrk61//uvz0pz9t9rr99tvlnnvukZdeesl1u8YgAHp8tG0HAhABAmBpDQIQDQIQHkcA/B9ebdXxbMBGALKJVwLQlJtuukn+9re/uW4jVRAAPRCAaBAAS2sQgGgQgPA4AuD/8GqrjmcDNgKQTbwVgFIAAdCDXwGKBgGwtAYBiAYBCI8jAP4Pr7bqeDZgIwDZxBsBmDRpktx8882Fb/udNGlSm6+bb77ZcddmIAB6bG7YKbl8reTytXL8xKfU89+3qL6Qf2LNq+r506ax91y+1nUrAAAAajBLJcMbASgrK5Py8nLZvn174e9tvfgeAGjEpgDcMBcBAAAA8AFmqWR4IwClCBetHmkLwK+eRwAAAAB8g1kqGQiAQ7ho9fho2w4EIAIEAAAAsgizVDLalQBs2bJFZs6cKXfffbe89dZbrtsxhotWj6ZPAXoxhZuAf/U8NwGrwU3AyfJzE7BZfW4CTpaXm4DT7dGkho3+uAk4s3grAJdddpn07du38Pft27fLCSecUPj9/27dusmyZcscdmgOAqBH2o8BRQAUQQCS5UcAzOojAMnyIgDp9mhSw0Z/CEBm8VYAjjzySJk4cWLh77Nnz5aysjJ56KGHZMWKFXLcccfJBRdc4LBDcxAAPdJ+DCgCoAgCkCw/AmBWHwFIlhcBSLdHkxo2+kMAMou3AtC5c2eZOXNm4e8XXHCBDBw4sPD322+/XXr06OGiNTUQAD0QgGgQAEtrEIBoEIDwOALg//Bqq45nAzYCkE28FYCDDz5Ybr/9dhER2blzpxx44IFyww03FI7/4he/kM6dO7tqTwUEQA8EIBoEwNIaBCAaBCA8jgD4P7zaquPZgI0AZBNvBeCLX/yiHHfccbJs2TK56aabpLy8XF544YXC8Xw+L0cccYTDDs1BAPTgHoBoEABLaxCAaBCA8DgC4P/waquOZwM2ApBNvBWAl156SQ466CApLy+XsrIyGTFiRLPjvXv3losvvthRdzogAHrwFKBoEABLaxCAaBCA8DgC4P/waquOZwM2ApBNvBUAEZF169ZJTU2N/PnPf24W37hxo/zsZz+T5cuXO+pMBwRAD34CEA0CYGkNAhANAhAeRwD8H15t1fFswEYAsonXApB1EAA9uAcgGgTA0hoEIBoEIDyOAPg/vNqq49mAjQBkE+8F4KOPPpJXX31V/vKXv8hzzz3X4tWeQQD02NywU4aNnSYjR0+Wr1xxp3r++5+vL+SffsejZsmWLxeZP3/vn5b25/K1hf6L3mfap0beYtb6tCbNz9aktvaxpOcZN59mfY1cafavsda05zT6Mu3VVcxWjyY1bPTn6txixOpmzWKWSoC3ArBhwwYZNWqU7LPPPlJeXt7iVVZWJuXl5a7bNAIB0GNzw07J5Wsll6+V4yc+pZ7//ufrC/mvn/s39fxp09h7Ll/ruhUAAAA1mKWS4a0AXHjhhVJRUSHXXnutzJ07V/785z+3+mrPcNHq8dG2HQhABAgAAABkEWapZHgrAPvtt5+MHz/edRupwkWrR1MB6HvjPPX8CAAAAIB/MEslw1sBOOSQQ+Suu+5y3UaqcNHq8dG2HTKz/3BZfFg/uf+UC9Tz3/98fSH/wvMNHz9bWbn3JqbKSmv7c/naQv9F7zPtUyNvMWt9WpPmZ2tSW/tY0vOMm0+zvkauNPvXWGvacxp9mfbqKmarR5MaNvpzdW4xYnUDBjBLJcBbAfje974nZ599tus2UgUB0CPtpwDdv/itQv43eQqQGaZP3PB5TZqfrUlt7WNJzzNuPs36GrnS7F9jrWnPafRl2qurmK0eTWrY6M/VucWI8RSgZHgrAIsWLZKTTz5ZzjnnHHn88cflxRdflKVLl7Z4tWcQAD0QgGgQAEtrEIBoEIDwOALg//Bqq45nAzYCkE28FYCysrLCi6cAQVsgANEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJt4KwD33XdfUa/2DAKgR9rfBHx/ky8CQwAMQQCS5UcAzOojAMnyIgDp9mhSw0Z/CEBm8VYASgEEQI+mAvBiygLANwEbggAky48AmNVHAJLlRQDS7dGkho3+EIDM0i4EYO3atfLKK6/Ixx9/7LoVVRAAPfgJQDQIgKU1CEA0CEB4HAHwf3i1VcezARsByCZeC0BNTY0ce+yxhd/7f/bZZ0VEZP369XLSSSfJb3/7W8cdmoEA6ME9ANEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJt4KwBPPPGElJeXy2mnnSaTJk2SsrKyggCIiJx//vkyfPhwhx2agwDogQBEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBs4q0ADBgwQM4880wREdmwYUMLAfjRj34khx12mKv2VEAA9Pho2w657rxrZOppo+WHw69Vz3//4rcK+R/7zi1myWbPFqmu3vunpf25fG2h/6L3mfapkbeYtT6tSfOzNamtfSzpecbNp1lfI1ea/WusNe05jb5Me3UVs9WjSQ0b/bk6txixunHjmKUS4K0AdOrUSe6++24RaV0A7r33XunYsaOr9lRAAPT4aNsOyeVrJZevlb43zlPPf//itwr5f/jbv6nnT5vG3nP5WtetAAAAqMEslQxvBeCggw6SKVOmiEjrAvCDH/xAevbs6ao9Fbho9bApAD9AAAAAALyAWSoZ3grAV7/6VenXr5/s3LmzhQC8++67cvDBB8vYsWMdd2kGF60eTQXg+IlPqed/AAEAAADwDmapZHgrAP/4xz+kW7ductJJJ8mtt94q5eXlMmHCBLn++uvl4IMPlu7du0t9fb3rNo3gotUj7XsAHuAeAD24ByBZfu4BMKvPPQDJ8nIPQLo9mtSw0R/3AGQWbwVAZO+A/IUvfEHKy8ulrKys8Pr85z8vf//73123ZwwCoEfa3wPwgOJTgN4fMFgkCGTL4M8lS8BTgPxdw1OAouEpQOFxngLk/xNsbNXx7Ck7PAUom3gtAI188MEH8uKLL8qSJUtk3bp1rttRAwHQY1M7EoBCn4cn7BMB8HcNAhANAhAeRwD8H15t1fFswEYAsom3AjBp0iR59dVXQ4/X1dXJpEmTeX3m1QAAIABJREFULHakDwKgR1MBeLGdCMDiw/olS4AA+LsGAYgGAQiPIwD+D6+26ng2YCMA2cRbASgrK5M5c+aEHn/44YelvLzcYkf6IAB6IADRIACW1iAA0SAA4XEEwP/h1VYdzwZsBCCbtFsBuPvuu6VTp04WO9IHAdADAYgGAbC0BgGIBgEIjyMA/g+vtup4NmAjANnEKwF47rnnZNKkSTJp0iQpKyuTr371q4W/N31973vfk549e8rAgQNdt2wEAqBHe7wHAAEoIq9Pw30xaxCAaBCA8DgC4P/waquOZwM2ApBNvBKAm266qfCkn08++eeTr759+8qSJUtct2wEAqAHAhANAmBpDQIQDQIQHkcA/B9ebdXxbMBGALKJVwKwdetW2bBhg6xfv17KyspkxowZsmHDhmav999/X7Zt2+a6VRUQAD0+3IoARIEAWFqDAESDAITHEQD/h1dbdTwbsBGAbOKVADTlrbfeki1btrhuI1UQAD0+3LpDZvYfLosP6yf3D/ov9fwPLH6rkH/h+Rcb5WrMM7P/8GQJKiv3/gNYWVn0lly+tlC36H0J6qjnLWatT2tM37Oo/Sa1tY8lPc+4+TTra+RKs3+NtaY9p9GXaa+uYrZ6NKlhoz9X5xYjVjdgALNUArwVgFIAAdDjw607JJevlVy+VvreOE89/4NL3irk//7jfzPK1Zgnl69V6s7PmgAAAGnDLJUMbwVgz549cs8998jAgQOle/fuUl5e3uLVoUMH120awUWrBwLgX00AAIC0YZZKhrcCUFVVJeXl5XLyySdLZWWl3HTTTa2+2jNctHo0FYDjJz6lnh8BAAAA8A9mqWR4KwCHHHKIjBgxwnUbqcJFq8eHW3fIsLHTZOToyfKVK+5Uz//gkrcK+f/np48a5WrMM2zstGQJli8XmT9/759FksvXFuoWvS9BHfW8xaz1aY3pexa136S29rGk5xk3n2Z9jVxp9q+x1rTnNPoy7dVVzFaPJjVs9Ofq3GLE6mbNYpZKgLcC0LVrV5kxY4brNlIFAdDjwy3pPgXowSU8BUgN0ydu+LzG9D2L2m9SW/tY0vOMm0+zvkauNPvXWGvacxp9mfbqKmarR5MaNvpzdW4xYjwFKBneCsAFF1wg3/jGN1y3kSoIgB5NBSCNbwJGABRBAJLlRwDM6iMAyfIiAOn2aFLDRn8IQGbxVgDeeecd6devn9x6662yYcMG1+2kAgKgR9oCMGfJagRACwQgWX4EwKw+ApAsLwKQbo8mNWz0hwBkFm8FoGvXrtKlS5fCE3+6dOki+++/f7PXAQcc4LpNIxAAPRCAaBAAS2sQgGgQgPA4AuD/8GqrjmcDNgKQTbwVgDFjxsjYsWPbfLVnEAA9uAcgGgTA0hoEIBoEIDyOAPg/vNqq49mAjQBkE28FoBRAAPTYuGU7AhABAmBpDQIQDQIQHkcA/B9ebdXxbMBGALKJVwKwdOnS2K/2DAKgR1MB4CbgliAAltYgANEgAOFxBMD/4dVWHc8GbAQgm3glAGVlZa1+429rr8a17RkEQI+0BYB7ABRBAJLlRwDM6iMAyfIiAOn2aFLDRn8IQGbxSgDuu+++2K/2DAKgBwIQDQJgaQ0CEA0CEB5HAPwfXm3V8WzARgCyiVcCUGogAHps3LJdcvlayeVrpe+N89Tzz1myupD/+4//1ShXY55cvlapOz9rAgAApA2zVDIQAIdw0erRVACOn/iUen4EAAAAwD+YpZJRcgLQ0NAgEyZMkEMPPVQ6deokp5xyijz99NOx85x99tkSBIFcddVViXvhotUDAfCvJgAAQNowSyWj5ARg1KhRUlFRIVVVVTJjxgwZPHiwVFRUyIIFC4rO8fjjj8t+++2HAHiETQHI/wYBAAAA8AFmqWSUlAC88MILEgSBTJkypRDbtm2b9OrVSwYPHlxUjm3btskRRxwhN998MwLgER98nO73ADz0QpObgI/nJmAjuAk4WX5uAjarz03AyfJyE3C6PZrUsNEfNwFnlpISgPHjx0uHDh1k06ZNzeKTJ0+WIAhkzZo1beaYNGmSHH744bJ161YEwCMQgGgQAEtrEIBoEIDwOALg//Bqq45nAzYCkE1KSgDOPvts6dOnT4v4M888I0EQyBNPPBG5f/Xq1dK5c2f59a9/LSKCAHgEAhANAmBpDQIQDQIQHkcA/B9ebdXxbMBGALJJSQlA37595ayzzmoRX7FihQRBIPfcc0/k/q997WsyZMiQwt/jCMB7770ndXV1zV41NTVctEogANEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJuUlAAcddRRMmzYsBbxN998U4IgkKlTp4bu/dOf/iRlZWXy4osvFmJxBKC6ulqCf1+kn3xx0ZpjUwDeQADMQACS5UcAzOojAMnyIgDp9mhSw0Z/CEBmKSkBSPoTgJ07d0q/fv3k0ksvbRbnJwD+gABEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBsUlICkPQegJkzZ8o+++wjixYtkvr6+sIrCAK59NJLpb6+XrZs2RK7H+4B0INfAYoGAbC0BgGIBgEIjyMA/g+vtup4NmAjANmkpASgqqqq1acA3XrrrRL1FKCoX99pfM2dOzd2PwiAHghANAiApTUIQDQIQHgcAfB/eLVVx7MBGwHIJiUlAEuWLJFPfg9AQ0ODHH300TJo0KBCbPXq1bJy5crC31euXClz585t8QqCQM477zyZO3eurF27NnY/CIAe7yMAkSAAltYgANEgAOFxBMD/4dVWHc8GbAQgm5SUAIiIjBgxQioqKmT8+PEyY8YMGTJkiFRUVMhzzz1XWDN06FAJgrbfGh4D6g/vf7xdho2dJiNHT5YLr7hTPf9DL6wu5J/6k0eMcjXmGTZ2WrIEy5eLzJ+/988iyeVrC3WL3pegjnreYtb6tMb0PYvab1Jb+1jS84ybT7O+Rq40+9dYa9pzGn2Z9uoqZqtHkxo2+nN1bjFidbNmMUsloOQEYNu2bVJVVSU9evSQjh07ysCBA2XevHnN1iAA7Y/3P94uuXyt5PK10mfiU+r5H3phdSH/hMf+apSrMU8uX6vUnZ81AQAA0oZZKhklJwA+wUWrR9oC8GsEAAAAwDuYpZKBADiEi1YPBMC/mqZs2rZD5i77p7z/8XbXrQAAgKcwSyUDAXAIF60e73+8XWb2Hy6LD+snvzrlAvX8v35hdSH/gvMuNsrVmGdm/+HJElRW7r0JqrKy6C25fG2hbtH7EtTRzHvJL5fIzP7D5ZVeJ0avLSafrTWm71nUfpPa2seSnmfcfJr1NXKl2b/GWtOe0+jLtFdXMVs9mtSw0Z+rc4sRqxswgFkqAQiAQxAAPZo9Behw/acA/ZovAtOjyLxF91xMPltrTN+zqP0mtbWPJT3PuPk062vkSrN/jbWmPafRl2mvrmK2ejSpYaM/V+cWI8ZTgJKBADgEAdDDrgD0N8qFABSXFwFQrI0AIAAIgJ89mtSw0R8CkFkQAIcgAHps2NyQqgA8/CICoAYCkCw/AmBWHwFIlhcBSLdHkxo2+kMAMgsC4BAEQA8EIBoEwNIaBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgB4IQDQIgKU1CEA0CEB4HAHwf3i1VcezARsByCYIgEMQAD3SFgDuAVAEAUiWHwEwq48AJMuLAKTbo0kNG/0hAJkFAXAIAqAHAhANAmBpDQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAPfgUoGgTA0hoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAHhs2N8h1510jU08bLd//8vfU8z/84upC/oe/PckoV2Oe6867JlmC2bNFqqv3/lkkuXxtoW7R+xLU0cxbdM/F5LO1xvQ9i9pvUlv7WNLzjJtPs75GrjT711hr2nMafZn26ipmq0eTGjb6c3VuMWJ148YxSyUAAXAIAqDHhs0NksvXSi5fK8fe8KR6/odfXF3IP/6xV4xyNebJ5WuVuvOzpintsWcAALALs1QyEACHcNHqsR4B8K6mKe2xZwAAsAuzVDIQAIdw0eqBAPhX05T22DMAANiFWSoZCIBDuGj1WM89AJFwD4ClNdwDEA33AITHuQfA/99ft1XHs9+x5x6AbIIAOAQB0GN9yk8BeuTFNTwFSAueApQsP08BMqvPU4CS5eUpQOn2aFLDRn88BSizIAAOQQD0aCoASxCAFiAAltYgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEA9EAAokEALK1BAKJBAMLjCID/w6utOp4N2AhANkEAHIIA6IEARJNEADafeppIEMgeBKD4NQhANAhAeBwB8H94tVXHswEbAcgmCIBDEAA9EIBo4gpA029W3jBgcLI+w0AAkuVHAMzqIwDJ8iIA6fZoUsNGfwhAZkEAHIIA6LHuo5QF4KXSEoCFr68vrF/R+7PJ+gwDAUiWHwEwq48AJMuLAKTbo0kNG/0hAJkFAXAIAqBH6gJQYj8BQAASrkEAokEAwuMIgP/Dq606ng3YCEA2QQAcggDogQBEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBsggA4BAHQY91HDTKz/3BZfFg/mT3wAvX8j7y4ppD/L+d93ShXY56Z/YcnS1BZufcfwMrKorfk8rWFusXsW/j6+sL6J79wUbI+wyiy/6J7LiafrTUJPpui95vU1j6W9Dzj5tOsr5Erzf411pr2nEZfpr26itnq0aSGjf5cnVuMWN2AAcxSCUAAHIIA6LHuowbJ5Wsll6+VY65/Uj3/Iy+uKeSvevQVo1yNeXL5WqXu9GsufH19Yf3oXyxOubvWcfE+AQBA+4JZKhkIgEO4aPWwKQDXIQBWQAAAAKAtmKWSgQA4hItWj9QF4CUEwDYIAAAAtAWzVDIQAIdw0eqx7qMGGTZ2mowcPVmGXz5dPf8jL60p5L/9Jw8b5WrMM2zstGQJli8XmT9/759FksvXFuoWs2/h6+sL678/8VfJ+gyjyP6L7rmYfLbWJPhsit5vUlv7WNLzjJtPs75GrjT711hr2nMafZn26ipmq0eTGjb6c3VuMWJ1s2YxSyUAAXAIAqDHex9t43sAIuApQJbWJPhsit5vUlv7WNLzjJtPs75GrjT711hr2nMafZn26ipmq0eTGjb6c3VuMWI8BSgZCIBDEAA9EIBoEABLaxCAaBCA8DgC4P/waquOZwM2ApBNEACHIAB62BSA1xEAMxCAZPkRALP6CECyvAhAuj2a1LDRHwKQWRAAhyAAeqQtAI8iAHogAMnyIwBm9RGAZHkRgHR7NKlhoz8EILMgAA5BAPRAAKJBACytQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCAOiBAESDAFhagwBEgwCExxEA/4dXW3U8G7ARgGyCADgEAdADAYgGAbC0BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqAHNwFHE1cAFiEAydYgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEA9HhvEwIQBT8BsLQGAYgGAQiPIwD+D6+26ng2YCMA2QQBcAgCoMd7m7ZJLl8ruXytHPPDJ9XzP/rSmkL+ax95xShXY55cvlapO/2aC19fX1g/+heLU+6udVy8TwAA0L5glkoGAuAQLlo9EADdmk0FYNQMBAAAAPyEWSoZCIBDuGj1aCoAR//w9+r5S00AFiEAAADQDmCWSgYC4BAuWj0QAN2a/AQAAADaA8xSyUAAHMJFq0faNwHzGFBFlG8CXnPCQJEgkB2fO92sJjcBF3+Mm4D149wE7P8NrLbqeHaTLTcBZxMEwCEIgB5pC8BjL7+NAGihKAD/avK5/98+EZ8LAoAAIADJ8iIA6fZoUsNGfwhAZkEAHIIA6IEARJPV7wF4Y93mwprlR51oVhMBKP4YAqAfRwD8H15t1fFswEYAsgkC4BAEQI9/IQCRZPUnAAiAwl4EAAFIsy8EIH4dzwZsBCCbIAAOQQD0QACiQQCKqIkAFH8MAdCPIwD+D6+26ng2YCMA2QQBcAgCoEepCMDW7btk5bEniwSB7EEAEACNvQgAApBmXwhA/DqeDdgIQDZBAByCAOhhVQCibjYtAhMBmDLvH4X9mwYNKXof9wAUURMBKP4YAqAfRwD8H15t1fFswEYAsgkC4BAEQI9SEYBxD75c2L9hwOCi92X1JwBvIgDmexEABCDNvhCA+HU8G7ARgGyCADgEAdCjVH4FCAFoDj8BUNiLACAAafaFAMSv49mAjQBkEwTAIQiAHv/atE2GjZ0mI0dPlvMvm6ae/7GX3y7kn3Lbw0a5GvMMGxu/z3EPvlzY/5dHni56Xy5fW9gny5e3uX7R6+sL6/M3/Cp2n5EsXy4yf36bfRTT8xvrNhfWXH7NvWY1NdYUeW6J8pvU1j6W9Dzj5tOsr5Erzf411pr2nEZfpr26itnq0aSGjf5cnVuMWN2sWcxSCUAAHIIA6PHuh9skl6+VXL5WjvrB79XzP/by24X833sk4XD3bxrz5PK1sfeOe/Dlwt7av65Nreai19cX1o+asTh2nxoU0/Ob6zYX1pw5Zb695gAAwAuYpZKBADiEi1aPpgLQK20BeNgPAfjfv76TWs2F7UQA3kAAAABKGmapZCAADuGi1SNtAfgNAmAdBAAAANqCWSoZCIBDuGj1ePfDbTKz/3BZfFg/mTXgAvX8v3n57UL+54Z93ShXY56Z/YfH3jvuwZcL+1dd/I2i9+XytYV9UlnZ5vpFr68vrH/yrIti9xlJZeXem7ja6KOYnt9ct7mw5rHPfdWspsaaIs8tUX6T2trHkp5n3Hya9TVypdm/xlrTntPoy7RXVzFbPZrUsNGfq3OLEasbMIBZKgEIgEMQAD3e/fD/PQVocQpPAfpNiT0GtL18DwCPAVXYm+RY0vOMm0+zvkauNPvXWGvacxp9mfbqKmarR5MaNvpzdW4xYjwFKBkIgEMQAD1KRQC+/eBSYwEo5huE28tjQBEAhb0IAAKQZl8IQPw6ng3YCEA2QQAcggDoUSoCoPETAAQgxTUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAPZoJQILBui0eX1paAsCvACVcgwBEgwCExxEA/4dXW3U8G7ARgGyCADgEAdBj7YdbS0IAbP0KEAIQf82ePXtk3cmnIgBRIADhcQTA/+HVVh3PBmwEIJsgAA5BAPRoJgAp/ApQqQkAvwIUf83TK/5V6GXL4M+F54gCAUivPgKQLC8CkG6PJjVs9IcAZBYEwCEIgB78BCAaBKCImoZrxj/2SqGX904+NTxHFAhAevURgGR5EYB0ezSpYaM/BCCzIAAOQQD0SFsAfLkJmF8Bag4CoLAXAUAA0uwLAYhfx7MBGwHIJgiAQxAAPdZ+uFWuO+8amXraaKk67xr1/L95+e1C/jnfmmSUqzHPdQn6/PaDSwv7l998R9H7cvnawr7dM2e1uX7R6+sL6+8ec0PsPiOZPVukunrvnxE07Tls7ZvrNhfW/PiivFlNwzVVj75S6GXJjT8NzxFFVA9t9Zd0b5JjRX6Gxvk062vkSrN/jbWmPafRl2mvrmK2ejSpYaM/V+cWI1Y3bhyzVAJKTgAaGhpkwoQJcuihh0qnTp3klFNOkaeffrrNfY8//rhcdNFFcuSRR0rnzp2ld+/ecu2118rGjRsT94IA6LH2w62Sy9dKLl8rR36/Vj3/40vfLuS/5uHlRrka8+Ty8fv89oNLC3v/96/vJKq5a/eeNtcven19Yf2oGYtj96lBMe/Tm+s2F9YM/cmfLHbXkqpHXyn08siLa5z2AgBQKjBLJaPkBGDUqFFSUVEhVVVVMmPGDBk8eLBUVFTIggULIvd1795dTjjhBJk4caLce++9cvXVV8u+++4rxx13nGzdujVRL1y0ejQVgCMQgMiaO3ftbnN9exGAVes/RgAAAEoYZqlklJQAvPDCCxIEgUyZMqUQ27Ztm/Tq1UsGD47+fer58+e3iP3qV7+SIAjk3nvvTdQPF60epSgAT7yCACAAAAClDbNUMkpKAMaPHy8dOnSQTZs2NYtPnjxZgiCQNWvi/Uf7o48+kiAI5Nprr03UDxetHu9s3Gr0u/Vt8fhS/+4BWDYp2T0Au2bObHN9e7kHYNX6j5vcAzDBrKbiPQAv3Hh7eI4ouAcgvfrcA5AsL/cApNujSQ0b/XEPQGYpKQE4++yzpU+fPi3izzzzjARBIE888USsfK+99poEQSCTJ09O1A8CoMc7G0vvMaDr+yd7CtDuM4a2ub69PAVo1fqPvXkK0HWP8hSgNuEpQOFxngLk/xNsbNXx7Ck7PAUom5SUAPTt21fOOuusFvEVK1ZIEARyzz33xMp3+eWXS4cOHeS1115rc+17770ndXV1zV41NTVctEqkLQC/XeaJAMxBAJqCACjsRQAQgDT7QgDi1/FswEYAsklJCcBRRx0lw4YNaxF/8803JQgCmTp1atG55syZI0EQyIQJEb920ITq6moJ/n2RfvLFRWtOyQgAPwFoBgKgsBcBQADS7AsBiF/HswEbAcgmJSUAWj8B+Mtf/iKdOnWSc845R3bu3FnUHn4CkC4IQDQIQBE1EYDijyEA+nEEwP/h1VYdzwZsBCCblJQAaNwD8Morr0i3bt1kwIABsnnzZqN+uAdAj5IRAH4FqBkIgMJeBAABSLMvBCB+Hc8GbAQgm5SUAFRVVbX6FKBbb71VinkK0BtvvCE9evSQ3r17y7p164z7QQD0KBkB4CcAzUAAFPYiAAhAmn0hAPHreDZgIwDZpKQEYMmSJfLJ7wFoaGiQo48+WgYNGlSIrV69WlauXNls77vvvitHHXWU9OzZU+rr61X6QQD0sCkAryEAZiAAyXpAAMzqIwDJ8iIA6fZoUsNGfwhAZikpARARGTFihFRUVMj48eNlxowZMmTIEKmoqJDnnnuusGbo0KESBM3fmhNPPFEab/p94IEHmr2efvrpRL0gAHr8M2UBmLvsn34IgMqvAJ3R5vr2KADLEAAEQLO2Rg4EAAFAAFLvDwFIRskJwLZt26Sqqkp69OghHTt2lIEDB8q8efOarWlNAMKe4BMEgQyN+x/Bf4MA6PHPjVtlZv/hsviwfjJzwHD1/L9d9nYh//xzRxvlKvTZP36f356ztLD/ja9fXvS+XL62sG/nd69uc/2i19cX1j951kWx+4yksnLvP+CVlZHLmvYctnbV+o8Lax793FfMahquue7RVwq9/N9Rl4XniCKqh7b6S7o3ybEiP0PjfJr1NXKl2b/GWtOe0+jLtFdXMVs9mtSw0Z+rc4sRqxswgFkqASUnAD6BAOjxz41bJZevLby0+e2ytwu5K3+9zCiXSZ/fnrO0sPd3r7yTqGbDzl1trl/0+vrC+lEzFsfuU4Ni3qdV6z8urDnjJ38KXffXtzfKbU+tlH9t2pZGqyIicu0jrxR6eeSleN8qDgAAyWCWSgYC4BAuWj1KUQCeSCgA23ZkRwDqixSAxjVfnr4gjVZFJH0B2LZjl7yXosAAALRHmKWSgQA4hItWD5sCcLUnApD0JwBxBWDkjOdj96lBGgKQxrXRSFMBeFRZAHbv3iNn3/5nOfL7tbJ8zUbV3AAA7RlmqWQgAA7hotXjnxu3yrCx02Tk6MkybOw09fxzl/2zkP+2H//aKJdJn9+es7Swf/7Dfyh6Xy5fW9jX8OLLba5f9Pr6wvoJN9wXu89Ili8XmT9/758RNO05bG39+o8Lay675hehuYp6z4vpK2LNtY+8UqjzhwefCs8RRUj+puf5jWvujd+/9rEiP0PjfJr1NXKl2b/GWtOe0+jLtFdXMVs9mtSw0Z+rc4sRq5s1i1kqAQiAQxAAPXgKUDRZfQpQfZFPASrqPS+mr4g11z6S3lOAinrcaVT/2sfiPDXFJJ9mfY1cafavsda05zT6Mu3VVcxWjyY1bPTn6txixHgKUDIQAIcgAHqUigBc1UwAih8yYwvAG+1DAN7agAAU1T8CgAAgAH72aFLDRn8IQGZBAByCAOjx9gdbEIAITASg7hgEoJg1CEARIADhcQTA/+HVVh3PBmwEIJsgAA5BAPRAAKJpOkzvKkIAnn9jAwIQcw0CUAQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAPUpFAL7z0DIEoAmrN2zxRgDS/CZgBEChPgKQLC8CkG6PJjVs9IcAZBYEwCEIgB5pC0DNcgRADQQgdn4EQKE+ApAsLwKQbo8mNWz0hwBkFgTAIQiAHghANHEFYPGb7VAAjiwNAQgVHQRAt7ZGDgQAAUAAUu8PAUgGAuAQBECPUhGA7yIAzVjzPgJQVP8IAAKAAPjZo0kNG/0hAJkFAXAIAqAHAhBNVgWgFH8CwK8AJayPACTLiwCk26NJDRv9IQCZBQFwCAKgx9sfbJFcvrbw0qZm+T8Lub/z0DKjXCZ9fvehZYW9c5f9M1HNjxt2trl+8ZsbCutH/Pz52H1qUMz7tHrD//vch/z4WaNc/397Zx4eRZX9/RLCFpQlioAa4wADSlR2MEFkRh0QX8FxySjKj0F0RpBBQIGAICgICioowrCjgojIsIjsgSBLgIQskIWQjeyQpDt7QoeQ5Pv+0elKdbq6u6rrVlen+3yepx7l1L33nHtvpft8u27dUsrMXy/xPn6JyGTa9jVdBd/28OWhTNu2RlZhJRb+Fo/IjEKn+CMIgnAEyqUcgwSAhtBFy46sQucJgKkeIAAuCATAq2vDZMfJgqYmAGbtci8B8NcvT6o+ZgRBEEqhXMoxSABoCF207PAUAfD+jgYBsCc62yGfUgRA+LVCEgAycTcB4IwxIwiCUArlUo5BAkBD6KJlBwkA6T7L3UgAZOgrSAAA0JVXYdv5DOSXGZj5dAUBcL3kJs6m6FBbW6dZDARBuDaUSzkGCQANoYuWHcLdYNz5RWDv72h4CLjA0YeAh9l/CDj8WmGTeAhY+CbgKI0fAp61S7vfuQIBAAAgAElEQVSHgJ//9rTtsXLgQV+b4++Eh4Bra+usjyc9BEwPAdNDwM6Jjx4CdltIAGgICQB2eIoAmEYCwAxzAfC41bacIQBm77qs2TagdseqCQqA8qrbvP9wv8eU+ycB4Fi7JADUjVGJD2fERwLAbSEBoCEkANhBAsA2wmTutgQBEJGungAwBD4pKQ4pAiBdRwIAIAHA2jezNkgAkAAgAaB6fCQAHIMEgIaQAGCH2gLAVd4D4A4CwNTulV79bZZrygIgjwSAOCQArNtJALh+8uosPy6WYJMAcE9IAGgICQB2eIoAmP5LjNMFQJxKAsBe/5uaAAj+HwkAu5AAsG4nAeD6yauz/LhYgk0CwD0hAaAhJADY4SlLgMwEgIwkU64AuNhEBMA1DxEA6R4oAMoM1SQA5JZVGjMJAOfHqMSHM+IjAeC2kADQEBIA7CABYBtlAqCv7Dht4RECoB8JAFFIAFi3kwBw/eTVWX5cLMEmAeCekADQEBIA7CABYBsSAOoLgDm71RMAwt2OPEUA0BIgB8oqjZkEgPNjVOLDGfGRAHBbSABoCAkAdnjKMwAzSACY4SkCwBPvAJAAcKCs0phJADg/RiU+nBEfCQC3hQSAhpAAYEdWYSVGTViF18YuxagJq5i3vzc6h2//i6U7FLWlJM4Zv8Tw9UO2H5Fczy/4AF+v7HyE3fKRGYV8+elzvpcdpy2k9l8YM2JiRMukFZTzZcZNWafMZ0wMcPKkVV8AUBsVbbXMnN2XeT8Htx6y7scWVmJI11Xwbb81bYNFNbtjZatvVs7ZbFPCWIlirZ6IvcxQzft/+V+rlfuX4ZtZG3LsLMoqjVmNuJTGqpXNWTEq8eGM+LTqmwxb/JYtlEs5AAkADSEBwI6swkr4BR/gD9bsjc7h235/R7SitpTEOeOXGL7urshsh3yW3Ky2Wz4yo4gv//c1Z2XHKTUWpeXSCsr5MkOWHFfs0xbRmUXo++lRzN8bJ3p+zu7LvI+fLmQ47EeMDH0F3/awZaEW59W49tX8e5JCmaGa99/748OaxEAQhOtDuZRjkADQELpo2UECQLpPdxUAg5eEKPZpC/8FR2y2MWd3rFMEwJPLTlicd0cBUEoCgCAICVAu5RgkADSELlp2OFMATP25iQuASvcRAKlOFAD22iABwJaSm+wEQF6pAYt+T0D4tUJG0REE4SpQLuUYJAA0hC5admTqK7F5wBic930UmweMYd7+3ugcvv2Tz41V1JaSOGfsjOHrJ499W3I9v+ADfL2q96baLR+ZUcSX3/+XINlx2kJq/4UxY9o00TKpBeV8mR2BLynzOW2a8eEyK77sxTNndyx//so/3rLZN7kxZOgr+LZ3Dn1Zdmw2+2blnM027YyVVazVE7GXVFbz/rcOflGR/xdXn2XTFxnxy7azKKs0ZjXiUhqrVjZnxajEhzPi06pvMmzxAwdSLuUAJAA0hAQAOzL1nrEN6IydztkFKCqzqGEXoB6uuwtQakE5XyZS5V2A7MUzd0+sYBegIdb92MJKDGa7AP2pj+zYbPbNyjmbbcrZNUVKPRF7ceUtZrsAMeuLnB1x5NpZlFUasxpxKY3VlXawcZYfZ9TVagxV8Eu7ADkGCQANIQHADk8UAPkkAMwFwEPuKwCukQBQ5J8EAAkAl41RiQ9nxEcCwG0hAaAhJADY4SkC4IOdl5wuAGJdWACk5LumALihogCI8hABUFRBAkB2WaUxkwBwfoxKfDgjPhIAbgsJAA0hAcAOtQXAnuhsEgCMcFcB8JGKAiBNcKfDUwRAIQkA+WWVxkwCwPkxKvHhjPhIALgtJAA0hAQAO0gA2EaYAFU/SQJAFBIA0tt0ggDQl1eRAJBbVmnMJACcH6MSH86IjwSA20ICQENIALCDlgDZRq4AiMxoKgKgzCMEQKqnC4AHSQCQAHCyzVkxKvHhjPhIALgtJAA0hAQAO0gA2IYEAFsBUEcCQHUBoCMBIL+s0phJADg/RiU+nBEfCQC3hQSAhpAAYEeGvsIjBMCHv5IAEOJKAmDeXvUEgHCpk6cIgIIyEgCyyyqNmQSA82NU4sMZ8ZEAcFtIAGgICQB2ZOgr8OHz07Fy6Fh8+Px05u3vic7m2/9p0ieK2lIS54e/XuLrhy/4WnI9v+ADfL3ydRvtlo/MKOLLr3xzruw4bSG1/8KY8f33omWS88r4MgtfmqnM5/ffAwsXWvUljKd28xaL8/P2xvLnz8770rofW1iJISW/nG978SuzbMYmGr+tvlk5Z7NNO2NlFWv1ROz5ZQbe/5zRMxT5Z9YXGfHLtrMoqzRmNeJSGqtWNmfFqMSHM+LTqm8ybPGTJ1Mu5QAkADSEBAA7MvQV8As+wB+s2ROdzbf9/o5oRW0pifPDXy/xdXdezHLIZ2HFLbvlIzMK+fKjvzsjO06psSgtl5xXxpcZsDhEsU+p8dyuqbU4P29vLH/+x3PpDvsRIyW/oZ8BS4/bjE0u+aUG1NTWMW2TBfmlBt5/r/mHFLWldV8IglAPyqUcgwSAhtBFyw61BcDe6By3EQD68iq75UkA2G6jWkQAzN8bx5//ISzdYT9iCAXAEwwFQGhiPh6acwBvbrzArE1WCAVAz3kkAAiCEIdyKccgAaAhdNGywyMFQIRzBMALq5qKADim2KfUeG7ddq4AEPaTpQCwVU/rpDlPIAD+TAKAOYbqGq1DIAgmUC7lGCQANIQuWnZ4yjMAM1k8A7B2g93ykRmFTeIZgCSNngGo3rTZ4vz8vXH8+TMfsX0GQNjPRQyfAbBVz2ab33+Pmo8XqPoMwI2ShmcAZr/g2s8ARH+6AqffeA9VGzZJa1vjZwDOJOsQ/MIMHH31XXoGQOsYlfhwRnz0DIDbQgJAQ0gAsEPtXYCELwJL0XAXoJlMdgEaZrf8xfTCJrELUFKeNrsA1T5luZPSx/viVNsFSNjPqD9Z9tPuWDmw04+tcxmPDgI4DkWDApn0T8x+veQm7/+CC+8CVGao5ttOf3QgbzdU1xh3DHPBXYCsjgftAuT8GJX4cEZ8tAuQ20ICQENIALAjXUcCwBbuKgCu3tBGANQ4WQAI++kKAsDha1hGMplb3DQEgDBO4dysOp7M20uHDLXvkwSA6yevzvLjYgk2CQD3hASAhpAAYIczBYCW7wEgAWBO4o1S1xQAfZueAGj8bgOtBUCODQFwve8QgOOgGyDtb0ALAfDe9ijerhsQYN8nCQDXT16d5cfFEmwSAO4JCQANIQHADhIAthF+4d+SKQAukwCwiKdmmKUAWKCiABD201MEQHZRpVUBINc/CQASAC4boxIfzoiPBIDbQgJAQ0gAsMNTlgDN2uUcARDRRATAlevaCIDbGgqASJkCoLa2DqVDAkkAkADgTSQAXChGJT6cER8JALeFBICGkABgBwkA25AAaNoCwKyfMgXAxtNpktb51z5l/ZwWAiCr0D0FQFpBOVJ7izwcLGNs6kgAkABwVnwkANwWEgAaQgKAHSQAbOOuAiAh1zUFwHU1BYBIPx19mNfWzkYkAKTFL1cADPosRHrybcWeUi8g9AMDYBcSAK4doxIfzoiPBIDbQgJAQ0gAsMNTngHQRAB0JwHQOJ7qJy0FwMLf4lUTAPb66Y4CIFOvjgBovNRJLQEwxYoAkJV8W7HL6r8TBcCN+oez66TUlxirSyWvzvLjYgk2CQD3hASAhpAAYEe6rgKbB4zBed9HsXnAGObt74nO5ts/+dxYRW0piXPWrkt8/auvTZRczy/4AF+vcvIUu+XDrxXy5fc+9arsOG0htf/CmDFtmmiZ+NwSvsz2gJeU+Zw2zfjFYsWXMB7De/+xOL/wt3j+fHzQBJt9kxtDQm4p3/bPIv20NVZSz1X/Z6rkeg5fw9bGWMSeoW/4m94y8EVF/oV9qXv/fWkxSYz/eslNvu0dgS/z9inbo3h76htvi8Zi5lPG2Mjqv0h9WTFIjCssRce3mfl//7JfX2KsomM+4V0UDQpwLHY5fVQQoyI/zqjrDJuT4osfOJByKQcgAaAhJADYcU1XAb/gA/zBmj3R2Xzb03ZEK2pLSZyzd13m6+4Iz3TIZ36pwW758GuFfPlR35yWHafUWJSWi88t4cv0X3RMsU+p8ejKqyzOL/wtnj+/+cw1h/2IIeznwM9CbMbm6LkyQzWTNlmRLvib7j73oCL/wvI1tXVM48wtvsm3PXhJw9xM2R7F2/fF5DgcuxhK21Bj/laHpvBtfnE4kVm7jRFeF+fT9Kr5IZoOlEs5BgkADaGLlh0kAKT7lCsAnnNhARCXo40AKChzrgAQ9lMtAVBy07UEwDWVBEB1TS3TOHMEAmCQYG7+83N0kxAAdXVsBJFQACxTUQD8dCGD9zN3TyyzdvNKDczGgnAulEs5BgkADaGLlh1pBeUkACT6dFcBMGCx8wSA2BgqFQAZ+gpM/TkaxxLyLM45QwAUV96yeq5xYuToeJZUVovaozKLkFpQbmYT/k13YygAbt1uEAAX0vQYvjxUkWDLKqwUnZupAgGwN9p1BQCrOyLfnUh2igDYei6d9zNvLxsBsOq4MfYvj1xl0h7hXCiXcgwSABpCFy07UgvKMWrCKrw2dilGTVjFvP3dUdl8+8s/36GoLSVxzt51ma9/eNshyfX8gg/w9QrPXLBb/kKani8/eeYm2XHaQmr/hTEjJka0TFxOCV9m7HtrlfmMiQFOnrTqSxiPXmQMF/4Wz5/fs0V+YjZ8eajV/gr7+cYUy37aGivhubroaKvnSs5FWD1XE2Vez5FreHVoCkZNWIW9K38yizEivZBvr1QQQ5rgb/r5t8z9yPUv7EtVRKSo3dq8myFyjWTqK0Wvwfd3RPP2EzuO2Pdp7foTscvqv0h9YQzVkVG2Y5AY13cnkvk2f1izhy9WGxWN0kPHHB7fxrYfz6Xzfr5b8av82FUYT0U2JT6cEZ+IrTYqGnWhoS4TX/yWLZRLOQAJAA0hAcCOlPxyVXcB2h3lGtuAzt51ma+f11+9XYDOp+mbxC5AsdklmuwCVDXUcgw/2a9sFyBb/Y3Lsd1PW3WF52y97Ku60XVhVq/ROwIcuYatxfj2Dxd5e6FgW8vUAut/00p2AaoR7HYk5RozQ+QaydBXiM7NtB3RvL1gQMPfqjWfVvf2V3kXILPdnxTsArTqeDLfZuZjg/hiV3r2AzgOJYMDHYq1se3Hc+m8nzT/gfJjV2E8PWkXoFJDNaK79am/dlwjPtoFyDFIAGgICQB2pOSXOW0bUC0FQPD/nCMAzqU2PQFwUaEAyHh0EMBxMIgk943jcbYAsCd0pAoAWy/7anxd2KrHUgC886O4ALAl6l1JAFzTsREAVx/uD3Acyp8YatcnSwFQo7IA4GNttJWr1Fgb27aezxAVABUBT1qKXDcRACU3q3GlV3+H6pYaqhHXo6/DY9PYtuxwYsN1LfwOIgHQ5CABoCEkANiRnEcCwBZyBUBYqq5JCIDL2cVMBECZoZovE//nfnbjaboCwPpe/7eGupoAsP43rUgADGMrANIEdyqE1+D0X2IkC4Cbt2p4W/Sf+tj1yVIACF9qd+vJYUwFQG1tHfPkepuIADBUN4zfjX5DbLaX1/8JgONQLLgj4eoCYP7ehpcMVgY8Kavu4t8T+LrCuzCGoRLnupFt7p7Yhu8gO2MtJT4WNhIAjkECQENIALAjSWUB4CpLgJgIACu/cAsJS/EsAVBUcctuO8J4xO4SqCkAhP1UIgBqhlkXAI1FjS3h4AwBYEvUKxEAtxkLAOGdCqsCoL9tAVBedZu3hfs1+qXcSQKg1FBt/JW+cZKpQABU19QqirW2ts4ongS2ny5YCoAcKy9jkzp2zhIANU895VCSHLTuHB9j6RA7S6ka1X13ayRf1/TmaOHyOrO3mkvox5zdJADcBRIAGkICgB1qC4D/RXqWADgrFAA9XFcAXMpiIwCKK2UKgEDLMfx0f8MvbWoKALH4pAqA2y4oAP5lRQDY+pt2JQEgFCrCuZkhQwAIrz/WAqBWJOk0f/bDOB57o3N4m9nbziUKgO9OWAoA4S/zjiTXwphMdy5/Ds9sEAC9jQLA2tuYnSUARJ/faGSLzy1BeL3AsngbtR0f/xAIALvPUjSqO2mbpQD4z88Ny9N0A+ws47EQAILvIBIATRoSABpCAoAdV2+oKwB+vZjVIAB6Oy4A6upk3hJvhJkA6KeeADiT7FkCQPYdgEDL2/BqCgB7/WQhABrf1bC6ThxsBYDYL5SA7b9prQSAaZ25cBmdME5rAiDfjgDQl1c1CIDGa+UbJT1yP0Pi/tzXYmzFHv7eF6NMAKwOTbEQABWCOxuOJNevrz9vkfjuEAiA1PrP4uslDQIgUmUBYAh80qzN6Mwi47zbSVZHrDhlVWwLqaurMy5PsjMOVpEgAKYqEADm30EkAJoyJAA0hAQAOxJvlKoqAHYKBECqAgEge01sI8x/fXFMANj68jFxOrmgSQiAGAkCQErCpBMkYFIEwM0mKgBs7fTTWNRYEwCOilhrMb73U5RTBYDpF29bMVnDVDZO8JzIleulonMzY6d9AWD6JTi/zMDbLggEgK68ClcbPfxZI/MzRKys2DNBv13K5W1JDgiANScbBEBGvQAoFTxb44gAeGNjQ+JrWrP/S4SlABAuATJbIsdYAAjvBJvafPyTo+LXUCPfTyw9Lukz+Gj8DQuxKjYOVmnkd/JPlgLgfSsPqNMSIM+CBICGkABgh/BLWA0BIPal4wi35a6JbQQJAHOkCAApoiu/tCEBi/BzTAAsEjxsl6tQADReImCvn1IFgK2dfhr3ydqzA3ITUHsxvre9QQDoBjQIAFuiXpkAGCZqt7ssw4rf+Fzxnag+2HlJsgAQ/oItFADCsTElg3LW1VubK7E7gr9fFgiAh/vzZW8GWt71AGCRjK39I9VCAAiXNjkiAMZtumCR+Ir9GJOprxQVAJmPGXf2Kh3SsLOSEgEgdg2LzWdu8U0k1G9/KlcAvLj6LF+urD5usXGQOoZif1/Wlqc1rnu7phbX/Aea2YQPAZseuK6rqzPeSSAB0KTwOAFQVVWF2bNno2vXrmjdujUGDx6MY8esv0FUSE5ODoKCgtC+fXvcddddGDNmDNLS0hyOhQQAOxJy1RUA2y9Yrjt1BNkPxTXC6vpLO8gVAKeSGgRArAsLgOjMIrsCQErCKkzAIhqvwRaJR0wAsHwIuPGuO/b6KVkA2FjmY0sACJfNOCpircVobT2yLVGvRADcYiwAhO9oEM7Nh7/aFwCmec4uakhghQJgyBLLpFHOunprZcU+Dw7FXhcVACZbnOBzoNRQjezHB5vN5TqhAHjUKACES5scEQDjN4fz9YsGGRNfseWY1rZiFRtTNQWA6VkZ4S/2pjkWCgCxZ4hMiAkAsXGQOoZiy32sidPGdYXvXDDFMm+vpQD4Q/B9IXeXIhY2EgCO4XEC4PXXX4eXlxdmzpyJ9evXIyAgAF5eXjhz5ozNeuXl5fjzn/+Me++9F8uWLcOKFSvg6+uLBx54AHq93qFYSACwIz63BH7BDa+3Z8228xl823N2O/76+arbNYrinL3rMl/35/BMyfWEPnOLb9ot/0dSAV/+/606LTtOqbEoLReVWcSX6bdIXMjfrqm121Z2USV/3n/BEdEywjZS8ssszi/8LZ4/v+XsNZt9s9e+obrG7FxkRkM/Byy27Ket/gnP5TSa+4fmNJxLziuzWq/UUM3bb922P572+idk6s/RvH1fTA5vT8gttVpHrn9h+fxSg6i98ZhL7cPl7GLe1ufTo7x95q+XePvOiCybPjP1DdffQ3Ma2g5Yepy3ZxVWAjBuGSq1/xVVt0XLCm2mdg/HXedt7/x40WafhZ9DJjacSuNti35PAGC8s6bk827ClnC+7vEreQCAXZHZvG3GL8Y3wibnlYl+Dtjruy2bGMJydXV1FraSSuPfSc95hxpsN422wM9P2Pz8MPH3NWf5chfTC62Og1Sm/xLD190dlQ3A/NrcYeN7RKzu/L1xvO37+s+5uXtiedvW8xmy4mMB5VKO4VECIDw8HBzH4csvv+RtBoMB3bt3R0BAgI2awLJly8BxHCIiGl5Vn5iYiObNm2Pu3LkOxeMqF21dXR2qbtegtrZO0ziUEJPV8CXc46ODzNv/ISydb3/eXscFgKFamQCwllTYQ+hTigA4eTWfL+8KAsD0ZduYi+mFgsQ4RLRMtQQBIEzAes0/ZDeepDzLL/CP9zV8Mf4Qlm6zb/baL6+6bXYuQtDPgZ9Z9tNW/8SSPRNCAXD1hnUBYEpiAMdFrLU603Y0CIC90Q0CwJaol+tfWD7PigCoaDTmUvsQLRChj38iLgB+icgUbcPkM62gXLTtoV80JI2pBeUArCf1YpRUVttNeDP0FQCAw3E3eNvbP0SIlhWz1dR/b2w83SAAPt1vFAA5xTdlzdX1kpu4XVPL//vtHyL4uscSjInv/wQCYHq9ABCKRZMAsCb8pdrEEJarul1jYTOJy0c+PszbbpQYbU8ua5jL+NwSqz5eXRvGl7uQZvxxceL3luMglRk7G5L4XZHGJH7WLmkCYIZAAPx60fh9s0DwObf5DAmApoxHCYBZs2ahefPmKC0tNbMvXboUHMchK8t6QjVo0CAMGjTIwj5ixAh0797doXi0vGj15VVYHZpi9uHlF3wAPecdQp9Pj+KJpcfx1PJQ/gvo4fmH8eePDuHpr05i3KYLePuHi3h3aySmbI/CtB3R+GDnJQT/7zI+2hOLBfvi8On+BCw9eAXLDifi66NX8e3xZKwOTcG6P1Kx6cw1/BCWjm3nM/BLRCZ2RWZjb3QO9l/KxeG4GzgcdwNH4m/gaPwNHIy9juD/XcaJxDz8kVSAE4l5OHk1H6FX83EiMQ/n0/Q4l6o3+1XCL/gAYrKKcSmrGJn6SmQXVeLmrRrcul3Lf1nJ5b8nU/m2P9rjuACovCX9y1uMD3YKBMBF9QTA8St5fPkx39m+OyaHuro6h75srQmA82l6vsyQJcdFy0j5xfqaroI//+eP7AuAxskyYLw1bjr/47l0m32z135x5S2zc/b6aat/wnPpugqzc0IBkJBbarWe6ZdNwPFr2FodsV8ZAeODzyb7n+awEwDXS26K2oV9lNMH4d0ZoQAQJlnWBIDpzkpKfplo208tD7VIGq0l9WLoyqvsJrxp9cLCXADYvgNgNm714lAoAD7Zb/xOy9BXSI71wGXjHYhxmy7wtrd/uMjXPRJ/A4DxnSwm27Qd0QDMrxWTALB2nUq1iSF2vQhtmXqjwPZfcMRifIVzGZVZZNXHP9ad48udTdEBAN4SCIDDcTdsxnjzVo2ZiPrwV8vvDDEBcLumFksOXsGGUw3LmsXuFAh/6DDdARB+/zry44dSSAA4hkcJgGeffRaPPPKIhf348ePgOA779+8XrVdbW4tWrVph8uTJFufmz58PjuNQVmb9lp41tLposwor0W/RMbMPLk8+Hp5/GIGfn0Dvjw+jx0cHMWb1Wbzy3zCbdd7bHoUp26Mw9edovL8jGtN/icGMX2Lwwc5L+PDXS5i1yyiI5uy+jLl7YvHRnljM3xtn9ouWX/ABrP0jFT+EpWNXZDbWnEzB/+rF0O6obPx6MQs7wjOx5ew17L+Ui98v5+JRwRfLpG2ROFovlI7G38DxK3kITczH4bgb2H8plxdKwmTeL9j4C034tUKcT9PjdHIBLqTpjfv+p+lxPk2P8GuFZh/8fsEHcPJqPs6n6XGh/nxEeiEuphciMqMQkRlFCEvVITqzCNGZRYiqPyIzinCpXoj9kVSAyIxCnE3RmbV7IU2PyIxC/JFUgIj0Qv44l6o3K2eK81yqHmEpOpxJ1uFUUgEW/Z5gVi4sVYcLaXpEpBfiYOx1XEwvRKjgbobJp8nPxfr/7ryYZVYmStCXi/XlhOe3X8g06+/5ND0GfhbCn5/+SwyiM4sQk1VsdlzONo5HTFYxouvHKDLDsv3dUdl8nYj0Qnx+KNHsfPi1QoSl6ERj4+ckRWeW1PkFH8C28xmIySrm50h47oewdOyOykZUZhHCr5m3efxKXv2cFmJfTI5FLBfqr52wVB3CUnQ4Wz9Hp5ML8EdSgdkdJb/gA/zYnU4uwF+/PMnb5+yORfi1QoRfK8Sq48kWfky+hPZjCXn8nEZlGvv9R1IBQhLycDjuOn67lGtWfufFLBxLyLOwH467zo+n6TD5NB3C8qa/mcZxnks1XqfCX+//83M0Qq/m42i8+XzsjspGWKoOW85es7hGzzfq59o/UnE+TW8x/rsis/kfQoR/o6FX87EzIsui779fNu/31vMZOJ+mNxOw/guO8H9vwrIR6YU4lpBn0YcLaXr8U7BM5YVVZ3AuVY+fLmSYlQ1L0eFcqjFG02dURHohTicXmJU7k2wc24fnN/ySPm9vLM4k6/AfwZKxIUuO43RyAb5tNAdnU3S8oDAdoVfzLfp+NkVn8flwItH4ORp6NR8nr+bjTLKOv66F5dacTMGe6Gwz2/dnryEs1bzchlNpOJNsbltxLAlhqcaxCEvV8Ufjcp/uT8CRRtfM7F2X+XEMS9E1HKk6s8+x0PrPbOF1+N72KJxOLkDfT4/ytsk/ReJUUoHZnbjvTiTjTLLO7K7Fv368aPwOWtjwHTRu0wW8L6hnOl5cfRZ//eokNpxKM7vjphYkABzDowSAv78/nn76aQt7QkICOI7DunXrROvpdDpwHIdFixZZnFuzZg04jsPVq1dt+s7Pz0d8fLzZsW/fPqdctMl5ZQhaew5jvjuDkStPWfyx+gUfwEtrzmLFsSQsPXgFH++Lw6xdlzBlexSC1p1D0LpzGLHiFIYvD8WwZaEYufIURn1zGiNWnMJfvzqJp5aHIvDzExi8JAQDFh9Dn0+Pwn/BEfSafwg9Pjoo6k+NQ/gglyu3r7QdR+vLrafWeMppV0pZVyqj5twq8c36HOtrkJWdpW9nx8+irNKY1YhLaayPZb4AAB79SURBVKxa2ZwVoxIfTWEMf7+ca56Q0EPALoNHCYBu3bph1KhRFva0tDRwHIeVK1eK1svKygLHcVi2bJnFuc2bN4PjOMTExNj0vXDhQnD1F2njQ+2LNi6nRPSDYsx3Z6wurWBJXV0damrrYKiuQUXVbZTcrIa+vAr5pQbkFt9Epr4SaQXlSMorQ0JuKeJzSxCXU4LY7BJcSNNj4+k0nEjMw8/hmVgdmoJTSQVYczIF35+9hkOx17H1XDq2nks3bmfGGXdg2XkxC9+EJGPunliMWX0W/1h3DlO2R+GvX53EhC3h+OtXDb86DltmvDUb+PkJBK09h3GbLpjdhvULNt7av/pwf/4D7tGFR/DXL0/iL18aBdCwZcblUoGfn0DA0uMYsuQ4Bi8JwcDPQjBgcQj6LzqGfouM4ogEAAkAR9onAaDMPwkAEgCuGKMSH01hDL8+lmSeEJAAcBk8SgB46h2ArMJKvLb+HMZvDsc7P17ElO1RmLM7VnQdc5NG6otItG6/vp3qJ5/CjRIDMvWVyNBXIENfgZT8MqQVlCM6swhJeWW8KDL9f3JemXFLRo5DRcBQxOWU8Mel+qUdZ1N0/HIN0zKcuJwS48ucOOObJMNSdTgcdx1nko3LNUzLgIRLNyqeGMqXF5Y1nT+VZDxOJObh98u5DbfOBcfxK3k4fsX43Mbvl3NxNkVnfJMlZ3wpzdH4G9gTnY3Q+lvtprbDUnSIzS7h+1o6JNBs+UBE/fKjqMwi/u2sxYMDcb6+H4dir+NEYh5OJRXgdHKBcQs7jkPhwAB+WYqpD6H1S6WE7ZiWAIRezccfScbycTklxi0kOQ7FgwL551BCE/NxMPY6ojOLzM6fSMwzG5MTiXkISTCOx4nEPH6JgSmWM8k6FA0K4OM01TctfzLFVzI4EGeSdfwzMYfjriMsRWfcfk8QW1iqDnE5JcjQV/B7uef3f4L3bVqCUV4/z6b5CE00zkVEeqFxi0hBmyev5iMyo9D41uD6sTqT3LAEofEyFOEysajMIn7uiwYZx/hYQh6Oxt/g7cWDA3E62TgeYak6PjZTn01H6ZBA3m66Bk3/PZ+mR2RGES5nF+PK9VKk5JchQ19h3AK1/lqKzS5BSn4Zcopv8mNTXN+W8DDNi+kQxiNcflEmtNePQ2hiw9iWDglEVGYR4nJKkJRXxvssHBjALxkq48sO5f8W90Rnm42N6W+gTNBu6NV8HIq9jnOpxmv/dHIB//cUmVHI/x0XDgzAH0kFSMorw40Sg/F9CMK+pOqM++U36p/Jv2kOTiUV4FhCHt8HYX0xW5mgTX7JS4qxnR/PpeP4lTxEpBciNrvErGxY/RIr4ZibrquKgIb+m665BttQnE8zjn/hQOPfU/kTQ/mlbaa37JbVl4vKLOL/dsqfGMovzzMtYwy/VsjP0eXsYv5NwMWDA7H/Ui7CrxWazce5VOPnk3AsD8ddx4U0vdl1a7pOTGNi+myLyynh/9ZLhwQiLqcE6boK/rOldMhQPibh0q9zqXocjL1u3Ca03ofps900L2VDhiIivRAxWcX8/JcNGYqL6caldcX1dU0+ItIL+fEvGzIUYSk6XMoq5mPJ7/8Evj6WhFm7LhnfycBxuOY/EO9tj8JHe2JxPk2PasHzCFa/R0kAaIJHCQB6BsDNaWICwOF2HK0vt55a4ymnXSllXamMmnOrxDfrc6yvQVZ2lr5ZtCHHzqKs0pjViEtprFrZnBWjEh/OiE+rvsmwkQBwDI8SADNnzhTdBWjJkiWwtwvQwIEDRXcB+tvf/oZu3bo5FA8JAMaolbCybl/NJJFlPbXGk0Xy4qpl1JxbJb5Zn2N9DbKys/TNog0WSb0aCaucdtWqLzVWV0peneXHxRJsEgDuiUcJgAsXLqDxewCqqqrQo0cPDBnS8ObOzMxMJCYmmtX94osvwHEcLl5s2B7t6tWraN68OYKDgx2KhwQAY9RKWFm3r2aSyLKeWuPJInlx1TJqzq0S36zPsb4GWdlZ+mbRBoukXo2EVU67atWXGqsrJa/O8uNiCTYJAPfEowQAAAQFBcHLywuzZs3C+vXrERgYCC8vL5w6dYovM3z4cHCc+dCUlZWhe/fuuPfee7F8+XKsXLkSvr6+uO+++1BQUOBQLCQAGKNWwsq6fTWTRJb11BpPFsmLq5ZRc26V+GZ9jvU1yMrO0jeLNlgk9WokrHLaVau+1FhdKXl1lh8XS7BJALgnHicADAYDZs6ciS5duqBVq1YYNGgQjhw5YlZm+HBLAQAA2dnZePXVV9GuXTvceeedeOGFF5CSkuJwLCQAGKNWwsq6fTWTRJb11BpPFsmLq5ZRc26V+GZ9jvU1yMrO0jeLNlgk9WokrHLaVau+1FhdKXl1lh8XS7BJALgnHicAXAkSAIxRK2Fl3b6aSSLLemqNJ4vkxVXLqDm3SnyzPsf6GmRlZ+mbRRsskno1ElY57apVX2qsrpS8OsuPiyXYJADcExIAGkICgDExMcDJk8b/unL7SttxtL7cemqNp5x2pZR1pTJqzq0S36zPsb4GWdlZ+nZ2/CzKKo1ZjbiUxqqVzVkxKvHhjPi06psMW/yWLZRLOQAJAA0hAUAQBEEQBOE4lEs5BgkADaGLliAIgiAIwnEol3IMEgAaQhctQRAEQRCE41Au5RgkADSELlrGTJtmfDho2jTXbl9pO47Wl1tPrfGU066Usq5URs25VeKb9TnW1yArO0vfzo6fRVmlMasRl9JYtbI5K0YlPpwRn1Z9k2GLHziQcikHIAGgISQAGCNnJwct21fajqP15dZTazyV7rjhymXUnFslvlmfY30NsrKz9M2iDTl2FmWVxqxGXEpj1crmrBiV+HBGfFr1TYaNdgFyDBIAGkICgDFqJays21czSWRZT63xZJG8uGoZNedWiW/W51hfg6zsLH2zaINFUq9GwiqnXbXqS43VlZJXZ/lxsQSbBIB7QgJAQ0gAMEathJV1+2omiSzrqTWeLJIXVy2j5twq8c36HOtrkJWdpW8WbbBI6tVIWOW0q1Z9qbG6UvLqLD8ulmCTAHBPSABoCAkAxqiVsLJuX80kkWU9tcaTRfLiqmXUnFslvlmfY30NsrKz9M2iDRZJvRoJq5x21aovNVZXSl6d5cfFEmwSAO4JCQANIQHAGLUSVtbtq5kksqyn1niySF5ctYyac6vEN+tzrK9BVnaWvlm0wSKpVyNhldOuWvWlxupKyauz/LhYgk0CwD0hAaAhJAAYo1bCyrp9NZNElvXUGk8WyYurllFzbpX4Zn2O9TXIys7SN4s2WCT1aiSsctpVq77UWF0peXWWHxdLsEkAuCckADSEBABj1EpYWbevZpLIsp5a48kieXHVMmrOrRLfrM+xvgZZ2Vn6ZtEGi6RejYRVTrtq1Zcaqyslr87y42IJNgkA94QEgIZERUWB4zjs27cP8fHxdCg9Bg5EPMcZ/+vK7Sttx9H6cuupNZ5y2pVS1pXKqDm3SnyzPsf6GmRlZ+nb2fGzKKs0ZjXiUhqrVjZnxajER1McQxX87qsXAFFRUVqndU0KEgAasm/fPnD1Fy4ddNBBBx100EEHHY4d+/bt0zqta1KQANCQ4uJi7Nu3D1FRUfZ/dVB4mMQG3W1o2gfNo3scNI/ucdA8usdB89i0j6ioKOzbtw/FxcVap3VNChIAHkJ8PD1v4A7QPLoHNI/uAc2je0DzSHgiJAA8BPqAcw9oHt0Dmkf3gObRPaB5JDwREgAeAn3AuQc0j+4BzaN7QPPoHtA8Ep4ICQAPgT7g3AOaR/eA5tE9oHl0D2geCU+EBICHkJ+fj4ULFyI/P1/rUAgF0Dy6BzSP7gHNo3tA80h4IiQACIIgCIIgCMKDIAFAEARBEARBEB4ECQCCIAiCIAiC8CBIABAEQRAEQRCEB0ECgCAIgiAIgiA8CBIAbk5VVRVmz56Nrl27onXr1hg8eDCOHTumdViEFSIiIjBlyhT07t0b3t7e8PX1RVBQEJKSkizKXrlyBSNHjkTbtm3RsWNHjBs3DgUFBRpETdjjs88+A8dx8Pf3tzgXFhaGoUOHok2bNujcuTOmTp2K8vJyDaIkxIiKisLo0aPRsWNHtGnTBv7+/vj222/NytAcujbJycl47bXXcP/996NNmzbo1asXPv30U1RWVpqVo3kkPAkSAG7O66+/Di8vL8ycORPr169HQEAAvLy8cObMGa1DI0R45ZVX0KVLF0ydOhUbN27E4sWL0blzZ7Rt2xZxcXF8uezsbNxzzz3o3r07vv32WyxZsgQdO3ZEnz59cOvWLQ17QDQmOzsb3t7eaNu2rYUAiImJQevWrdGvXz+sXbsW8+bNQ6tWrfDcc89pFC0h5OjRo2jZsiWGDBmCFStWYMOGDQgODsasWbP4MjSHrk1WVhY6dOgAPz8/fP7551i/fj0mTJgAjuMwZswYvhzNI+FpkABwY8LDw8FxHL788kveZjAY0L17dwQEBGgYGWGNsLAwiwQ+OTkZrVq1wptvvsnbJk+ejDZt2iAzM5O3hYSEgOM4rF+/3mnxEvZ57bXX8PTTT2P48OEWAmDUqFHo2rUrSktLedvGjRvBcRyOHj3q7FAJAaWlpejcuTNeeukl1NbWWi1Hc+jaLFmyRPQlX+PHjwfHcSgqKgJA80h4HiQA3JhZs2ahefPmZh9oALB06VJwHIesrCyNIiPk0r9/f/Tv35//97333ougoCCLcj179sQzzzzjzNAIG5w6dQrNmzdHbGyshQAoLS2Fl5eX2a/JAHDr1i3ceeedePvtt50dLiFg7dq14DgOV65cAQBUVFRYCAGaQ9cnODgYHMdBp9NZ2Js1a4aKigqaR8IjIQHgxjz77LN45JFHLOzHjx8Hx3HYv3+/BlERcqmrq8P999+PESNGAABycnLAcRyWLVtmUXbcuHHw8fFxdoiECDU1NXj88cfx7rvvAoCFADh79iw4jsPOnTst6j755JNmgo9wPq+88gratWuHkJAQ9OzZExzHoW3btpg0aRIMBgMAmsOmwOHDh/nlPjExMcjKysIvv/yCdu3aYfr06QBoHgnPhASAG+Pv74+nn37awp6QkACO47Bu3ToNoiLksm3bNnAch82bNwMALl68CI7jsHXrVouys2bNAsdxqKqqcnaYRCNWr16N9u3b8w9mNxYAu3btAsdxOH36tEXdoKAgdOnSxWmxEpY8/vjj8Pb2hre3N6ZOnYrdu3dj6tSp4DgOr7/+OgCaw6bC4sWL0aZNG3Acxx/z5s3jz9M8Ep4ICQA3plu3bhg1apSFPS0tDRzHYeXKlRpERcghMTER7dq1Q0BAAGpqagAAp0+ftvpr1ccffwyO41BcXOzsUAkBer0ePj4++Oqrr3hbYwGwdetWcByH8PBwi/r/93//h/bt2zslVkKcbt26geM4TJo0ycz+7rvvguM4JCcn0xw2EbZt24aRI0diw4YN2L17NyZOnIg77rgD3333HQD6WyQ8ExIAbgzdAWja3LhxA926dYOvry9yc3N5O90BcH0mTZqEHj16mD3QTXcAmhb+/v7gOA6nTp0ys586dQocx+HHH3+kOWwC7NixA23atEF2draZfcKECfD29oZer6d5JDwSEgBuDD0D0HQpKSlB37594ePjg4SEBLNz9AyAa5OcnIxmzZph1apVSE9P548hQ4agZ8+eSE9PR2FhIa07dnH+9re/geM4XL161cyemJgIjuPwzTff0Bw2AYYNG4bAwEAL+549e8BxHEJCQmgeCY+EBIAbM3PmTNFdgEzbotEuQK6JwWDAsGHD4O3tjXPnzomW6dSpk9VdgMTu+hDO4+TJk2ZrjcWOadOmoaSkxObOIxMnTtSoBwQAzJkzBxzH4cSJE2b2EydOgOM4bN++neawCdCzZ08MGTLEwr5z505wHIfDhw/TPBIeCQkAN+bChQsW7wGoqqpCjx49RD8QCe2pqanBmDFj4OXlhYMHD1otN2nSJLRp08ZMxJnu7Kxdu9YZoRJW0Ol02Lt3r8Xh7++PBx98EHv37kVsbCwA4LnnnkPXrl1RVlbG19+0aROfmBDaER0dDY7j8MYbb5jZx44dCy8vL35ZHs2ha/PCCy+gZcuWFm9T//vf/45mzZrRPBIeCwkANycoKIj/ZWP9+vUIDAyEl5eXxbpWwjWYNm0aOI7D6NGjsW3bNovDRFZWFu6++250794dq1atwtKlS9GxY0c89thjtP7fRRF7EVhUVBRatWpl9vbR1q1b81u+EtoyceJEcByHf/zjH1izZg2CgoLAcRzmzp3Ll6E5dG1M7+K49957sWjRIqxZswajRo0Cx3F45513+HI0j4SnQQLAzTEYDJg5cya6dOmCVq1aYdCgQThy5IjWYRFWGD58uM2lI0Li4+MxYsQIeHt7o0OHDnjzzTeRl5enUeSEPcQEAACcOXMGgYGBaN26NTp16oQpU6aY/QpJaEd1dTU++eQT+Pn5oUWLFujRo4fo7mk0h65NeHg4Ro0ahS5duqBFixbo2bMnlixZgtu3b5uVo3kkPAkSAARBEARBEAThQZAAIAiCIAiCIAgPggQAQRAEQRAEQXgQJAAIgiAIgiAIwoMgAUAQBEEQBEEQHgQJAIIgCIIgCILwIEgAEARBEARBEIQHQQKAIAiCIAiCIDwIEgAEQRAEQRAE4UGQACAIgiAIgiAID4IEAEEQBEEQBEF4ECQACIIgCIIgCMKDIAFAEARBEARBEB4ECQCCIAgX5fvvvwfHcUhPT9c6FKejdd9v376Nzz77DA899BDatGmDp556CklJSZLrL1u2DL169UJtba1Zm/Pnz0fXrl1x9913Y8aMGairqwMArF27Fr6+vqiqqmLeF4IgiMaQACAIoskRGxuLV155BQ8++CBatWqF++67D88++yxWrVqlir+wsDAsXLgQxcXFss4pReskWEtY9z0iIgJTpkxB79694e3tDV9fXwQFBYkm9TU1NRg9ejTuvvtufPbZZ1ixYgXuuece9OzZE7dv37brq7S0FD4+PtiyZYuZ/f3338dLL72EoqIiFBUV4bHHHsPOnTsBAAaDAZ07d8a3337LpL8EQRC2IAFAEESTIiwsDC1btkSPHj2wePFibNy4EQsWLMCIESPQvXt3VXx++eWXVpNRW+eUUlNTA4PBwP9K7EmwFgCvvPIKunTpgqlTp2Ljxo1YvHgxOnfujLZt2yIuLs6s7BdffAFvb2/Ex8fztu3bt4PjOISEhNj1tXLlSrRr1w4Gg4G3ZWdno0OHDigpKeFts2fPxuzZs83+7efn55HzTRCEcyEBQBBEk+L5559Hp06dRH9xz8/PV8WnFgKgoqKCaXtNDdYCICwsDLdu3TKzJScno1WrVnjzzTd5W0lJCdq1a4ePPvrIrGx6ejo4jsNXX31l19fjjz+OcePGmdm2b9+OkSNHmtneeecdfP311/y/IyMjwXEcTpw4IblfBEEQjkACgCCIJkWvXr3wl7/8RVLZnJwcTJw4EV27dkXLli3x0EMPYdKkSXwimJGRgcmTJ6Nnz55o3bo1fHx88Oqrr5olnQsXLgTHcRZHenq6zXMm/2+99RbuvfdetGzZEr1798bmzZst4jS1k5CQgLFjx6JDhw7o27evaBJsKpuSkoJ//vOfaN++Pdq1a4cJEyagsrLSou2TJ09iwIABaNWqFbp164Z169bxbdhCytg4EpPUeMT6LnU85dC/f3/079+f//eaNWtwxx13ICMjw6xcTk4OOI7DwoULbbZ37do1cByHH374wcy+atUqvPbaa/y/q6ur4evri7CwMLNyPj4+eP/99x3sDUEQhDRIABAE0aQYMWIE7rrrLotlG43Jzc3FfffdB29vb0yfPh3r1q3Dxx9/jEceeYS/e7Br1y706dMHCxYswIYNG/DRRx+hY8eO8PPz4xPXy5cvY+zYseA4DitXrsS2bduwbds2VFRU2DyXl5eHBx54AL6+vli0aBHWrl2LMWPG8GWFmBLg3r1748UXX8R///tfrFmzxqYA6NevH15++WX897//xTvvvAOO48yWkwBAdHQ0WrVqhYceeghffPEFlixZgvvuuw99+vSxKwCkjI3cmOTE07jvcsZTKnV1dbj//vsxYsQI3vbMM8/A398fOp3O7Dh//jw4jsPy5ctttvnTTz+B4zjExsaa2cPCwtC1a1fk5OSguLgYb731FkaPHm1R/9lnn8WAAQMc6g9BEIRUSAAQBNGkOHbsGJo3b47mzZsjICAAs2fPxtGjR1FdXW1Wbvz48WjWrBkuXrxo0YZpjfXNmzctzpkSva1bt/I2R5YAvf322+jatSv0er2Z/fXXX0f79u3NfJsS6LFjx5qVtSUAJk6caFb2pZdewt13321mGz16NLy9vZGbm8vbUlJS4OXlZVcASB0bOTHJiadx3+WMp1S2bdsGjuP4uwg1NTVo27at6F0d07Fr1y6bbc6fPx8cx6G8vNzi3KeffopOnTrBx8cH7777rugyr3//+99o06aN7L4QBEHIgQQAQRBNjoiICLz00kvw9vbmE7NOnTrht99+AwDU1taiXbt2ePHFFyW3WV1dDb1eD51Ohw4dOmD69On8ObkCoK6uDh06dMC///1vi1+STYnt2bNn+fKmBPrUqVNmbdsSABEREWZlV6xYAY7jUFpaCsCYzLZp0wZvvPGGRcyjR4+2KwCkjo3UmOTGI+y73PGUQmJiItq1a4eAgADU1NQAAJKSkvi7FiEhIWaH6U6Pva1AJ0+eDC8vL1mxCAkODgbHcaLLuQiCIFhBAoAgiCbLrVu3EBERgblz56J169Zo0aIFEhISkJeXB47jMG/ePJv1b968iY8//hgPPPAA7rjjDrNfet966y2+nFwBkJ+fb/NXZI7jsGfPHr68KYHOysoya9uWAMjLyxMta1q7fv36dXAchwULFljEPGPGDEl3AKSMjdSY5MYj7Lvc8bTHjRs30K1bN/j6+prdjTh69Cg4jsOhQ4cs6jzzzDPo3Lmz3baVCoDZs2eD4ziH7mgQBEFIhQQAQRBugSlh/OSTTyQLgLfffhvNmjXDBx98gF27duHYsWMICQnB3XffjX/+8598ObkC4MaNG+A4DuPGjbP4Jdl0CHcsMiXQOp1OtE9iAsBeWaUCQOrYSI1JiQCQO562KCkpQd++feHj44OEhASzc3v27BG9E1NSUoKWLVti0qRJdts3LQEqKyuTFE9j/vWvf8Hb29uhugRBEFIhAUAQhFsQFxcHjuPw7rvvSl4C1L59e4tfsw0GA5o3b26W5H711VdWBYDYuZqaGtx1110Wa/qtoYYAqKmpQevWrR1eAiR1bKTGJDeexnXljKc1DAYDhg0bBm9vb5w7d87ifEhICDiOw8GDB83s3377LTiOw+XLl+36MD0ELKWsGPQQMEEQzoAEAEEQTYrQ0FDRFyUtW7YMHMdhxYoVAKQ9BOzj44MJEyaYnVu+fDk4jjNLcteuXQuO4xATE2PRlrVzEyZMQMuWLUV3KyooKDD7txoCAABeeOEFhx8Cljo2cmKSE0/junLGU4yamhqMGTMGXl5eFgm+ifz8fDRr1gwzZ87kbdnZ2bjnnnswfvx4uz4AIC0tzezBYrn4+Phg6tSpDtUlCIKQCgkAgiCaFP7+/vjTn/6EDz74ABs2bMDq1avxxhtvoHnz5njooYf4LT5zcnLQpUsXfhvQ9evX45NPPoG/vz9fZvz48WjevDmmTZuG9evXY8KECXjggQcslrlERESA4zg8//zz2Lp1K3bs2MHv4GLtXF5eHvz8/ODt7c23//nnnyMoKAgdO3Y065NaAiAyMpJ//8GyZcuwdOlS3Hfffejbt69dASB1bOTEJCcesW1ApY6nGNOmTQPHcRg9ejS/XavwMPHyyy+jRYsWWLBgAb7++mv4+vqiT58+/MPVUnj00UcdulthehHY8ePHZdclCIKQAwkAgiCaFIcPH8bEiRPx8MMP484770TLli3Ro0cPTJ061WIdeGZmJsaPH49OnTrxL56aMmUK/yIw037s99xzD+68806MHDkSV69ehZ+fn0WSu3jxYtx///1o1qyZRaJt7Vx+fj6mTJkCX19ftGjRAl26dMEzzzyDDRs2mLWtlgAAgBMnTqBfv35o2bIlunfvjk2bNuHDDz9E69atbY6znLGRE5PUeMTqSh1PMYYPH27zIWITRUVFePnll9G2bVt07twZU6dOlb2ef8WKFbjzzjtlP8gbHByMBx98UPQOF0EQBEtIABAEQXgYL774Inr06KF1GDyuFo9SSkpK4OPjg02bNkmuU1VVhS5duuCbb75RMTKCIAgjJAAIgiDcmMa/QicnJ6NFixZ45513KB4V+eKLL9CrVy/U1tZKKr927Vr4+vqiqqpK5cgIgiBIABAEQbg1Xbp0wZw5c7BhwwbMmzcPPj4+aNu2LZKTkykegiAID4UEAEEQhBszYcIE+Pn5oVWrVmjXrh1GjhyJqKgoiocgCMKDIQFAEARBEARBEB4ECQCCIAiCIAiC8CBIABAEQRAEQRCEB0ECgCAIgiAIgiA8CBIABEEQBEEQBOFBkAAgCIIgCIIgCA+CBABBEARBEARBeBD/H18dLrVt3bzEAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the integrated pattern vs expected peak positions:\n",
    "\n",
    "LaB6_new = get_calibrant(\"LaB6\")\n",
    "LaB6_new.wavelength = hc/gonioref0.param[-1]*1e-10\n",
    "p = jupyter.plot1d(res_mg, calibrant=LaB6_new)\n",
    "p.figure.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Peak profile function based on a bilinear interpolations: \n",
    "\n",
    "def calc_fwhm(integrate_result, calibrant, tth_min=None, tth_max=None):\n",
    "    \"calculate the tth position and FWHM for each peak\"\n",
    "    delta = integrate_result.intensity[1:] - integrate_result.intensity[:-1]\n",
    "    maxima = numpy.where(numpy.logical_and(delta[:-1]>0, delta[1:]<0))[0]\n",
    "    minima = numpy.where(numpy.logical_and(delta[:-1]<0, delta[1:]>0))[0]\n",
    "    maxima += 1\n",
    "    minima += 1\n",
    "    tth = []\n",
    "    FWHM = []\n",
    "    if tth_min is None:\n",
    "        tth_min = integrate_result.radial[0]\n",
    "    if tth_max is None:\n",
    "        tth_max = integrate_result.radial[-1]\n",
    "    for tth_rad in calibrant.get_2th():\n",
    "        tth_deg = tth_rad*integrate_result.unit.scale\n",
    "        if (tth_deg<=tth_min) or (tth_deg>=tth_max):\n",
    "            continue\n",
    "        idx_theo = abs(integrate_result.radial-tth_deg).argmin()\n",
    "        id0_max = abs(maxima-idx_theo).argmin()\n",
    "        id0_min = abs(minima-idx_theo).argmin()\n",
    "        I_max = integrate_result.intensity[maxima[id0_max]]\n",
    "        I_min = integrate_result.intensity[minima[id0_min]]\n",
    "        tth_maxi = integrate_result.radial[maxima[id0_max]]\n",
    "        I_thres = (I_max + I_min)/2.0\n",
    "        if minima[id0_min]>maxima[id0_max]:\n",
    "            if id0_min == 0:\n",
    "                min_lo = integrate_result.radial[0]\n",
    "            else:\n",
    "                min_lo = integrate_result.radial[minima[id0_min-1]]\n",
    "            min_hi = integrate_result.radial[minima[id0_min]]\n",
    "        else:\n",
    "            if id0_min == len(minima) -1:\n",
    "                min_hi = integrate_result.radial[-1]\n",
    "            else:\n",
    "                min_hi = integrate_result.radial[minima[id0_min+1]]\n",
    "            min_lo = integrate_result.radial[minima[id0_min]]\n",
    "            \n",
    "        f = interp1d(integrate_result.radial, integrate_result.intensity-I_thres)\n",
    "        try:\n",
    "            tth_lo = bisect(f, min_lo, tth_maxi)\n",
    "            tth_hi = bisect(f, tth_maxi, min_hi)\n",
    "        except:\n",
    "            pass\n",
    "        else:\n",
    "            FWHM.append(tth_hi-tth_lo)\n",
    "            tth.append(tth_deg)\n",
    "    return tth, FWHM\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Peak error:\n",
    "\n",
    "def calc_peak_error(integrate_result, calibrant, tth_min=10, tth_max=95):\n",
    "    \"calculate the tth position and FWHM for each peak\"\n",
    "    peaks = find_peaks_cwt(integrate_result.intensity, [10])\n",
    "    df = numpy.gradient(integrate_result.intensity)\n",
    "    d2f = numpy.gradient(df)\n",
    "    bad = d2f==0\n",
    "    d2f[bad] = 1e-10\n",
    "    cor = df / d2f\n",
    "    print((abs(cor)>1).sum())\n",
    "    cor[abs(cor)>1] = 0\n",
    "    cor[bad] = 0\n",
    "    got = numpy.interp(peaks-cor[peaks], \n",
    "                       numpy.arange(len(integrate_result.radial)), \n",
    "                       integrate_result.radial)\n",
    "    mask = numpy.logical_and(got>=tth_min,\n",
    "                             got<=tth_max)\n",
    "    got = got[mask]\n",
    "    target = numpy.array(calibrant.get_2th())*integrate_result.unit.scale\n",
    "    mask = numpy.logical_and(target>=tth_min,\n",
    "                             target<=tth_max)\n",
    "    target = target[mask]\n",
    "    print(len(got), len(target))\n",
    "    d2 = distance_matrix(target.reshape(-1, 1 ),\n",
    "                         got.reshape(-1, 1), p=1)\n",
    "    \n",
    "    return target, target-got[d2.argmin(axis=-1)]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXxU5d3//ysLCWvCbkAxkoCIWFwgUnDBDTdwq6QVFUH9ooJrMRFR2ygIEvA2ilXBarXF6l3tT8GlsokCt6hYiyi7gMq+uQAiEJK8f3/gTDOZ7cyVmTnJzOv5eJxH66xnMlfI532uzQgAAABA0jBunwAAAACA+CEAAAAAAEmEAAAAAAAkEQIAAAAAkEQIAAAAAEASIQAAAAAASYQAAAAAACQRAgAAAACQRAgAAAAAQBIhAAAAAABJhAAAAAAAJBECAAAAAJBECAAAAABAEiEAAAAAAEmEAAAAAAAkEQIAAAAAkEQIAAAAAEASIQAAAAAASYQAAAAAACQRAgAAAACQRAgAAAAAQBIhAAAAAABJhAAAAAAAJBECAAAAAJBECAAAAABAEiEAAAAAAEmEAAAAAAAkEQIAAAAAkEQIAAAAAEASIQAAAAAASYQAAAAAACQRAgAAAACQRAgAAAAAQBIhAAAAAABJhAAAAAAAJBECAAAAAJBECAAAAABAEiEAAAAAAEmEAAAAAAAkEQIAAAAAkEQIAAAAAEASIQAAAAAASYQAAAAAACQRAgAQRS+88IKMMXrhhRfi9p7GGPXt2zdu7weE88QTT6hr165q2LChjDEqKytz+5SsDBkyRMYYff31126fSq1s3bpV1113nY488kilpqbKGKMffvjB+vW+/vprGWM0ZMiQ6J1kAujbt6+MoaxC/UBLRb1mjPE5UlNT1apVK5199tn6+9//HvfzIQDEzvbt23XXXXepU6dOatiwoXJycnTuuefqz3/+s9unhmpeeeUVGWN08skn695771VJSYk++ugjt08roJKSEhlj9P777we8P1ECwAUXXKCUlBRdffXV+uMf/6iSkhLt378/5HNC/btCAAiMAID6hJaKes1T+JeUlKikpET33XeffvOb3ygtLU3GGP3+97+P6/kQAGLj559/VufOnWWM0Yknnqi7775bN910k3r06KFjjjnG7dNDNddcc42MMdq8ebPbpxJWuACwZcsWrVy5UuXl5fE9sSg6ePCgUlNT1a9fv4ieRwCIHAEA9QktFfWaJwDUNHfuXKWkpCglJSWuV+8IALExY8YMGWN0+umnq7Ky0ue++lBoJpOzzz673hRB4QJAIvj222+tinUCQOQIAKhPaKmo14IFAEnq2rWrjDF69dVXfW7/+OOPdeWVV+qII45QgwYNdNRRR+mmm24KWEj++9//1h133KHu3burRYsWyszMVKdOnTRy5Eh9//33fo8PFgC+//57nXHGGUpJSdH48ePDfq6DBw/qiSee0Mknn6zmzZurUaNGys3N1aWXXqo5c+b4/Qz69u2rnTt3atiwYcrJyVFGRoaOP/54/eUvfwn42k8++aQuuugiHX300crIyFCLFi107rnn6l//+lfA88nNzVVubq5+/PFH3XrrrWrfvr0yMzPVtWtXPfHEE6qqqgr4vEh+1qG88847MsZoxIgRET3PiZdffllnnXWWsrOzlZmZqeOOO05jx47VgQMH/B7r+Vlv3bpVN954o9q3b6/U1FTv9+0ZMrJu3TpNnjxZv/rVr9SwYUOfQqqyslLPPPOMevbsqSZNmqhx48bq2bOnnn76ab9w4+Q9g7H5npcuXaqrrrpKubm5ysjIUOvWrXXyySfrzjvvDHsV3FNMBzqk8EVjoOLp/fff9/bwLVmyRBdffLGys7PVqFEjnXnmmfrwww8DvlZFRYWeeeYZ9enTR1lZWWrYsKHy8/N14403as2aNZIOt+lQ5yuFHgL0j3/8Q2eccYb39U844QSNHz8+YLvx/P789NNPKioqUocOHZSRkaH8/HxNmDAh6O9PMGvWrNHgwYPVvn17NWjQQO3atdPgwYO9n636+wb6fKEKd8+/YYGOkpISSb7f5ddff63f/e53atWqlTIzM9WjRw+99dZbQV8/kt+3YFavXq1Ro0apR48eat26tTIyMnT00Udr2LBh2rhxo9/jbdvRli1bNHToULVp00YNGzbUiSeeqBdffNHn9aoLFQBmzpypiy66SK1atVJGRoby8vJUVFRUq7kYQG0QAFCvhQoAxx13nIwxeu2117y3Pf/880pLS1Pjxo111VVXqbi4WJdffrlSU1PVrl07ffvttz6vcfPNN6tt27YqLCzUyJEjddddd+mMM86QMUZdu3bVnj17fB4fKAB8++236tq1qxo0aKBp06Y5+lyDBg2SMUYnnHCC7rjjDo0aNUqDBw9Wx44ddffdd/v9DE488UQde+yxOuGEE3Tbbbdp2LBhat68uYwxevHFF30ev3XrVqWmpur000/XjTfeqHvvvVdDhgxRy5YtZYwJOKY+NzdX7dq1U8+ePb0B6LbbblO7du2CFuaR/qxDOXTokE499VRlZ2drxYoVjp8XzvXXXy9jjI466ijdcMMNGjlypPr06SNjjM466ywdOnTI5/HGGP3qV79Sbm6uunXrpttuu0133HGHt6D2FIwDBgxQdna2rr76ao0aNUr33Xef9zWuvvpqGWPUoUMH3Xnnnbrrrru8hdrVV1/td47h3jOYSL/npUuXqmHDhmrUqJF+97vf6d5779WIESN0/vnnq0GDBtq7d2/I93v//fdVUlLi/SyeYXmBisZAQgWA/v37q1GjRjrnnHN09913q7CwUKmpqWrYsKFWrVrl85yDBw+qX79+3p/xLbfconvuuUe//e1v1bJlS+/vZllZmfc9hwwZ4ne+UvAAMHr0aBlj1Lp1a91yyy0qKipSt27dvGHt4MGDPo/Pzc1V+/btddppp6ljx4666aabNGLECLVv317GGD344IMhf7bVLV68WFlZWUpJSdFll12m0aNH64orrlBKSoqysrK0ePFi72PLysp05513ev+N8Hy+N954I+jrL1myxBvmcnNzfX4unp4Sz3d51llnqU2bNurVq5fuuusuXXfddcrMzFRqaqrmzZvn99qR/r4F88gjjyg7O1uXX365br/9dt1999268MILlZKSopycHG3atMnn8TbtaPv27d62fOaZZ+ree+/V0KFD1bhxY11++eURBYAHH3xQxhi1bNlS1113nYqKinT++efLGKPjjz9eu3fvdvS5gWgiAKBeCxYA5syZ4x0C9M0330g6fNWoQYMGys/P9/sDMXfuXKWmpuryyy/3uf2bb75RRUWF3+s/99xzMsZowoQJPrfXDACff/652rVrp6ysLL8r98H8+OOPSklJUY8ePQK+965du3z+2/MzuPHGG30ev3z5cqWlpalr164+jz9w4EDAq2Q//vijunXrphYtWujnn3/2uc/zh/C0007zuVL33XffKS8vT8YYzZ8/33u7zc86lJ07d3oLhSOOOEJLly51/NxgPN/VFVdc4fd5PQXQ448/7nO752c9ePDggMWKp2Bs37691q9f73f/yy+/7J0gW72g/umnn9SjRw8ZY/wmr4d7z2Ai/Z5HjhwpY4ymT5/u95zvv/8+YO9EIMGKoNoEgEC9alOmTJExRsOHD/e53VOcX3LJJX5XlQ8cOKAdO3Z4/9tmEvCiRYu8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Ll2iMgRIOlzke3pajj76aI0YMUKjRo3S1VdfrdatW/t85hUrVig1NVVHHHGERo4cqbFjx2rs2LHe+4N9n/fcc4+MMWrbtq1GjBih4uJinXDCCd6r84H2AYhGAJAOb67XrFkzpaam6oorrtDo0aP1m9/8RqmpqWrWrJk+/vhjn8fbBoCrrrrK+2/WH//4R40dO9Yb8m0CgBT571u4czvhhBM0cuRI3XjjjTr66KN17LHH6qSTTopKO9q2bZv339y+fftq9OjRfvsAPPTQQ44+94QJE5SSkqLGjRtr4MCBKi4u1vDhw3XxxRerSZMmuuCCCxx9biCaCACo1yINANLhFR6GDBnisztqt27ddNNNN+m9997zeex3332n4cOHKzc3V5mZmcrLy9Po0aO1b9++gH80gu0EXFVVpdtuu03GGJ1//vkBr7R6/PDDD3rooYd09tlnq3379srIyFBOTo769u2rl19+2W9ScaQBQJLeeust9erVS02bNlV2drb69eun+fPnBz1/z2f98ccfvRsYZWRk6Ljjjgu5E3AkP+twXnrpJZ199tnKzs727io8aNAg7y6en3zyiXfS67vvvuv4dd966y31799fbdq0UYMGDXTEEUeooKBA999/v1auXOnz2GgEgMrKSj311FPq0aOHGjVqpEaNGumUU07Rn/70p5A7AduI5HueNWuWhg4dqq5duyorK0uNGzfWscceq9tvvz2iCYqhAoB0uAfi+OOPV0ZGho444gjddNNN2rVrV1QmAXscOnRITz75pAoKCry7LXfq1EnDhg3zW71n2rRpOvHEE31WSfII9X2+8sorOu2009S0aVNlZmbq+OOP18MPPxxwDko0A4AkrVq1Stdee623RzAnJ0fXXHON32ZWkn0A2L59uwYNGqS2bdt6Vz/zfA+2AUCK7PctmH379um+++5Tfn6+MjMzddRRR2nEiBFRb0ebNm3Sddddp9atW/vsBOzpbanZ4xjqcy9cuFCFhYVq166dGjRooNatW+vEE0/U73//e3366aeOPjcQTQQAAGGFKmAAIJl4hpnNnDnT7VMBrBEAAIRFAACQbAKN2f/iiy/UtGlTtWzZ0tGKY0BdRQAAEBYBAECyadeunc444wwNHz5cRUVFuuyyy5Senq7U1NSI5hoBdREBAEBYBAAAyebBBx/USSedpObNmystLU2tWrVS//79I5qvAdRVBAAAAAAgiRAAAAAAgCRCAAAAAACSCAEAAAAASCIEAAAAACCJEABc9MMPP2j69On67LPPtGzZMg4ODg4ODg4OjgiOzz77TNOnT9cPP/zgdllXrxAAXDR9+nTv1vMcHBwcHBwcHBx2x/Tp090u6+oVAoCLPvvsM2+jdTtBc3BwcHBwcHDUt8NzMfWzzz5zu6yrVwgALlq2bJmMMVq2bJnbpwIAAFDvUEvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgIucNNqqqirt3btXmzdv1vr167Vu3TqOenCsX79eO3bs0KFDh+LYogAASC4EADsEABeFa7RVVVXatm2bVqxYoRUrVuirr75yvbDlcHasXr1aK1as0DfffKOqqqo4tywAAJIDAcBOwgSAAwcO6J577lG7du3UsGFDnXrqqZo9e7aj527atEmFhYXKzs5Ws2bNdOmll2rdunU+j/n55591ww03qFu3bsrKylKTJk3UvXt3Pf744yovL7c653CNdu/evd4i8uDBg1bvAXdUVVVp8+bNWrFihXbv3u326QAAkJAIAHYSJgBcddVVSk9PV1FRkaZOnarevXsrPT1dCxcuDPm8vXv3qnPnzmrbtq1KS0v12GOPqUOHDjrqqKO0a9cu7+O+++479erVS8XFxXrqqaf0zDPPaPDgwUpJSdGgQYOszjlco/UUkBT/9dOhQ4e0YsUKbdy40e1TAQAgIREA7CREAPjkk09kjNGkSZO8t+3fv1/5+fnq3bt3yOeWlpbKGKPFixd7b1u5cqXS0tI0evTosO992223yRijrVu3Rnze4Rrt+vXr9dVXX0X8uqg71qxZo/Xr17t9GgAAJCQCgJ2ECADFxcVKS0vzG2oxfvx4GWO0YcOGoM8tKChQQUGB3+3nn3++8vPzw773o48+KmOMVq5cGfF5h2u0nvHkqL/Wrl3LdwgAQIwQAOwkRAA477zz1LVrV7/b586dK2OM3nzzzYDPq6ysVGZmpoYPH+533wMPPCBjjPbs2eNz+8GDB7Vz505t2LBBr7/+unJycpSbm2u12gsBIPHxHQIAEDsEADsJEQC6deumc845x+/25cuXyxijKVOmBHzezp07ZYzRmDFj/O576qmnZIzRqlWrfG5/5ZVXZIzxHj179tQXX3wR9hy3b9+uZcuW+RzTp08nACQ4vkMAQDjlFZVatHaX3v1yixat3aXyikq3T6neIADYSYgAkJeXp4suusjv9nXr1skYo7KysoDP27Bhg4wxKi0t9bvv+eeflzFGS5Ys8bl927ZtmjNnjl577TXdcsst6t27tz766KOw51hSUuITHKofBIDExXcIAAimvKJST8xdox5jZyt31Nveo+fYOXpi7hrtO3iIYBAGAcBOQgSAePYA1DRu3Dg1bdo07CRgegD8vfDCC0FD0ahRo9S1a1d1797d73mvv/66jDE688wz/e7zBLdZs2b5vMenn34a8Bz69u2rbt26+dyWm5srY4zOPffcgM959tlnvecZ7HU9Ev07BADYKa+o1NC/fKLcUW/rmGrFf/Wj833vBAwGBIH/IgDYSYgAEM85ADWtXr06ZMgIxc05AHWhu9FTnI8ZM0bTpk3zOZYsWaJhw4YpNTVVP/74o8/z7r77bqWnp6tRo0Z+ezDccMMNSktL835vtgGgYcOGSk1NDRjs+vbtq4YNGxIAAADWnpi7JmDRH+rwBIXrX1hMCPgFAcBOQgSAoqKigKsAjRs3LuwqQD179gy4ClC/fv2Ul5cX9r0///zzoMOIwnEjAITrboznPyjhivO//vWvMsboX//6l8/tv/71r3X11VfLGOM3/OrYY4/VySef7Pg9ggWAc889V1lZWXr88cd97tu4caNSU1N15ZVXEgAAAFbKKyrVY+zsoFf+nRyT565x/F5uX/CLJQKAnYQIAB9//LHfPgAHDhxQp06d1KtXL+9t3377rd9ynRMmTPAr5FatWqW0tDSNGjXKe9vOnTtVVVXl996efQDee++9iM873gEgVHejG1cVwhXnnjkc999/v/e2/fv3KyMjQ//85z+Vl5enRx991Hvfjh07ZIzR7bff7vg9ggWA/v37a+jQoTr11FN97ps4caJatWrlHQZEAACAus+NIjjUey5au8u68Pf8ze45dk7Iz1GXLvjFEgHATkIEAEkqLCxUenq6iouLNXXqVPXp00fp6emaP3++9zF9+/aVMb4fec+ePcrPz1fbtm01ceJElZWVqUOHDmrfvr127NjhfVxZWZm6dOmiUaNGaerUqXr00UfVr18/GWN0ySWXWJ1zvAOA0+5Gp1cVastTnM+dO1c7d+70OTzat2+vvn37ev97wYIFMsZo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rmXLlvkc06dPp9ECAABYIgDYSYgAkJeXp4suusjv9nXr1skYo7KysoDP27Bhg4wxKi0t9bvv+eeflzFGS5YsCfjcffv26aSTTlKLFi20efPmsOdYUlIiY0zAg0YLAAAQOQKAnYQIAPHuAaioqNAll1yijIwMvffee47OkR4AAACA6CIA2EmIABDvOQDXX3+9UlJS9PLLL9fqvGm0AAAA9qil7CREACgqKgq4CtC4cePCrgLUs2fPgKsA9evXT3l5eQHfyxijxx9/vNbnTaMFAACwRy1lJyECwMcff+y3D8CBAwfUqVMn9erVy3vbt99+q5UrV/o8d8KECTLG6NNPP/XetmrVKqWlpWnUqFE+j504caKMMbrvvvuict40WgAAAHvUUnYSIgBIUmFhodLT01VcXKypU6eqT58+Sk9P1/z5872P6du3r4zx/ch79uxRfn6+2rZtq4kTJ6qsrEwdOnRQ+/bttWPHDu/jXn/9dRlj1LlzZ02bNs3v2LZtW8TnTKMFAACwRy1lJ2ECwP79+1VUVKScnBxlZmaqoKBAM2fO9HlMoAAgSRs3btTAgQOVlZWlpk2basCAAfrqq698HhNqFR9jjN5///2Iz5lGCwAAYI9ayk7CBID6iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA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l12mhIQEdenSRS+88ILnNeoTyGdjc06Bno+/9x7o5xmMSy+9VJdeeqnn3wsXLtR5552nr7/+2uu4/fv3yxijyZMn1/t6X331lYwxevnll732z58/X4MGDfL8u6qqStnZ2dq8ebPXcWlpabrrrrss3w0ABIYAACCi9O3bV23btvW5beNc3377rc4//3y5XC7dc889euGFFzRp0iT96le/8lw9WLlypbp3767HH39cixcv1iOPPKLU1FTl5OR4GtdPP/1UgwcPljFGzz77rJYvX67ly5frxIkT9T528OBBderUSdnZ2XryySdVXFysG2+80XPs2Wob4K5du+qmm27S888/r4ULF9YbAC655BLdcsstev7553XnnXfKGON1O4kkffzxx0pISFDnzp01c+ZMTZ8+Xeeff766d+/eYAAI5LMJ9pyCOZ9z33swn2egTp8+rQsuuEB9+/b17OvTp48KCgp0+PBhr+3f//63jDGaPXt2va/5yiuvyBij7du3e+3fvHmzOnbsqP379+vYsWO64447VFhY6PP8a6+9VpdddpnV+wGAQBEAAESUd955Ry1atFCLFi105ZVX6oEHHtC6detUVVXlddywYcMUFxenrVu3+rxG7T3WP/74o89jtY3esmXLPPtsbgEaOXKkOnbsqCNHjnjtv/XWW9WuXTuvv13bQA8ePNjr2PoCwIgRI7yOvfnmm5Wenu61r7CwUC6XS99++61n35dffqmWLVs2GAAC/WyCOadgzufc9x7M5xmo5cuXyxjjuYrgdruVlJTk96pO7bZy5cp6X/Oxxx6TMUbff/+9z2NPPPGEMjIylJaWpjFjxvi9zWv06NFKTEwM+r0AQDAIAAAizpYtW3TzzTfL5XJ5GrOMjAytXbtWklRdXa3k5GTddNNNAb9mVVWVjhw5osOHDyslJUX33HOP57FgA8Dp06eVkpKi0aNH+/ySXNvYvv/++57jaxvo9957z+u16wsAW7Zs8Tp27ty5Msbo+PHjkmqa2cTERN12220+51xYWNhgAAj0swn0nII9n7Pfe7CfZyB2796t5ORkXXnllXK73ZKkL774wnPVoqSkxGurvdLT0FSg48aNU8uWLYM6l7M9+OCDMsb4vZ0LAEKFAAAgYp06dUpbtmzRww8/rNatW6tVq1batWuXDh48KGOMHn300Xqf/+OPP2rSpEnq1KmTzjvvPK9feu+44w7PccEGgPLy8np/RTbG6I033vAcX9tAl5WVeb12fQHg4MGDfo+tvXf9v//9r4wxevzxx33O+d577w3oCkAgn02g5xTs+Zz93oP9PBty4MABdenSRdnZ2V5XI9atWydjjP7xj3/4PKdPnz7KzMxs8LUbGwAeeOABGWOsrmgAQKAIAACiQm3DOGXKlIADwMiRIxUXF6f77rtPK1eu1DvvvKOSkhKlp6fr9ttv9xwXbAA4cOCAjDEaOnSozy/JtdvZMxbVNtCHDx/2+578BYCGjm1sAAj0swn0nBoTAIL9POtTUVGhHj16KC0tTbt27fJ67I033vB7JaaiokLx8fEaO3Zsg69fewvQd999F9D5nGvUqFFyuVxWzwWAQBEAAESFHTt2yBijMWPGBHwLULt27Xx+za6srFSLFi28mtynn366zgDg7zG32622bdv63NNfl6YIAG63W61bt7a+BSjQzybQcwr2fM59bjCfZ10qKyt19dVXy+Vy6YMPPvB5vKSkRMYYvfnmm177582bJ2OMPv300wb/Ru0g4ECO9YdBwACaAwEAQER59913/S6UNGvWLBljNHfuXEmBDQJOS0vT8OHDvR6bPXu2jDFeTW5xcbGMMfrkk098Xquux4YPH674+Hi/sxUdOnTI699NEQAk6YYbbrAeBBzoZxPMOQVzPuc+N5jP0x+3260bb7xRLVu29Gnwa5WXlysuLk5/+ctfPPv27dun9u3ba9iwYQ3+DUn6z3/+4zWwOFhpaWmaMGGC1XMBIFAEAAARpaCgQL/4xS903333afHixVqwYIFuu+02tWjRQp07d/ZM8bl//35lZWV5pgFdtGiRpkyZooKCAs8xw4YNU4sWLXT33Xdr0aJFGj58uDp16uRzm8uWLVtkjNH111+vZcuW6bXXXvPM4FLXYwcPHlROTo5cLpfn9Z966ikVFRUpNTXV6z01VQD46KOPPOsfzJo1SzNmzND555+vHj16NBgAAv1sgjmnYM7H3zSggX6e/tx9990yxqiwsNAzXevZW61bbrlFrVq10uOPP65nnnlG2dnZ6t69u2dwdSB+/etfW12tqF0IbP369UE/FwCCQQAAEFHeeustjRgxQr/85S/Vpk0bxcfHKy8vTxMmTPC5D/ybb77RsGHDlJGR4Vl4avz48Z6FwGrnY2/fvr3atGmjfv366fPPP1dOTo5Pkzt16lRdcMEFiouL82m063qsvLxc48ePV3Z2tlq1aqWsrCz16dNHixcv9nrtpgoAkrRhwwZdcsklio+PV25urpYuXar7779frVu3rvdzDuazCeacAj0ff88N9PP0p1evXvUOIq519OhR3XLLLUpKSlJmZqYmTJgQ9P38c+fOVZs2bYIeyPvggw/qwgsv9HuFCwBCiQAAADHmpptuUl5entOn4RFu59NYFRUVSktL09KlSwN+zsmTJ5WVlaXnnnuuCc8MAGoQAAAgip37K3RpaalatWqlO++8k/NpQjNnztRFF12k6urqgI4vLi5Wdna2Tp482cRnBgAEAACIallZWXrooYe0ePFiPfroo0pLS1NSUpJKS0s5HwCIUQQAAIhiw4cPV05OjhISEpScnKx+/fpp27ZtnA8AxDACAAAAABBDCAAAAABADCEAAAAAADGEAAAAAADEEAIAAAAAEEMIAAAAAEAMIQAAAAAAMeT/ARe74IO/C8XcAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "29209\n",
      "81 60\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(*calc_fwhm(res_mg, LaB6_new), \"o\", label=\"FWHM\")\n",
    "ax.plot(*calc_peak_error(res_mg, LaB6_new), \"o\", label=\"offset\")\n",
    "ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "ax.set_xlabel(res_mg.unit.label)\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Module 1 \n",
    "\n",
    "We can apply the same procdure for the second module ... and try to rationalize the procedure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "module_id = 1\n",
    "name = ds_names[module_id]\n",
    "ds = data[name]\n",
    "zero_pos = 64\n",
    "frame_start = 103\n",
    "frame_stop = 123"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 0 geometries labeled: .\n"
     ]
    }
   ],
   "source": [
    "param1 = {\"dist\": 0.72, \n",
    "          \"poni1\": 640*50e-6, \n",
    "          \"poni2\": 4e-3, \n",
    "          \"rot1\":0, \n",
    "          \"offset\": -get_position(zero_pos), \n",
    "          \"scale\":1, \n",
    "          \"nrj\": nrj}\n",
    "\n",
    "#Lock enegy for now and a couple of other parameters\n",
    "bounds1 = {\"nrj\": (nrj, nrj),\n",
    "           \"dist\": (0.7, 0.8),\n",
    "           \"poni2\": (4e-3, 4e-3),\n",
    "           \"rot1\": (0,0),\n",
    "           \"scale\":(1,1), }\n",
    "\n",
    "gonioref1 = GoniometerRefinement(param1, \n",
    "                                 get_position, \n",
    "                                 trans, \n",
    "                                 detector=modules[name], \n",
    "                                 wavelength=wl, \n",
    "                                 bounds=bounds1\n",
    "                                 )\n",
    "print(gonioref1)\n",
    "goniometers[name]=gonioref1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GoniometerRefinement with 20 geometries labeled: data_03_0103, data_03_0104, data_03_0105, data_03_0106, data_03_0107, data_03_0108, data_03_0109, data_03_0110, data_03_0111, data_03_0112, data_03_0113, data_03_0114, data_03_0115, data_03_0116, data_03_0117, data_03_0118, data_03_0119, data_03_0120, data_03_0121, data_03_0122.\n",
      "1.4524700202830549e-06\n"
     ]
    }
   ],
   "source": [
    "#Exctract frames with peak#0\n",
    "for i in range(frame_start, frame_stop):\n",
    "    cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "    peak = peak_picking(name, i)\n",
    "    if len(peak)!=1: \n",
    "        continue\n",
    "    cp.append([peak[0]], ring=0)\n",
    "    img = (ds[i]).reshape((-1,1))\n",
    "    sg = gonioref1.new_geometry(\"%s_%04i\"%(name,i), \n",
    "                                image=img, \n",
    "                                metadata=i, \n",
    "                                control_points=cp, \n",
    "                                calibrant=LaB6)\n",
    "    sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "\n",
    "print(gonioref1)\n",
    "print(gonioref1.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 1.4524700202830549e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.72000000e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.3431861472723482e-11\n",
      "     jac: array([ 1.37377624e-07,  1.03462536e-07,  2.38592839e-09, -2.23238045e-09,\n",
      "        9.89688559e-10,  1.85837277e-07, -5.81633804e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20006378e-01,  3.28683965e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.71999891e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.3431861472723482e-11\n",
      "GonioParam(dist=0.7200063780313144, poni1=0.03286839651397956, poni2=0.004, rot1=0.0, offset=-77.19998908850266, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03286839651397956\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20006378e-01,  3.28683965e-02,  4.00000000e-03,  0.00000000e+00,\n",
       "       -7.71999891e+01,  1.00000000e+00,  1.70270825e+01])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref1.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Number of peaks found and used for refinement\n",
      "1183\n",
      "Residual error before fitting:  6.334769973618362e-07\n"
     ]
    }
   ],
   "source": [
    "#Exctract all frames with peak>0\n",
    "tths = LaB6.get_2th()\n",
    "#print(tths)\n",
    "for i in range(frame_stop, ds.shape[0]):\n",
    "    frame_name = \"%s_%04i\"%(name, i)\n",
    "    if frame_name in gonioref1.single_geometries:\n",
    "        continue\n",
    "    peak = peak_picking(name, i)\n",
    "    ai=gonioref1.get_ai(get_position(i))\n",
    "    tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "    tth_low = tth[20]\n",
    "    tth_hi = tth[-20]\n",
    "    ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "    valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "    cnt = valid_peaks.sum()\n",
    "    if (len(peak) ==  cnt) and cnt>0:    \n",
    "        cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "        #revert the order of assignment if needed !!\n",
    "        if tth_hi < tth_low:\n",
    "            peak = peak[-1::-1]\n",
    "        for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "            cp.append([p], ring=r)\n",
    "        img = ds[i].reshape((-1,1))\n",
    "        sg = gonioref1.new_geometry(frame_name, \n",
    "                                    image=img, \n",
    "                                    metadata=i, \n",
    "                                    control_points=cp, \n",
    "                                    calibrant=LaB6)\n",
    "        sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "        #print(frame_name, len(sg.geometry_refinement.data))\n",
    "\n",
    "print(\" Number of peaks found and used for refinement\")\n",
    "print(sum([len(sg.geometry_refinement.data) for sg in gonioref1.single_geometries.values()]))\n",
    "print(\"Residual error before fitting: \", gonioref1.chi2())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 6.334769973618362e-07\n",
      "[ 7.20006378e-01  3.28683965e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.71999891e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.3797542164386038e-07\n",
      "     jac: array([-4.62580205e-07,  2.40834463e-08,  5.10766142e-06, -3.67570741e-06,\n",
      "        1.35589318e-11,  2.65546301e-04,  1.99388955e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20006340e-01,  3.33754761e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.71999827e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.3797542164386038e-07\n",
      "GonioParam(dist=0.7200063395001164, poni1=0.033375476115602126, poni2=0.004, rot1=0.0, offset=-77.19998271232215, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03286839651397956 --> 0.033375476115602126\n",
      "Cost function before refinement: 1.3797542164386038e-07\n",
      "[ 7.20006340e-01  3.33754761e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.71999827e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 8.828686563664207e-10\n",
      "     jac: array([ 6.56076518e-08,  6.55451977e-07, -1.75522725e-07,  1.26240119e-07,\n",
      "        7.93555705e-09,  2.91447578e-07,  1.05708096e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 117\n",
      "     nit: 13\n",
      "    njev: 13\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20682081e-01,  3.36782425e-02,  4.05801126e-03, -4.44860018e-05,\n",
      "       -7.71999788e+01,  9.98967223e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 8.828686563664207e-10\n",
      "GonioParam(dist=0.7206820809610033, poni1=0.033678242508301, poni2=0.00405801125545738, rot1=-4.448600179438364e-05, offset=-77.19997879310895, scale=0.9989672227193093, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9989672227193093\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20682081e-01,  3.36782425e-02,  4.05801126e-03, -4.44860018e-05,\n",
       "       -7.71999788e+01,  9.98967223e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonioref1.refine2()\n",
    "gonioref1.set_bounds(\"poni1\", -1, 1)\n",
    "gonioref1.set_bounds(\"poni2\", -1, 1)\n",
    "gonioref1.set_bounds(\"rot1\", -1, 1)\n",
    "gonioref1.set_bounds(\"scale\", 0.9, 1.1)\n",
    "gonioref1.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "area_pixel=0.04011793214486481 area_sum=0.05472285778563535, Error= -0.3640498116411517\n",
      "area_pixel=0.06755918226705582 area_sum=0.07017344439747103, Error= -0.038695881783785545\n",
      "area_pixel=0.06470384723321665 area_sum=0.06854713835898787, Error= -0.05939818558112286\n",
      "area_pixel=0.038258287348172715 area_sum=0.05426051394830549, Error= -0.4182682422373795\n",
      "area_pixel=0.06290299608614092 area_sum=0.06750646087344028, Error= -0.07318355362589196\n",
      "area_pixel=0.06866181632504009 area_sum=0.0710979827571788, Error= -0.03548065813764767\n",
      "area_pixel=0.045481003274128184 area_sum=0.05690843539150094, Error= -0.2512572567604998\n",
      "area_pixel=0.051372066242729275 area_sum=0.060437735665688296, Error= -0.17647079601829507\n",
      "area_pixel=0.08412331180916155 area_sum=0.08447601010651973, Error= -0.004192634476377893\n",
      "area_pixel=0.07467387290401106 area_sum=0.07603231757541912, Error= -0.018191699701370204\n",
      "area_pixel=0.0624099895059711 area_sum=0.0673026438866445, Error= -0.07839537259023732\n",
      "area_pixel=0.04195900037770173 area_sum=0.05573620360979919, Error= -0.32834917676968967\n",
      "area_pixel=0.05715571439263911 area_sum=0.06402386234646332, Error= -0.12016555171793514\n",
      "area_pixel=0.08038761552922224 area_sum=0.08112738452122062, Error= -0.009202524382993493\n",
      "area_pixel=0.07843450940492147 area_sum=0.07937664635982263, Error= -0.012011765765465969\n",
      "area_pixel=0.05907229451306506 area_sum=0.06522039353885213, Error= -0.10407753882706032\n",
      "area_pixel=0.040121002784973214 area_sum=0.055076739171659624, Error= -0.3727657672676088\n",
      "area_pixel=0.061909101662060095 area_sum=0.06698716844120342, Error= -0.08202455927825762\n",
      "area_pixel=0.07486883011958412 area_sum=0.0762213872653684, Error= -0.01806569093738887\n",
      "area_pixel=0.08390728427714045 area_sum=0.08427957645881265, Error= -0.004436947100355958\n",
      "area_pixel=0.052353526345367385 area_sum=0.061054313175336744, Error= -0.16619294701510143\n",
      "area_pixel=0.05061563353131504 area_sum=0.060016745022665983, Error= -0.18573533186213373\n",
      "area_pixel=0.08664846785681313 area_sum=0.08667317488344674, Error= -0.000285140952225944\n",
      "area_pixel=0.07201199510202194 area_sum=0.07377214053011852, Error= -0.024442392209838324\n",
      "area_pixel=0.062293472479096224 area_sum=0.06710802538833513, Error= -0.07728824092852621\n",
      "area_pixel=0.04161483391746934 area_sum=0.055387896893291044, Error= -0.3309652275228704\n",
      "area_pixel=0.06664231871870818 area_sum=0.06966942981335798, Error= -0.045423255865795896\n",
      "area_pixel=0.06246630299088629 area_sum=0.06709144439642731, Error= -0.07404218249022702\n",
      "area_pixel=0.04218618802653751 area_sum=0.05535486043373737, Error= -0.312156016535934\n"
     ]
    }
   ],
   "source": [
    "mg1 = gonioref1.get_mg(position)\n",
    "mg1.radial_range = (0, 95)\n",
    "images = [i.reshape(-1, 1) for i in data[name]]\n",
    "res_mg1 = mg1.integrate1d(images, 50000)\n",
    "results[name] = res_mg1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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fSRt27aVo446Sm6//XaZOHGiTJw4MTe879mzRwYPHixBEMg//uM/yle+8hX59re/LaNGjZKLL75YiouL5Xvf+16DPW+99dZc/h133CF33323dOvWLfd7AE455ZQG+c0JwAcffJD78Zxrr71Wxo4dK9dee60cdthhMnTo0CbP+eBjT7t27Spjx46ViRMnyvTp0yPfCxGR66+/Pndfw5133inf+ta3cvcfHPp7CQ6CAABAlkEAPCRMAL7//e9H3rB31FFHNbkfAgDQPAefix/2+vR/FwcF4NBX69atpVOnTnLxxRdLeXm5rFixInYfWgIgIvKHP/xBLrjgggZP1zl03/3798vjjz8ul112mRxzzDFy2GGHSefOneWiiy6SSZMmNXrKTX19vTz00ENyxhlnyOGHHy4nnHCCfOMb35CPP/5Y2rVr1+ipOc0JgMiB5+r/y7/8ixx//PG53wL86KOPRp7zgw8+KGeeeaYcfvjhjT6bqN8E/PDDD0uvXr2kTZs20qZNGzn//PPlRz/6UeRvAm4KBAAAWjoIgIeECcDBb5c/8cQT8txzzzV6hQ34CAAApMnq1aslCAIZNmyY61YAACAPEAAPCROA//zP/5QgaPqX2USBAACABuvXr2/0r+Xbt2+Xq666SoIgkF/96leOOgMAgDggAB4SJgBbtmyRo446SgYMGNDkkzs2bNjQ5H4IAABoUFFRISeddJLcdNNNUlFRISNGjJATTzxRgiCQQYMGyf79+123CAAAeYAAeMT06dNl4sSJMnr0aAmCQK677rpGN+7NnTtXiouLpWfPnvLd735XZs6cKffee6+ce+65cvvttzfY7+DaYcOGSRAEMmrUqFzsUN58881c/IwzzpAOHTrk/rxgwQJr5w8AfvP888/LlVdeKZ06dZLDDz9c2rZtK+eee678+7//e96PEwUAAPcgAB5RWloaegPioTebVVdXyxVXXCFHH320tG7dWrp27SojR46UP/3pTw32i7qh8VAO3qjX1CvspkMAAAAAaJkgAAAAAAAABQQCAAAAAABQQCAAAAAAAAAFBAIAAAAAAFBAIAAO2bx5s8yfP1+WL18uNTU1vHjx4sWLFy9evGK8li9fLvPnz5fNmze7HutaFAiAQ+bPnx/5pB5evHjx4sWLFy9ezb/mz5/veqxrUSAADlm+fHnuonVt0Jl49e4tNUFw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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "LaB6_new = get_calibrant(\"LaB6\")\n",
    "LaB6_new.wavelength = hc/gonioref1.param[-1]*1e-10\n",
    "p = jupyter.plot1d(res_mg1, calibrant=LaB6_new)\n",
    "p.figure.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXxU1f3/8ZNkSEIghH1JiSkJIItFFAKCSxABtSJqJZVFBOULinsxgAg2CBUJ9gtuKPgVqcXa+rWPSrVWDVgXKgp++SHKvqnsW1VAJECS9+8POlMms2TmZJI7mbyej8d9+PDOvTP3zpzo533vOecaAQAAAKg1jNMHAAAAAKD6EAAAAACAWoQAAAAAANQiBAAAAACgFiEAAAAAALUIAQAAAACoRQgAAAAAQC1CAAAAAABqEQIAAAAAUIsQAAAAAIBahAAAAAAA1CIEAAAAAKAWIQAAAAAAtQgBAAAAAKhFCAAAAABALUIAAAAAAGoRAgAAAABQixAAAAAAgFqEAAAAAADUIgQAAAAAoBYhAAAAAAC1CAEAAAAAqEUIAAAAAEAtQgAAAAAAahECAAAAAFCLEAAAAACAWoQAAAAAANQiBAAAAACgFiEAAAAAALUIAQAAAACoRQgAAAAAQC1CAAAAAABqEQIAAAAAUIsQAAAAAIBahAAAAAAA1CIEAAAAAKAWIQAAAAAAtQgBAAAAAKhFCAAAAABALUIAAAAAAGoRAgAAAABQixAAAAAAgFqEAAAAAADUIgQAIIIWLVokY4wWLVpUbZ9pjFFubm61fR5QkSeffFIdO3ZUcnKyjDGaO3eu04dkZeTIkTLG6KuvvnL6UCpl3759uuWWW/STn/xE8fHxMsbou+++s36/r776SsYYjRw5MnIHGQNyc3NlDGUVagZaKmo0Y4zXEh8fryZNmujyyy/XH/7wh2o/HgJA1Tlw4IDuv/9+tW3bVsnJyWrZsqWuuOIK/c///I/Th4az/PGPf5QxRhdccIEefPBBFRQU6JNPPnH6sPwqKCiQMUbvv/++39djJQBceeWViouL07Bhw/TrX/9aBQUFOnHiRNB9gv13hQDgHwEANQktFTWau/AvKChQQUGBHnroIf3iF79QQkKCjDH61a9+Va3HQwCoGj/++KPatWsnY4zOP/98PfDAAxo7dqy6deumn/70p04fHs4yfPhwGWO0Z88epw+lQhUFgL1792rjxo06depU9R5YBJ08eVLx8fHq379/WPsRAMJHAEBNQktFjeYOAOUtW7ZMcXFxiouLq9ardwSAqvHXv/5VxhhdcsklKi0t9XqtJhSatcnll19eY4qgigJALPjmm2+sinUCQPgIAKhJaKmo0QIFAEnq2LGjjDH63//9X6/1n376qW688Ua1aNFCderUUevWrTV27Fi/heT//d//6d5771WXLl3UqFEjJSUlqW3btho/fry+/fZbn+0DBYBvv/1Wl156qeLi4jRz5swKz+vkyZN68skndcEFF6hhw4aqW7euMjMzNWjQIC1dutTnO8jNzdWhQ4c0ZswYtWzZUomJierUqZNefPFFv+/99NNP6+qrr9Y555yjxMRENWrUSFdccYX+/ve/+z2ezMxMZWZm6vvvv9ddd92l9PR0JSUlqWPHjnryySdVVlbmd79wvutg3nrrLRljdOedd4a1XyheeeUV9enTR2lpaUpKSlKHDh00Y8YMFRcX+2zr/q737dun0aNHKz09XfHx8Z7f291lZPv27Xrqqaf0s5/9TMnJyV6FVGlpqZ577jl1795d9erVU0pKirp3765nn33WJ9yE8pmB2PzOa9eu1ZAhQ5SZmanExEQ1bdpUF1xwge67774Kr4K7i2l/i1Rx0eiveHr//fc9d/jWrFmjn//850pLS1PdunV12WWX6eOPP/b7XiUlJXruuefUu3dvNWjQQMnJycrOztbo0aO1ZcsWSWfadLDjlYJ3AXr11Vd16aWXet7/vPPO08yZM/22G/ffzw8//KD8/HxlZGQoMTFR2dnZmjVrVsC/n0C2bNmiESNGKD09XXXq1FGrVq00YsQIz7md/bn+zi9Y4e7+b5i/paCgQJL3b/nVV1/ppptuUpMmTZSUlKRu3brpzTffDPj+4fy9BbJ582ZNmjRJ3bp1U9OmTZWYmKhzzjlHY8aM0a5du3y2t21He/fu1ahRo9SsWTMlJyfr/PPP1+9+9zuv9ztbsADwzjvv6Oqrr1aTJk2UmJiorKws5efnV2osBlAZBADUaMECQIcOHWSM0WuvveZZt3DhQiUkJCglJUVDhgzRhAkTdP311ys+Pl6tWrXSN9984/Uet99+u5o3b668vDyNHz9e999/vy699FIZY9SxY0cdPXrUa3t/AeCbb75Rx44dVadOHS1evDik8xo6dKiMMTrvvPN07733atKkSRoxYoTatGmjBx54wOc7OP/889W+fXudd955uvvuuzVmzBg1bNhQxhj97ne/89p+3759io+P1yWXXKLRo0frwQcf1MiRI9W4cWMZ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554bkS5A0pki332n5ZxzztGdd96pSZMmadiwYWratKnXOW/YsEHx8fFq0aKFxo8frxkzZmjGjBme1wP9nhMnTpQxRs2bN9edd96pCRMm6LzzzvNcnff3HIBIBADpzMP1UlNTFR8frxtuuEGTJ0/WL37xC8XHxys1NVWffvqp1/a2AWDIkCGe/2b9+te/1owZMzwh3yYASOH/vVV0bOedd57Gjx+v0aNH65xzzlH79u3VtWvXiLSj/fv3e/6bm5ubq8mTJ/s8B+CRRx4J6bxnzZqluLg4paSkaPDgwZowYYLGjRunn//856pXr56uvPLKkM4biCQCAGq0cAOAdGaGh5EjR3o9HbVz584aO3as3nvvPa9t//Wvf2ncuHHKzMxUUlKSsrKyNHnyZB0/ftzv/zQCPQm4rKxMd999t4wxGjBggN8rrW7fffedHnnkEV1++eVKT09XYmKiWrZsqdzcXL3yyis+g4rDDQCS9Oabb6pnz56qX7++0tLS1L9/f3344YcBj999rt9//73nAUaJiYnq0KFD0CcBh/NdV+Tll1/W5ZdfrrS0NM9ThYcOHep5iufKlSs9g17ffvvtkN/3zTff1DXXXKNmzZqpTp06atGihXJycjRlyhRt3LjRa9tIBIDS0lLNmzdP3bp1U926dVW3bl1deOGFeuaZZ4I+CdhGOL/zu+++q1GjRqljx45q0KCBUlJS1L59e91zzz1hDVAMFgCkM3cgOnXqpMTERLVo0UJjx47V4cOHIzII2O306dN6+umnlZOT43nactu2bTVmzBif2XsWL16s888/32uWJLdgv+cf//hHXXzxxapfv76SkpLUqVMn/eY3v/E7BiWSAUCSNm3apJtvvtlzR7Bly5YaPny4z8OsJPsAcODAAQ0dOlTNmzf3zH7m/h1sA4AU3t9bIMePH9dDDz2k7OxsJSUlqXXr1rrzzjsj3o52796tW265RU2bNvV6ErD7bkv5O47Bznv58uXKy8tTq1atVKdOHTVt2lTnn3++fvWrX+mzzz4L6byBSCIAAKhQsAIGAGoTdzezd955x+lDAawRAABUiAAAoLbx12f/iy++UP369dW4ceOQZhwDohUBAECFCAAAaptWrVrp0ksv1bhx45Sfn6/rrrtOLpdL8fHxYY01AqIRAQBAhQgAAGqbadOmqWvXrmrYsKESEhLUpEkTXXPNNWGN1wCiFQEAAAAAqEUIAAAAAEAtQgAAAAAAahECAAAAAFCLEAAAAACAWoQA4KDvvvtOS5Ys0erVq7Vu3ToWFhYWFhYWFpYwltWrV2vJkiX67rvvnC7rahQCgIOWLFniefQ8CwsLCwsLCwuL3bJkyRKny7oahQDgoNWrV3sardMJmoWFhYWFhYWlpi3ui6mrV692uqyrUQgADlq3bp2MMVq3bp3ThwIAAFDjUEvZIQA4iEYLAABgj1rKDgHAQTRaAAAAe9RSdggADqLRAgAA2KOWskMAcBCNFgAAwB61lB0CgINCabRlZWU6duyY9uzZox07dmj79u0sNWDZsWOHDh48qNOnT1djiwIAoHYhANghADiookZbVlam/fv3a8OGDdqwYYO2bt3qeGHLEtqyefNmbdiwQV9//bXKysqquWUBAFA7EADsEAAcVFGjPXbsmKeIPHnyZDUfHSqjrKxMe/bs0YYNG3TkyBGnDwcAgJhEALBDAHBQRY3WXUBS/NdMp0+f1oYNG7Rr1y6nDwUAgJhEALBDAHBQRY12x44d2rp1azUfFSJpy5Yt2rFjh9OHAQBATCIA2InqAFBcXKyJEyeqVatWSk5OVo8ePVRUVBTSvrt371ZeXp7S0tKUmpqqQYMGafv27V7b7Ny5U9OmTVNOTo4aNmyoJk2aKDc3V0uXLvV5v0WLFskY43fZt2+f1flV1Gjd/clRc23bto3fEACAKkIAsBPVAWDIkCFyuVzKz8/XggUL1KtXL7lcLi1fvjzofseOHVO7du3UvHlzFRYWas6cOcrIyFDr1q11+PBhz3ZPP/206tatq6FDh+qZZ57RE088oQsvvFDGGL344ote7+kOANOnT9fixYu9lhMnTlidHwEg9vEbAgBQdQgAdqI2AKxcuVLGGD3++OOedSdOnFB2drZ69eoVdN/CwkIZY7Rq1SrPuo0bNyohIUGTJ0/2rFu3bp0OHTrktW9xcbE6dOig1q1be613B4DPPvusMqflhQAQ+/gNAQC1yamSUq3Ydlhvf7lXK7Yd1qmS0ir9PAKAnagNABMmTFBCQoLPDCozZ86UMUY7d+4MuG9OTo5ycnJ81g8YMEDZ2dkVfvb48eNljNHRo0c9684OAEePHlVJSUkYZ+MfASD28RsCAGqDUyWlenLZFnWbUaTMSX/zLN1nLNWTy7ZUWRAgANiJ2gDQr18/dezY0Wf9smXLZIzRG2+84Xe/0tJSJSUlady4cT6vTZ061aew92fYsGFKSUnxKvLdAaB+/foyxigxMVHXXnuttmzZEuaZ/UdtDwDBxlVMmjRJHTt2VJcuXXz2+8tf/iJjjC677DKf1xYuXChjjN59912vzwh05yY3N1edO3f2WpeZmSljjK644gq/+zz//POe46zojlCs/4YAgNrp7Cv9H205qFsWrlTmpL/pp2cV/2f/+62LVlVJCCAA2InaANC5c2f17dvXZ/369etljNH8+fP97nfo0CFPX/3y5s2bJ2OMNm3aFPBzt27dquTkZI0YMcJr/auvvqpRo0bppZde0uuvv66pU6cqJSVFTZs2DXo3wu3AgQNat26d17JkyRLHAkB136LzJ9i4ijVr1mjMmDGKj4/X999/77XfAw88IJfLpbp16+rUqVNer912221KSEjwhDzbAJCcnKz4+Hi/A7xzc3OVnJxMAAAA1DqBrvSHsjy1zP6iaSAEADtRGwCysrJ09dVX+6zfvn27jDGaO3eu3/127twpY4wKCwt9XnNfHV6zZo3ffY8fP66uXbuqUaNG2rNnT4XHuHz5csXFxen222+vcNuCgoKAV7urMwA4dYvOn4qK85deeknGGP3973/3Wn/RRRdp2LBhMsbok08+8Xqtffv2uuCCC0L+jEAB4IorrlCDBg30xBNPeL22a9cuxcfH68YbbyQAAABiRigXBk+VlGrUi/6v9Fe0/PTftUak6wwCgJ2oDQDVfQegpKRE1157rRITE/Xee++FfJwXXXRRSOMKouEOQLA/3Kq+RedPRcW5O+xNmTLFs+7EiRNKTEzUn//8Z2VlZem3v/2t57WDBw/KGKN77rkn5M8IFACuueYajRo1Sj169PB6bfbs2WrSpImnGxABAABQk4VzYfDJZVvCvupfflmx7XCQowkfAcBO1AaA6h4DcOuttyouLk6vvPJKWMeZl5enRo0ahbWPW3WPAQj1D7cqbtH54y7Oly1bpkOHDnktbunp6crNzfX8+0cffSRjjPbu3aubb75ZN9xwg+c1d6B69dVXQ/qMQ4cOqXfv3gEDQFFRkYwx2rZtm+e1rl276vbbbw95VigCAAAgWoVzYfBUSam6zSgK+8p/+eXtL/dG9BwIAHaiNgDk5+f7nQXo0UcfrXAWoO7du/udBah///7Kysry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WVmZ79yhQ4dUt25dnTp1ynduypQpmjJlit/XLVq0cOX/bwCxRQEAIKHcfffdatiwYdAn7qWlpVH5mU4UAOfOnYvo+yWaSBcAJSUlunTpkt+5ffv2KSMjQ/fff7/v3KlTp5STk6Mnn3zS79oDBw7IGKPnn3++2p91yy23aMSIEX7n1q1bp969e/udGzNmjF544QXf15988omMMXr//fdD/lwAYAcFAICE0qZNG91xxx0hXXv48GGNHj1aTZo0UXp6ulq2bKmxY8f6EsG//e1vGjdunFq3bq3MzEzl5uZqyJAhfknnjBkzZIwJOA4cOFDl97w//6GHHlKjRo2Unp6utm3bavXq1QH36X2f3bt3a/jw4apbt646dOgQNAn2Xrt//349+OCDqlOnjnJycjRq1CidP38+4L0//PBD/eAHP1BGRoZatWql5cuX+96jKqHExs49hXo/wT57qPG0omPHjurYsaPv66VLl6pGjRr629/+5nfd4cOHZYzRjBkzqny///3f/5UxRi+//LLf+SVLlujee+/1fX358mXl5+erpKTE77rc3Fw9+uijNj8NAISGAgBAQunVq5dq164dMGzjel9//bWaNm0qj8ejxx57TMuXL9fTTz+t73//+77eg/Xr16t9+/aaPn26iouL9eSTT6pevXpq0aKFL3H9y1/+ouHDh8sYo4ULF2rt2rVau3atzp07V+X3jhw5ombNmik/P1/PPPOMli1bpv79+/uurcibALdt21YDBgzQSy+9pKVLl1ZZANx6660aNGiQXnrpJY0ZM0bGGL/hJJL06aefKiMjQy1bttTcuXNVVFSkpk2bqn379tUWAKHExuo9Wbmf6z+7lXiG6urVq7rhhhvUq1cv37nu3burXbt2OnbsmN/xpz/9ScYYzZ8/v8r3/PWvfy1jjD777DO/8yUlJWrSpIkOHz6skydP6qGHHlK/fv0CXt+jRw/94Ac/sPV5ACBUFAAAEsq7776rlJQUpaSkqEuXLpoyZYreeecdXb582e+6kSNHqmbNmtq2bVvAe3jHWF+4cCHge95Eb82aNb5zdoYAPfzww2rSpImOHz/ud37YsGGqU6eO38/2JtDDhw/3u7aqAmD06NF+1w4cOFD169f3O9evXz95PB59/fXXvnP79+9XampqtQVAqLGxck9W7uf6z24lnqFau3atjDG+XoTy8nLVqlUraK+O91i/fn2V7/nUU0/JGKOzZ88GfO/nP/+5GjZsqNzcXD3yyCNBh3n95Cc/UVZWluXPAgBWUAAASDhbt27VwIED5fF4fIlZw4YN9eabb0qSrly5opycHA0YMCDk97x8+bKOHz+uY8eOqW7dunrsscd837NaAFy9elV169bVT37yk4Anyd7E9o9//KPvem8CvXnzZr/3rqoA2Lp1q9+1CxYskDFGp0+flnQtmc3KytJ9990XcM/9+vWrtgAINTah3pPV+6n42a3GMxR79uxRTk6OunTpovLycknS559/7uu12LRpk9/h7empbinQcePGKTU11dK9VDR16lQZY4IO5wKASKEAAJCwLl26pK1bt+qJJ55QZmam0tLStHv3bh05ckTGGE2bNq3K11+4cEFPP/20mjVrpho1avg96X3ooYd811ktAEpLS6t8imyM0euvv+673ptAHzx40O+9qyoAjhw5EvRa79j1v//97zLGaPr06QH3/NOf/jSkHoBQYhPqPVm9n4qf3Wo8q/PNN9+oVatWys/P9+uNeOedd2SM0X//938HvKZ79+5q3Lhxte8dbgEwZcoUGWNs9WgAQKgoAAAkBW/COHPmzJALgIcfflg1a9bU448/rvXr1+vdd9/Vpk2bVL9+fT344IO+66wWAN98842MMRoxYkTAk2TvUXHFIm8CfezYsaCfKVgBUN214RYAocYm1HsKpwCwGs+qnDp1Sh06dFBubq52797t973XX389aE/MqVOnlJ6errFjx1b7/t4hQGfOnAnpfq73b//2b/J4PLZeCwChogAAkBR27twpY4weeeSRkIcA1alTJ+BpdllZmVJSUvyS3Oeff77SAiDY98rLy1W7du2AMf2ViUYBUF5erszMTNtDgEKNTaj3ZPV+rn+tlXhWpqysTF27dpXH49GWLVsCvr9p0yYZY7Rx40a/84sXL5YxRn/5y1+q/RneScChXBsMk4ABxAIFAICE8sEHHwTdKGnevHkyxmjBggWSQpsEnJubq1GjRvl9b/78+TLG+CW5y5YtkzFGO3bsCHivyr43atQopaenB12t6OjRo35fR6MAkKS+ffvangQcamys3JOV+7n+tVbiGUx5ebn69++v1NTUgATfq7S0VDVr1tSkSZN85w4dOqQGDRpo5MiR1f4MSfryyy/9JhZblZubqwkTJth6LQCEigIAQEJp166dvve97+nxxx9XcXGxXnzxRd13331KSUlRy5YtfUt8Hj58WHl5eb5lQFesWKGZM2eqXbt2vmtGjhyplJQUTZw4UStWrNCoUaPUrFmzgGEuW7dulTFGd999t9asWaNXXnnFt4JLZd87cuSIWrRoIY/H43v/OXPmaOjQoapXr57fZ4pWAfDJJ5/49j+YN2+enn32WTVt2lQdOnSotgAINTZW7snK/QRbBjTUeAYzceJEGWPUr18/33KtFQ+vQYMGKS0tTdOnT9cLL7yg/Px8tW/f3je5OhT/8A//YKu3wrsR2HvvvWf5tQBgBQUAgITy1ltvafTo0brpppuUnZ2t9PR0FRYWasKECQHjwL/66iuNHDlSDRs29G08NX78eN9GYN712Bs0aKDs7Gz17t1be/fuVYsWLQKS3FmzZumGG25QzZo1AxLtyr5XWlqq8ePHKz8/X2lpacrLy1P37t1VXFzs997RKgAk6f3339ett96q9PR0FRQUaNWqVfqP//gPZWZmVhlnK7Gxck+h3k+w14Yaz2C6detW5SRirxMnTmjQoEGqVauWGjdurAkTJlgez79gwQJlZ2dbnsg7depUNW/ePGgPFwBEEgUAALjMgAEDVFhY6PRt+MTb/YTr1KlTys3N1apVq0J+zcWLF5WXl6dFixZF8c4A4BoKAABIYtc/hd63b5/S0tI0ZswY7ieK5s6dqzZt2ujKlSshXb9s2TLl5+fr4sWLUb4zAKAAAICklpeXp5/97GcqLi7WtGnTlJubq1q1amnfvn3cDwC4FAUAACSxUaNGqUWLFsrIyFBOTo569+6t7du3cz8A4GIUAAAAAICLUAAAAAAALkIBAAAAALgIBQAAAADgIhQAAAAAgItQAAAAAAAuQgEAAAAAuMj/A5+ThQTUA2pqAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "27712\n",
      "72 53\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(*calc_fwhm(res_mg1, LaB6_new, 10, 88), \"o\", label=\"FWHM\")\n",
    "ax.plot(*calc_peak_error(res_mg1, LaB6_new, 10, 88), \"o\", label=\"error\")\n",
    "ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "ax.set_xlabel(res_mg.unit.label)\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## All other Modules\n",
    "\n",
    "We define now an automatic procedure for any module. \n",
    "The detection used 3 parameter visually extracted from the Figure1: \n",
    "\n",
    "* zero_pos: the frame where the beam-stop is in the center of the module\n",
    "* frame_start: the frame where the first peak of LaB6 appears (positive)\n",
    "* frame_stop: the frame where the second peak of LaB6 appears (positive)\n",
    "\n",
    "This is enough for boot-strapping the goniometer configuration."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_module(name,\n",
    "               zero_pos,\n",
    "               frame_start,\n",
    "               frame_stop,\n",
    "                ):\n",
    "    ds = data[name]\n",
    "    param = {\"dist\": 0.72, \n",
    "          \"poni1\": 640*50e-6, \n",
    "          \"poni2\": 4e-3, \n",
    "          \"rot1\":0, \n",
    "          \"offset\": -get_position(zero_pos), \n",
    "          \"scale\":1, \n",
    "          \"nrj\": nrj}\n",
    "\n",
    "    #Lock enegy for now and a couple of other parameters\n",
    "    bounds = {\"nrj\": (nrj, nrj),\n",
    "              \"dist\": (0.7, 0.8),\n",
    "              \"poni2\": (4e-3, 4e-3),\n",
    "              \"rot1\": (0,0),\n",
    "              \"scale\": (1,1)}\n",
    "\n",
    "    gonioref = GoniometerRefinement(param, \n",
    "                                    get_position, \n",
    "                                    trans, \n",
    "                                    detector=modules[name], \n",
    "                                    wavelength=wl, \n",
    "                                    bounds=bounds\n",
    "                                      )\n",
    "    goniometers[name] = gonioref\n",
    "    \n",
    "    for i in range(frame_start, frame_stop):\n",
    "        cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "        peak = peak_picking(name, i)\n",
    "        if len(peak)!=1: \n",
    "            continue\n",
    "        cp.append([peak[0]], ring=0)\n",
    "        img = (ds[i]).reshape((-1,1))\n",
    "        sg = gonioref.new_geometry(\"%s_%04i\"%(name, i), \n",
    "                                    image=img, \n",
    "                                    metadata=i, \n",
    "                                    control_points=cp, \n",
    "                                    calibrant=LaB6)\n",
    "        sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "\n",
    "    print(gonioref.chi2())\n",
    "    gonioref.refine2()\n",
    "        \n",
    "    tths = LaB6.get_2th()\n",
    "    #print(tths)\n",
    "    for i in range(frame_stop, ds.shape[0]):\n",
    "        frame_name = \"%s_%04i\"%(name, i)\n",
    "        if frame_name in gonioref.single_geometries:\n",
    "            continue\n",
    "        peak = peak_picking(name, i)\n",
    "        ai=gonioref.get_ai(get_position(i))\n",
    "        tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "        tth_low = tth[20]\n",
    "        tth_hi = tth[-20]\n",
    "        ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "        valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "        cnt = valid_peaks.sum()\n",
    "        if (len(peak) ==  cnt) and cnt>0:    \n",
    "            cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "            #revert the order of assignment if needed !!\n",
    "            if tth_hi < tth_low:\n",
    "                peak = peak[-1::-1]\n",
    "\n",
    "            for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "                cp.append([p], ring=r)\n",
    "            img = (ds[i]).reshape((-1,1))\n",
    "            sg = gonioref.new_geometry(frame_name, \n",
    "                                        image=img, \n",
    "                                        metadata=i, \n",
    "                                        control_points=cp, \n",
    "                                        calibrant=LaB6)\n",
    "            sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "            #print(frame_name, len(sg.geometry_refinement.data))\n",
    "\n",
    "\n",
    "    print(\" Number of peaks found and used for refinement\")\n",
    "    print(sum([len(sg.geometry_refinement.data) for sg in gonioref.single_geometries.values()]))\n",
    "\n",
    "    gonioref.refine2()\n",
    "    gonioref.set_bounds(\"poni1\", -1, 1)\n",
    "    gonioref.set_bounds(\"poni2\", -1, 1)\n",
    "    gonioref.set_bounds(\"rot1\", -1, 1)\n",
    "    gonioref.set_bounds(\"scale\", 0.9, 1.1)\n",
    "    gonioref.refine2()\n",
    "    \n",
    "    mg = gonioref.get_mg(position)\n",
    "    mg.radial_range = (0, 95)\n",
    "    images = [i.reshape(-1, 1) for i in ds]\n",
    "    res_mg = mg.integrate1d(images, 50000)\n",
    "    results[name] = res_mg\n",
    "    \n",
    "    LaB6_new = get_calibrant(\"LaB6\")\n",
    "    LaB6_new.wavelength = hc/gonioref.param[-1]*1e-10\n",
    "    p = jupyter.plot1d(res_mg, calibrant=LaB6_new)\n",
    "    p.figure.show()\n",
    "    \n",
    "    fig, ax = plt.subplots()\n",
    "    ax.plot(*calc_fwhm(res_mg, LaB6_new), \"o\", label=\"FWHM\")\n",
    "    ax.plot(*calc_peak_error(res_mg, LaB6_new, 10, 89), \"o\", label=\"error\")\n",
    "    ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "    ax.set_xlabel(res_mg.unit.label)\n",
    "    ax.legend()\n",
    "    fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8.406338771704969e-06\n",
      "Cost function before refinement: 8.406338771704969e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.15999445e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.808572002652971e-11\n",
      "     jac: array([ 4.57424569e-08,  8.17041295e-07,  2.47626008e-08, -1.79775418e-08,\n",
      "        9.91633086e-09,  6.60392633e-07, -5.86643086e-09])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20018961e-01,  3.40893083e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.15999182e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.808572002652971e-11\n",
      "GonioParam(dist=0.7200189605020697, poni1=0.03408930832642036, poni2=0.004, rot1=0.0, offset=-71.59991818229837, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03408930832642036\n",
      " Number of peaks found and used for refinement\n",
      "1093\n",
      "Cost function before refinement: 5.55731697942323e-07\n",
      "[ 7.20018961e-01  3.40893083e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.15999182e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.1961227626432414e-07\n",
      "     jac: array([-9.44231683e-07,  2.30905108e-08,  4.88576803e-06, -3.51407454e-06,\n",
      "       -1.74829040e-11,  2.33600314e-04,  1.70705134e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20018345e-01,  3.45650482e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -7.15999122e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.1961227626432414e-07\n",
      "GonioParam(dist=0.7200183446976933, poni1=0.034565048153275144, poni2=0.004, rot1=0.0, offset=-71.59991220000985, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03408930832642036 --> 0.034565048153275144\n",
      "Cost function before refinement: 1.1961227626432414e-07\n",
      "[ 7.20018345e-01  3.45650482e-02  4.00000000e-03  0.00000000e+00\n",
      " -7.15999122e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 6.570539910514945e-10\n",
      "     jac: array([ 2.18222064e-08,  1.73947572e-08, -1.60806027e-07,  1.15807314e-07,\n",
      "       -1.82359884e-10,  8.08015633e-09,  8.85008258e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 90\n",
      "     nit: 10\n",
      "    njev: 10\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20686437e-01,  3.48247495e-02,  4.04316666e-03, -3.37686772e-05,\n",
      "       -7.15999088e+01,  9.98982863e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.570539910514945e-10\n",
      "GonioParam(dist=0.7206864370148651, poni1=0.03482474946152798, poni2=0.004043166657976692, rot1=-3.376867719168802e-05, offset=-71.5999088132962, scale=0.9989828627069963, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9989828627069963\n",
      "area_pixel=0.04101321524826673 area_sum=0.04635522282228846, Error= -0.13025088478639793\n",
      "area_pixel=0.04805074298699985 area_sum=0.050770187552341764, Error= -0.056595265677320754\n",
      "area_pixel=0.05470148979267009 area_sum=0.056228786108716095, Error= -0.027920561612394357\n",
      "area_pixel=0.062098761379894896 area_sum=0.062392206682634205, Error= -0.004725461445907599\n",
      "area_pixel=0.040415219606433794 area_sum=0.046336505956633724, Error= -0.1465112996505234\n",
      "area_pixel=0.06211637552982907 area_sum=0.062425234207049, Error= -0.004972258516139761\n",
      "area_pixel=0.0545957431661801 area_sum=0.05610676727387377, Error= -0.027676591984367248\n",
      "area_pixel=0.046408760633763535 area_sum=0.04924681820885727, Error= -0.06115348775396895\n",
      "area_pixel=0.04985697246649501 area_sum=0.05218296613471554, Error= -0.04665332757185872\n",
      "area_pixel=0.0522213978747601 area_sum=0.05417632538646705, Error= -0.03743537307054384\n",
      "area_pixel=0.06152426635945751 area_sum=0.06185028694021803, Error= -0.005299056779575941\n",
      "area_pixel=0.04466499326386497 area_sum=0.04810216511625828, Error= -0.07695449167735718\n",
      "area_pixel=0.043420597173687625 area_sum=0.04734951311542082, Error= -0.09048507384679808\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXhU9fn+8U+SyYZAWDXBJZJENICCxYDBJQq4oFZxiYILotQNNwoJuNRGRHDBiktVYmupxaX+2mpq+62IcUEqi9aKylKQRVCB4AYqJkCS+/cHnSnDzCSZJ8shzPt1Xefi4sxZPjPzJHnuOcs4AQAAAIgZzusBAAAAAGg5BAAAAAAghhAAAAAAgBhCAAAAAABiCAEAAAAAiCEEAAAAACCGEAAAAACAGEIAAAAAAGIIAQAAAACIIQQAAAAAIIYQAAAAAIAYQgAAAAAAYggBAAAAAIghBAAAAAAghhAAAAAAgBhCAAAAAABiCAEAAAAAiCEEAAAAACCGEAAAAACAGEIAAAAAAGIIAQAAAACIIQQAAAAAIIYQAAAAAIAYQgAAAAAAYggBAAAAAIghBAAAAAAghhAAAAAAgBhCAAAAAABiCAEAAAAAiCEEAAAAACCGEAAAAACAGEIAAAAAAGIIAQAAAACIIQQAAAAAIIYQAAAAAIAYQgAAAAAAYggBAAAAAIghBAAAAAAghhAAAAAAgBhCAAAAAABiCAEAAAAAiCEEAAAAACCGEAAAAACAGEIAAJrQzJkz5ZzTzJkzW2yfzjkVFBS02P6A+jz88MPKzc1VSkqKnHOaPn2610Myufzyy+Wc09q1a70eSqNs3LhRI0eO1IEHHqj4+Hg55/Ttt9+at7d27Vo553T55Zc33SD3AQUFBXKOtgqtA5WKVs05FzTFx8erc+fOOvnkk/Xss8+2+HgIAM2noqJCY8eOVU5OjlJSUpSenq7BgwfrN7/5jddDw26ef/55Oed09NFH65ZbblFJSYkWLFjg9bDCKikpkXNOb775ZtjH95UAcNpppykuLk4XX3yxfvnLX6qkpESVlZV1rlPX7xUCQHgEALQmVCpaNX/jX1JSopKSEt12220677zzlJCQIOecfv7zn7foeAgAzePHH3/UYYcdJuec+vTpo/Hjx+vqq69Wv379dOihh3o9POzmkksukXNOX3zxhddDqVd9AWDDhg1avny5duzY0bIDa0Lbt29XfHy8TjnllKjWIwBEjwCA1oRKRavmDwB7Ki8vV1xcnOLi4lr00zsCQPP461//Kuecjj/+eNXU1AQ91hoazVhy8sknt5omqL4AsC9Yt26dqVknAESPAIDWhEpFqxYpAEhSbm6unHP6f//v/wXNX7hwoc4//3wdcMABSkxM1EEHHaSrr746bCP5r3/9SzfddJOOOuoodezYUcnJycrJydG4ceP0zTffhCwfKQB88803OuGEExQXF6epU6fW+7y2b9+uhx9+WEcffbQ6dOig1NRUZWZm6uyzz9Zrr70W8hoUFBToyy+/1FVXXaX09HQlJSWpZ8+e+t3vfhd2248++qiGDh2qQw45RElJSerYsaMGDx6sf/zjH2HHk5mZqczMTG3ZskXXX3+9unXrpuTkZOXm5urhhx9WbW1t2PWiea3r8n//939yzmnMmDFRrdcQzz33nE466SSlpaUpOTlZRxxxhCZPnqyqqqqQZf2v9caNGzV69Gh169ZN8fHxgffbf8rI6tWr9cgjj+jII49USkpKUCNVU1OjJ554Qsccc4z2228/tWnTRsccc4wef/zxkHDTkH1GYnmfP/zwQw0fPlyZmZlKSkpSly5ddPTRR+vmm2+u91NwfzMdbpLqbxrDNU9vvvlm4AjfBx98oDPOOENpaWlKTU3ViSeeqHfeeSfstqqrq/XEE09o4MCBat++vVJSUpSdna3Ro0dr5cqVknbVdF3jleo+BeiFF17QCSecENh+7969NXXq1LB14//5+eGHH1RUVKSDDz5YSUlJys7O1r333hvx5yeSlStX6rLLLlO3bt2UmJiojIwMXXbZZYHntvt+wz2/uhp3/++wcFNJSYmk4Pdy7dq1uuiii9S5c2clJyerX79++tvf/hZx+9H8vEWyYsUKTZw4Uf369VOXLl2UlJSkQw45RFdddZU+++yzkOWtdbRhwwaNGjVKXbt2VUpKivr06aPf//73QdvbXV0BYPbs2Ro6dKg6d+6spKQkZWVlqaioqFHXYgCNQQBAq1ZXADjiiCPknNOf/vSnwLynnnpKCQkJatOmjYYPH67i4mINGzZM8fHxysjI0Lp164K2cc0112j//fdXYWGhxo0bp7Fjx+qEE06Qc065ubn67rvvgpYPFwDWrVun3NxcJSYmatasWQ16XiNGjJBzTr1799ZNN92kiRMn6rLLLlP37t01fvz4kNegT58+6tGjh3r37q0bbrhBV111lTp06CDnnH7/+98HLb9x40bFx8fr+OOP1+jRo3XLLbfo8ssvV6dOneScC3tOfWZmpjIyMnTM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hx/eJKcASbuafP+RlkMOOURjxozRxIkTdfHFF6tLly5Bz3nZsmWKj4/XAQccoHHjxmny5MmaPHly4PFI7+eECRPknNP++++vMWPGqLi4WL179w58Oh/uewCaIgBIu75cr127doqPj9e5556rW2+9Veedd57i4+PVrl07LVy4MGh5awAYPnx44HfWL3/5S02ePDkQ8i0BQIr+562+sfXu3Vvjxo3T6NGjdcghh6hHjx7q27dvk9TRpk2bAr9zCwoKdOutt4Z8D8CkSZMa9LzvvfdexcXFqU2bNrrgggtUXFys6667TmeccYb2228/nXbaaQ163kBTIgCgVYs2AEi77vBw+eWXB307aq9evXT11Vfr9ddfD1r266+/1nXXXafMzEwlJycrKytLt956q7Zt2xb2j0akbwKura3VDTfcIOecTj311LCftPp9++23mjRpkk4++WR169ZNSUlJSk9PV0FBgZ577rmQi4qjDQCS9Le//U0DBgxQ27ZtlZaWplNOOUVz586NOH7/c92yZUvgC4ySkpJ0xBFH1PlNwNG81vV55plndPLJJystLS3wrcIjRowIfIvnokWLAhe9vvLKKw3e7t/+9jedeeaZ6tq1qxITE3XAAQcoLy9Pt99+u5YvXx60bFMEgJqaGj322GPq16+fUlNTlZqaqp/85Cf69a9/Xec3AVtE8z6/+uqrGjVqlHJzc9W+fXu1adNGPXr00I033hjVBYp1BQBp1xGInj17KikpSQcccICuvvpqffXVV01yEbDfzp079eijjyovLy/wbcs5OTm66qqrQu7eM2vWLPXp0yfoLkl+db2fzz//vI477ji1bdtWycnJ6tmzp+6+++6w16A0ZQCQpP/85z+69NJLA0cE09PTdckll4R8mZVkDwAVFRUaMWKE9t9//8Ddz/zvgzUASNH9vEWybds23XbbbcrOzlZycrIOOuggjRkzpsnr6PPPP9fIkSPVpUuXoG8C9h9t2fOIY13Pe968eSosLFRGRoYSExPVpUsX9enTRz//+c/13nvvNeh5A02JAACgXnU1MAAQS/ynmc2ePdvroQBmBAAA9SIAAIg14c7Z/+ijj9S2bVt16tSpQXccA/ZWBAAA9SIAAIg1GRkZOuGEE3TdddepqKhI55xzjnw+n+Lj46O61gjYGxEAANSLAAAg1tx5553q27evOnTooISEBHXu3FlnnnlmVNdrAHsrAgAAAAAQQwgAAAAAQAwhAAAAAAAxhAAAAAAAxBACAAAAABBDCAAe+vbbb1VWVqb3339fS5YsYWJiYmJiYmJiimJ6//33VVZWpm+//dbrtq5VIQB4qKysLPDV80xMTExMTExMTLaprKzM67auVSEAeOj9998PFK3XCZqJiYmJiYmJqbVN/g9T33//fa/bulaFAOChJUuWyDmnJUuWeD0UAACAVodeyoYA4CGKFgAAwI5eyoYA4CGKFgAAwI5eyoYA4CGKFgAAwI5eyoYA4CGKFgAAwI5eyoYA4KGGFG1tba2+//57ffHFF1qzZo1Wr17N1AqmNWvWaPPmzdq5c2cLVhQAALGFAGBDAPBQfUVbW1urTZs2admyZVq2bJk++eQTzxtbpoZNK1as0LJly/Tpp5+qtra2hSsLAIDYQACwIQB4qL6i/f777wNN5Pbt21t4dGiM2tpaffHFF1q2bJm2bt3q9XAAANgnEQBsCAAeqq9o/Q0kzX/rtHPnTi1btkyfffaZ10MBAGCfRACwIQB4qL6iXbNmjT755JMWHhWa0sqVK7VmzRqvhwEAwD6JAGBDAPBQfUXrP58crdeqVat4DwEAaCYEABsCgIcIAPs+3kMAAJoPAcCGAOAhAsC+j/cQAGJU9Q5pzdvS0r/u+rd6h9cj2icRAGwIAB4iAOz7eA8BIMZU75Deuk+6P1sqaf+/aVrOrvkEgSZFALAhAHgo1gPAzJkz5ZwLO02cOFG5ubk66qijQtZ78cUX5ZzTiSeeGPLYU089JeecXn311aB9vPfee2HHUFBQoF69egXNy8zMlHNOgwcPDrvOk08+GRhnpO367evvIQBgN9U7pGcu+G/TnxYcAPz/f6aQENCECAA2BAAPeRkAdlTXaP6qr/TKxxs0f9VX2lFd0yz7qYu/Ob/rrrs0a9asoOmDDz7QVVddpfj4eG3ZsiVovfHjx8vn8yk1NVU7dgT/Er3yyiuVkJCg7777Lmgf0QaAlJQUxcfHa+PGjWHXSUlJIQAAAIK9dd8eTX+E6a37vR7pPoMAYEMA8JAXAWBHdY0eLl+pfpPnKHPi3wPTMZNf08PlK1s0CNTXnD/99NNyzukf//hH0Pxjjz1WF198sZxzWrBgQdBjPXr00NFHH93gfUQKAIMHD1b79u310EMPBT322WefKT4+Xueffz4BAADwP9U7/nvaz56f/O85pe06HYijAE2CAGBDAPBQSweAHdU1GvW7Rcqc+Hcdulvzv/v/r5j5bouFgPqa89WrV8s5p9tvvz0wr7KyUklJSfrzn/+srKwsPfDAA4HHNm/eLOecbrzxxgbvI1IAOPPMMzVq1Cj1798/6LH7779fnTt3DpwGRAAAAEjadaFvQz79909r3vZ6xPsEAoANAcBDLR0AHi5fGdT0R5oeKV/ZZPusi785Ly8v15dffhk0+XXr1k0FBQWB/7/99ttyzmnDhg269NJLde655wYeKysrk3NOL7zwQoP28eWXX2rgwIERA8CcOXPknNOqVasCj/Xt21fXXHNNvcHCjwAAADFi6V+jCwBL/+r1iPcJBAAbAoCHWjIA7KiuUb/Jc0I++d9zOvS/pwO1xFGAui4C9issLAw61/+ee+5R9+7dJUmPP/649t9//8CyRUVFcs7piy++aNA+/FOkAFBdXa309HRNnjxZkrRs2TI55zR37lwCAAAgGEcAPEEAsCEAeKglA8D8VV816NN//zR/1VdNst+6+Jvoxx57TK+99lrQ5Pfwww8Hnet/1lln6ZJLLpEkffjhh3LOaeXKXUcs8vPzA+GgIft47bXXdNRRR0UMAJJ00003qWfPnpKk22+/XQcffLBqa2sJAACAYFwD4AkCgA0BwEMtGQBe+XhDVAHglY83NMl+69KQJvr999+Xc04PPPCAamtr1alTJz3++OOSpJqaGrVv314zZ84MXBtw2WWXRbWPuq4BkKSFCxfKOafFixere/fuKi4ubvDYJQIAAMQU7gLU4ggANgQAD3EEoP4murq6Wu3atdOwYcMCp+AsXrw48Pgpp5yi0aNHB64NKC0tjWof9QUAScrOztZJJ50k55w++OCDBo9dIgAAQEyp3rHrPv98D0CLIQDYEAA8xDUADWuiTznlFHXt2lVPPvmk2rdvr5qa/42tpKRERxxxhO655x4557R06dKo9tGQAPCLX/xCzjnl5uZGPXYCAADEmOoduz7hn5YT5puA76f5b2IEABsCgIe4C1DDmuhJkybJOaf8/HydcsopQY+9+uqriouL07HHHqvOnTurtrY2qn00JAB8+umnKikpCfo+AgIAAKBO1Tt2Xei79K+7/qXxbxYEABsCgIe8+B6AK2a+22q+B8Dv9ddfD9yx58477wx6bOvW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UjYxFQB69eqlQYMGhcxfunSpnHOaMWNGVNsbPXq0EhIStHLlynqXraio0JIlS4KmsrIyihYAAMCIAGATUwEgKytLQ4cODZm/evVqOec0ffr0Bm/r2WeflXNOEyZMaNDyJSUlcs6FnShaAACA6BEAbGIqADTVEYC3335bKSkpOu2007Rz584GrcMRAAAAgKZFALCJqQDQFNcALF68WB06dNAxxxyj77//vlHjoWgBAADs6KVsYioAFBUVhb0L0JQpUxp0F6BVq1YpPT1dPXr00ObNmxs9HooWAADAjl7KJqYCwMKFC0O+B6Cqqko5OTkaMGBAYN66deu0fPnyoHU3btyorKwsdevWTWvXrm2S8VC0AAAAdvRSNjEVACSpsLBQPp9PxcXFKi0t1cCBA+Xz+TR37tzAMgUFBXIu+KXp06dP4KLfWbNmBU1z5swxjYWiBQAAsKOXsom5AFBZWamioiKlp6crOTlZeXl5mj17dtAy4QJApDv4OOdUUFBgGgtFCwAAYEcvZRNzAWBvQtECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZEAA8RNECAADY0UvZxFwAqKqq0oQJE5SRkaGUlBT1799fc+bMqXe9//znPxo7dqzy8/OVnJws55zWrl3bqLFQtAAAAHb0UjYxFwCG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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "25667\n",
      "218 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[2],\n",
    "           92,\n",
    "           131,\n",
    "           151)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0825408441330163e-06\n",
      "Cost function before refinement: 1.0825408441330163e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.57999444e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.4921939380829473e-11\n",
      "     jac: array([-8.60015175e-08,  7.99451827e-08,  1.64794931e-09, -8.07493243e-10,\n",
      "        6.18853503e-10, -1.33401994e-08, -3.62117520e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20006745e-01,  3.27496622e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.57999350e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.4921939380829473e-11\n",
      "GonioParam(dist=0.7200067449851295, poni1=0.032749662244436796, poni2=0.004, rot1=0.0, offset=-65.79993502488618, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.032749662244436796\n",
      " Number of peaks found and used for refinement\n",
      "978\n",
      "Cost function before refinement: 4.705197877733383e-07\n",
      "[ 7.20006745e-01  3.27496622e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.57999350e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 9.924141633593764e-08\n",
      "     jac: array([-1.34035538e-09, -8.95816754e-12,  4.47653376e-06, -3.22526285e-06,\n",
      "       -3.95764310e-10,  1.97125028e-04,  1.39658085e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20481821e-01,  3.31886380e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.57999293e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 9.924141633593764e-08\n",
      "GonioParam(dist=0.7204818213178118, poni1=0.03318863803715359, poni2=0.004, rot1=0.0, offset=-65.7999293473278, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7200067449851295 --> 0.7204818213178118\n",
      "Cost function before refinement: 9.924141633593764e-08\n",
      "[ 7.20481821e-01  3.31886380e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.57999293e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 5.124963686571038e-10\n",
      "     jac: array([-5.05292020e-07, -5.37136276e-09, -1.29798578e-07,  9.55532346e-08,\n",
      "       -4.36381951e-10,  2.56600519e-09,  8.43817010e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 46\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20482931e-01,  3.34099564e-02,  3.97791142e-03,  1.59099880e-05,\n",
      "       -6.57999266e+01,  9.98999110e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 5.124963686571038e-10\n",
      "GonioParam(dist=0.7204829305671493, poni1=0.033409956436720734, poni2=0.003977911420613329, rot1=1.5909988045817424e-05, offset=-65.79992655965417, scale=0.9989991098968561, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9989991098968561\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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KAMGDIgUgDFjxkibNm1k4MCBcvTRRyMAUPBoCsCbb76ZGybzIUoALrnkkib3nHPOOVJcXNwgFiUA+6XkxBNPbPDnQQce7dq1k969e+f27H+y0TvvvNMo3549e6SkpCRUAKZOnRp6vps2bZKKigo59dRT5ZBDDmn09/3XXXdds+/PgTQlAJ06dZLi4mLZuXNno/W7d++WVq1aSceOHRvE9/8JUFNceeWVEgSBvPfee6HnBQDgMwiAJ+zYsUM2bNggIiKvvPKKsQB88skn8uGHH4rIvuebRwnA+++/n3vk4MUXX4wAQMGTxp8A5fu/q+ZuAm6KpobeKAHY/1/smzuOPfbY3J7u3btLEATy6aefNtnDF77whVABCLtpdvPmzXLcccdJEARy1llnybhx4+S2226TyspKKSsra/KckwhAq1at5Igjjmhy/f7ei4qKGsSiPlueRAQALR0EwEOaE4Ann3xSvvSlL0m7du2kffv2ctFFF0lNTU1ovuYE4EAQAABdAbjtttskCAK54oor8qptQwDeeOMNCYJALr300rx6EhE544wzEv8GIOzfZdOmTZMgCKSysrLRay+99JKaAOz/DUBT362w/zcAhx12WIM4AgAAWQYB8JAoAXjkkUekqKhILrzwQpk5c6b88Ic/lGOPPVY6duwY+n9GCABAPDQfA3rEEUdIEATy29/+Nq/aWgLwyCOPSBAE8vDDDzdav3v3bunYsaMcddRReX/h2P4bg5PcAxAmANdff70EQSCvv/56o9d+8IMfNHnO+/to6uZhkabfi6985SsSBIE8++yzjdY/99xzofcAIAAAkFUQAA8JE4CtW7dKx44d5dprr20Q/+tf/yqHHXZYo/h+EACAeGgIwGuvvZZ7pOZFF12Ud20tAfjd734nQRDInXfe2eSeO+64Q4IgkG9/+9vy2WefNXp9/fr1smrVqtw/P//887mnAH388ce5+M6dO3M3xcYVgP1D/owZMxrEX3311dz3BXz+nMePHy9BEDR47OmBNPVezJs3T4IgkH79+sm2bdty8W3btkm/fv0kCAL5xS9+0WAPAgAAWQYB8JAwAXjiiSdy/8f3wQcfNDi++tWvygknnNBkPgQAoHnmz58vY8aMkTFjxuSej3/88cfnYrfcckuD9fsFoLS0NHfj7Pe//3257rrrco+WDIJ9z7IP+7v5ptASgI8+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zTdj5+vVq5ecf/75jeKrVq2SIAjkwQcfbHLfRx99JEEQSOfOnaV9+/Yybdo0+fWvfy0XXnhh5L4Dqaurk5qamgbHggULuGgV4SlA4fAUIEtreApQNDwFKDzOU4D8f4KNrTqePWWHpwBlE68FYD8fffSRvPzyy7Js2TLZuHFj4jzHH3+8DB06tFH8nXfekSAIZPr06U3ue++99yT42wX22GOP5eL19fVyyimnyNFHH91s7crKylyOzx9ctDogAOEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJt4KwCTJk2SN954I/T1mpoamTRpUqycBhWkdAAAIABJREFUSX8D8MEHH0gQBHLQQQfJnj17GvUZBIGsW7cusja/AUifliIAe849TyQIpP6885IlQAD8XYMARIMAhMcRAP+HV1t1PBuwEYBs4q0AFBUVybx580Jff+yxx6S4uDhWzqT3ANTX10ubNm2kS5cujV574IEHJAgCee2112L1IsI9ANq0FAGoOfEMkSCQv/TskywBAuDvGgQgGgQgPI4A+D+82qrj2YCNAGSTFisA999/v7Rp0yZWzvLy8iafAjRlyhRp7ilAZ599trRq1Up27tzZIH7HHXdIEATy/vvvx+pFBAHQpqUIgHGfCIC/axCAaBCA8DgC4P/waquOZwM2ApBNvBKAJUuWyKRJk2TSpElSVFQkX/va13L/fODx3e9+V7p27Sr9+vWLlX/ZsmXy+e8B2LFjh5xwwgnSv3//XGzdunVSW1vbYO/06dMlCAL56U9/mott375djj/+eDnllFMSnS8CoAsCEA4CYGkNAhANAhAeRwD8H15t1fFswEYAsolXAjBx4sTck34+/+Sfzx+9evWSZcuWxa4xfPhwKSkpkfHjx8usWbNk4MCBUlJSIkuWLMmtGTRokARBw7fms88+k169eslBBx0k5eXlMmPGDOnXr5+0atVKnnzyyUTniwDoggCEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBs4pUAfPbZZ7Jp0yb54IMPpKioSGbNmiWbNm1qcHz44Yeyffv2xDW2b98u5eXl0qVLF2ndurX069dPFi1a1GBNUwIgsu9G3jFjxkinTp2kdevW0r9//0Z744AA6IIAhIMAWFqDAESDAITHEQD/h1dbdTwbsBGAbOKVABzIu+++K9u2bXPdRqogALrM7jNMlnbr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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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uNi9e7dn/fHjx9W/f38ZYzRlyhSv53H//enXr5/XZ753716lp6crPT09pPsMKioqPCc2XnzxRa/H/vKXv8gYozPPPNPru7IdrhPKECB/4eWdd97xvNeT2fx9C2Tnzp1+rxi8++67io+P1+233+613qaObr31VhljNHbsWK/1n332mRITE0MOAP/85z9ljFHPnj19zva7P5P77rsvlLcNRBQBADXayZem3TcBX3/99X5vAr7vvvtkjNGbb77p97muvfZaJSQk+JzV96eiokINGzbUpZde6rX+5ACwaNEipaWlKSMjQ5999lnI7+ngwYMyxqhXr14hDQ0wxig1NdXvWaSLL75YxphKz966/f73v/dp5qX/NjAfffSRzz7u9zx8+HDPukh+1ocPH9bZZ5+tBg0a6K9//avatWunRo0aaenSpT7btmvXTg0bNqz0OSWpS5cucrlcfi/Bl5WVqWnTpsrNzfVab4xRYmKi9u7d6/c53Q1joEamd+/eMsbo3Xff9XlsyZIlMsb41FRlr2nD3/fsDgD+ji0c0QgAF1xwgc/2x44dk8vlUteuXT3rysrKPEM7QhlmZhMA/ud//kfGGM2dO9dn+40bNyo+Pl5t2rTxWu/++7N582affW6++WYZY/Tll19Werz/+te/PM2kPxdeeKHP9xrNAJCVleX3JMXpp5+upk2beq2z+ftm4+c//7nP5x9uHR09elQpKSlKT0/3+2+UuwZCCQDuqwVr1qzxe7xdunRR8+bNQ317QMQQAFCjuQOAe4mLi1Pjxo11ySWX+Ay36dGjh4wxKiws9Lqs7V7cZ5j/7//+z7PPsWPH9OSTT+qCCy5Q48aNPXNou5f27dt7vYa7Gb7qqqtUr149derUKayhLm5XX321jDE6++yz9cgjj+if//ynDh8+HPAzOOecc/w+5p6RZfv27V7r16xZo2HDhqlNmzaeudpPXl5++WWv7bOysuRyufz+z97dDJx8DDafdSAPPfSQjDGaM2eOpBNn/9q2bauUlBSvscalpaVKSkrSZZddVulzHj58WHFxcWrevLnf4ysqKlJGRoYaNGjgtZ+/7/xk7oZx2bJlfh9v0qSJ4uPjfYaISCfOICckJKhRo0ZhvWYw4XzPK1asUEJCglJSUjR06FC98MIL2rJlS9ivGY0AcO+99/rd52c/+5mys7O93q8xRj169Ajp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6cwzz4zIECDpRJPvvtJy+umn64477tC4ceM0ZMgQNWvWzOs9r1u3TvHx8TrttNM0ZswYTZ48WZMnT/Y8Huj7HDt2rIwxatGihe644w4VFhbqrLPO8pyd9/c7AJEIANKJH9dLS0tTfHy8rrvuOo0fP16//OUvFR8fr7S0NC1fvtxre9sAMGjQIM+/Wb/5zW80efJkT8i3CQBS+H/fKju2s846S2PGjNGIESN0+umnq3379urSpUtE6mjPnj2ef3Pz8vI0fvx4n98BeOSRR0J639OmTVNcXJxSU1M1cOBAFRYWavTo0frFL36h+vXr64orrgjpfQORRABAjRZuAJBOzPAwbNgwr19H7dy5s0aNGqX33nvPa9t///vfGj16tLKyspSUlKTs7GyNHz9ehw8f9vs/jUC/BFxRUaG77rpLxhj17dvX75lWt++//16PPPKILr30UmVkZCgxMVEtW7ZUXl6eXn75ZZ+bisMNAJL097//XT169FCDBg2Unp6uPn366MMPPwx4/O73+sMPP3h+wCgxMVEdOnQI+kvA4XzWlXnxxRd16aWXKj093fOrwoMHD/b8iueKFSs8N72+/fbbIT/v3//+d1111VVq3ry56tWrp9NOO025ubl66KGHtH79eq9tIxEAysvLNXv2bHXt2lUpKSlKSUnReeedp6eeeiroLwHbCOd7fvfddzV8+HB17NhRDRs2VGpqqtq3b6+77747rBsUgwUA6cQViE6dOikxMVGnnXaaRo0apQMHDkTkJmC348eP68knn1Rubq7n15bbtm2rkSNH+szes2DBAp1zzjlesyS5Bfs+//znP+uCCy5QgwYNlJSUpE6dOum3v/2t33tQIhkAJGnDhg266aabPFcEW7ZsqRtvvNHnx6wk+wCwd+9eDR48WC1atPDMfub+HmwDgBTe37dADh8+rAcffFA5OTlKSkpS69atdccdd0S8jnbu3Kmbb75ZzZo18/olYPfVllOvOAZ730uXLlV+fr5atWqlevXqqVmzZjrnnHP061//Wp9++mlI7xuIJAIAgEoFa2AAoC5xDzN75513nD4UwBoBAEClCAAA6hp/Y/a/+OILNWjQQE2aNAlpxjEgVhEAAFSKAACgrmnVqpUuuugijR49WgUFBbrmmmvkcrkUHx8f1r1GQCwiAACoFAEAQF0zceJEdenSRY0aNVJCQoKa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AoCDCAC1H98hAADRQwCwQwBwEAGg9uM7BAAgeggAdggADiIA1H58hwAARA8BwA4BwEEEgNqP7xAAgOghANghADiIAFD78R0CABA9BAA7BAAHEQBqP75DAACihwBghwDgIAJA7cd3CABA9BAA7BAAHEQAqP34DgEAiB4CgB0CgIMIALUf37hr3w8AACAASURBVCEAANFDALBDAHAQAaD24zsEACB6CAB2CAAOIgDUfnyHAABEDwHADgHAQY4GgLJj0raPpLV/O/HfsmPReZ0oOXLkiMrLy/0+9uOPP1b5+SPxHBIBAACAaCIA2InpAFBaWqqxY8eqVatWSk5OVvfu3bVo0aKQ9t25c6fy8/OVnp6utLQ0DRgwwKcR2759uyZOnKjc3Fw1atRITZs2VV5enhYvXuzzfPPnz5cxxu+ye/duq/fnSAAoOyZ9UCxNz5GKGv53eaztifUOBIGdO3fqlltuUYsWLZSYmKhOnTpp3rx5nsfff/99GWP05z//WQ899JAyMjIUFxen77//3vO9fPDBBxo9erSaN2+uRo0aefb9f//v/+nKK69UWlqa6tevr8suu0yffPKJ1+tX9hxVQQAAACB6CAB2YjoADBo0SC6XSwUFBZo7d6569uwpl8ulpUuXBt3v0KFDateunVq0aKHi4mLNmDFDmZmZat26tQ4cOODZ7sknn1RKSooGDx6sp556SrNmzdJ5550nY4yef/55r+d0N4mTJk3SggULvJYjR45Yvb9qDwBlx6QXB/6n6U/3DgDuP7+YX60hYM+ePWrdurUyMzM1adIkPfPMMxowYICMMZo5c6ak/waATp06qUuXLpoxY4YeffRRHT582PO9dOrUSXl5eXryySc1bdo0SSc+3/r166tVq1aaPHmypk2bpjZt2igpKUnLly/3HEOw56gqAgAAANFDALATswFgxYoVMsboscce86w7cuSIcnJy1LNnz6D7FhcXyxijlStXetatX79eCQkJGj9+vGfdmjVrtH//fq99S0tL1aFDB7Vu3dprvbtJ/PTTT6vytrxUewD4oPiUpj/A8sH0yL1mJUaMGKFWrVp5BTPpRPhLT0/XTz/95AkA2dnZ+umnn7y2c38vF154ocrKyrweu/baa5WYmOj1Ge7atUtpaWm6+OKLQ3qOqiIAAAAQPQQAOzEbAAoLC5WQkKCDBw96rZ86daqM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mA0ABQUFfmcBmjJlSqWzAHXr1s3vLEB9+vRRdnZ2wP2CBYCBAwf6nQVo5MiRzAIEAADgAHopOzEbAJYvX+7zOwClpaVq27atevTo4Vn3zTffaP369V77Tps2TcYYffrpp551GzZsUEJCgsaNGxfwNYMFgL/85S8+vwOwf/9+NWrUSDfccEO4b08SRQsAAFAV9FJ2YjYASCfm3ne5XCosLNTcuXPVq1cvuVwuffjhh55t8vLyZIz32ygpKVFOTo5atGih6dOna+bMmcrMzFRGRob27dvnte0bb7yhyZMna/LkyUpMTNS5557r+fPnn3/u2a6srEznn3++GjRooEceeUSzZ89W586dlZaWFvCegspQtAAAAPbopezEdAA4cuSICgoK1LJlSyUlJSk3N9fnZlt/AUCSduzYoYEDB6phw4Zq0KCB+vfvr82bN/tsN2zYsICz88yfP99r2++++04jRoxQ06ZNlZqaqry8PK+rDOGiaAEAAOzRS9mJ6QBQ21G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsA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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24026\n",
      "427 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[3],\n",
    "           121,\n",
    "           159,\n",
    "           179)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.3192859672732885e-07\n",
      "Cost function before refinement: 2.3192859672732885e-07\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.00000556e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.0856624751999954e-10\n",
      "     jac: array([-2.72031959e-07,  2.34632462e-08, -3.13650477e-11,  1.14575097e-09,\n",
      "       -9.14368789e-11, -1.88744526e-07,  5.83778581e-11])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19996884e-01,  3.16531473e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.00000599e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.0856624751999954e-10\n",
      "GonioParam(dist=0.719996884236354, poni1=0.031653147292955666, poni2=0.004, rot1=0.0, offset=-60.00005992106343, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.031653147292955666\n",
      " Number of peaks found and used for refinement\n",
      "864\n",
      "Cost function before refinement: 3.883355149577502e-07\n",
      "[ 7.19996884e-01  3.16531473e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.00000599e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 8.35586015918641e-08\n",
      "     jac: array([-2.49360177e-09, -2.03934647e-11,  4.26768070e-06, -3.07547620e-06,\n",
      "       -2.94530622e-10,  1.68280037e-04,  1.16002486e-05])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20644233e-01,  3.20496137e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -6.00000548e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 8.35586015918641e-08\n",
      "GonioParam(dist=0.7206442326818199, poni1=0.032049613716226354, poni2=0.004, rot1=0.0, offset=-60.000054800019825, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.719996884236354 --> 0.7206442326818199\n",
      "Cost function before refinement: 8.35586015918641e-08\n",
      "[ 7.20644233e-01  3.20496137e-02  4.00000000e-03  0.00000000e+00\n",
      " -6.00000548e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 3.3388878229483034e-10\n",
      "     jac: array([-3.34948071e-07, -1.35145738e-09, -1.13491295e-07,  8.31385815e-08,\n",
      "       -3.43393425e-10,  3.68209766e-09,  5.32985622e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 46\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20645314e-01,  3.22371238e-02,  3.97565133e-03,  1.75424155e-05,\n",
      "       -6.00000524e+01,  9.99011856e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 3.3388878229483034e-10\n",
      "GonioParam(dist=0.7206453140156728, poni1=0.03223712376780837, poni2=0.003975651331253134, rot1=1.7542415484114082e-05, offset=-60.000052437600765, scale=0.999011855791219, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.999011855791219\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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376RAjBixAhp2bKl9OvXT774xS8iAFDwaArAX/7yl9wwmQ9RAnDFFVc0uuf888+X4uLierEoATggJaecckq9rwcd/GrdurV07949t+fAk43ee++9Bvn27t0rJSUloQIwYcKE0PPduHGjVFRUyBlnnCGHH354g+/333TTTU2+PwfTmAAcffTRUlxcLLt27Wqwfs+ePdKiRQtp165dvfiBrwA1xrXXXitBEMgHH3wQel4AAD6DAHjCzp075aOPPhIRkddee81YALZs2SIff/yxiOx/vnmUAHz44Ye5Rw5efvnlCAAUPGl8BSjf/101dRNwYzQ29EYJwIH/x76p1wknnJDb07lzZwmCQD777LNGe/jCF74QKgBhN81u2rRJTjzxRAmCQHr37i2jRo2Su+++WyorK6WsrKzRc04iAC1atJBjjjmm0fUHei8qKqoXi/pseRIRADR3EAAPaUoAnnnmGfnSl74krVu3ljZt2shll10mNTU1ofmaEoCDQQAAdAXg7rvvliAI5Oqrr86rtg0BeOuttyQIArnyyivz6klE5Jxzzkn8E4Cwf8smTpwoQRBIZWVlg2OvvPKKmgAc+AlAY79b4cBPAI488sh6cQQAALIMAuAhUQLw+OOPS1FRkVx66aUyZcoU+cEPfiAnnHCCtGvXLvQ/RggAQDw0HwN6zDHHSBAE8tvf/jav2loC8Pjjj0sQBPLYY481WL9nzx5p166dHHfccXn/wrEDNwYnuQcgTABuvvlmCYJA3nzzzQbHvv/97zd6zgf6aOzmYZHG34uvfOUrEgSBzJ8/v8H6F154IfQeAAQAALIKAuAhYQKwdetWadeundx444314n/961/lyCOPbBA/AAIAEA8NAXjjjTdyj9S87LLL8q6tJQC///3vJQgCue+++xrdc++990oQBPLtb39btm/f3uD4unXrZMWKFbm/L1y4MPcUoE8//TQX37VrV+6m2LgCcGDInzx5cr3466+/nvt9AZ8/59GjR0sQBPUee3owjb0Xs2bNkiAIpFevXrJt27ZcfNu2bdKrVy8JgkB+8Ytf1NuDAABAlkEAPCRMAJ5++uncf/g2bNhQ7/XVr35VTj755EbzIQAATTN79mwZMWKEjBgxIvd8/JNOOikXu+OOO+qtPyAApaWluRtn77rrLrnppptyj5YMgv3Psg/73nxjaAnAJ598Iq1bt5YjjjhCbrnlFhk/fryMHz8+N7zv3r1bBg0aJEEQyD/+4z/KN77xDfmP//gPuf766+WCCy6Q4uJi+f73v18v50033ZRbf+utt8odd9whXbp0yf0egBNPPLHe+qYE4MMPP8x9PefKK6+UMWPGyJVXXimHHHKIDBkypNFzPvDY086dO8uYMWNk/PjxMmXKlMj3QkTk6quvzt3XcNttt8l3v/vd3P0HB/9eggMgAACQZRAADwkTgB/84AeRN+wdccQRjeZDAACa5sBz8cNen//fxQEBOPjVsmVL6dChg1xwwQVSXl4uy5cvj92HlgCIiDz77LNy3nnn1Xu6zsF59+3bJ48//rhcfPHFctRRR8khhxwiHTt2lPPPP18eeOCBBk+5qaurkx/+8Idy6qmnyqGHHirHHXec/Nu//Zt8+umn0qZNmwZPzWlKAET2P1f/X/7lX+TYY4/N/RbgadOmRZ7zQw89JKeddpoceuihDT6bqN8E/PDDD0uPHj2kVatW0qpVKzn33HPlxz/+ceRvAm4MBAAAmjsIgIeECcCBH5c/8cQT8vzzzzd4hQ34CAAApMnq1aslCAIZOnSo61YAACAPEAAPCROA//7v/5YgaPyX2USBAACABh999FGD/7d827Ztctlll0kQBPLrX//aUWcAABAHBMBDwgRg8+bNcsQRR0j//v0bfXLH+vXrG82HAACABhUVFXL88cfL8OHDpaKiQkaMGCFf/OIXJQgCGThwoOzbt891iwAAkAcIgEdMmTJFxo8fL6NGjZIgCOSqq65qcOPerFmzpLi4WLp37y7f+973ZOrUqXL33XfL2WefLbfccku9fAf2Dh06VIIgkOuvvz4XO5g///nPufipp54q7dq1y/197ty51s4fAPxm/vz5cumll0qHDh3k0EMPldatW8vZZ58t//mf/5n340QBAMA9CIBHlJaWht6AePDNZtXV1XLJJZfIkUceKS1btpTOnTvLyJEj5U9/+lO9fFE3NB7MgRv1GnuF3XQIAAAAAM0TBAAAAAAAoIBAAAAAAAAACggEAAAAAACggEAAAAAAAAAKCATAIZs2bZI5c+bIsmXLpKamhhcvXrx48eLFi1eM17Jly2TOnDmyadMm12NdswIBcMicOXMin9TDixcvXrx48eLFq+nXnDlzXI91zQoEwCHLli3LXbSuDToTr549pSYI9v/p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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXxU1f3/8ZOFhDVhN6TEaAIqYBGFyBdcUBSUilslFVQE5acV92ICorZRKEjQr3EpCrZIXart1z4stbYi4EpFllpE2TcVEGVxAUQgJHn//qAzZZhJZubMnbmzvJ6Px33w4M69M3dmTpLP+95zzjUCAAAAkDKM2wcAAAAAIHYIAAAAAEAKIQAAAAAAKYQAAAAAAKQQAgAAAACQQggAAAAAQAohAAAAAAAphAAAAAAApBACAAAAAJBCCAAAAABACiEAAAAAACmEAAAAAACkEAIAAAAAkEIIAAAAAEAKIQAAAAAAKYQAAAAAAKQQAgAAAACQQggAAAAAQAohAAAAAAAphAAAAAAApBACAAAAAJBCCAAAAABACiEAAAAAACmEAAAAAACkEAIAAAAAkEIIAAAAAEAKIQAAAAAAKYQAAAAAAKQQAgAAAACQQggAAAAAQAohAAAAAAAphAAAAAAApBACAAAAAJBCCAAAAABACiEAAAAAACmEAAAAAACkEAIAAAAAkEIIAAAAAEAKIQAAAAAAKYQAAAAAAKQQAgAAAACQQggAAAAAQAohAAAAAAAphAAAOGjWrFkyxmjWrFkxe01jjPr16xez1wOCeeyxx9SlSxc1btxYxhhVVVW5fUhWRowYIWOMPv30U7cPJSJffvmlrr32Wv3oRz9Senq6jDH69ttvrZ/v008/lTFGI0aMcO4gk0C/fv1kDGUVEgMtFQnNGOOzpKenq02bNjr33HP1hz/8IebHQwCInu3bt+vOO+9Up06d1LhxY+Xl5em8887Tb3/7W7cPDUd46aWXZIzRqaeeqrvvvlsVFRX64IMP3D6sgCoqKmSM0dtvvx3w8WQJABdccIHS0tJ01VVX6Ve/+pUqKiq0f//+Bvdp6PcKASAwAgASCS0VCc1T+FdUVKiiokL33HOPfvrTnyojI0PGGP3iF7+I6fEQAKLjhx9+UOfOnWWM0SmnnKK77rpLN954o3r27KnjjjvO7cPDEa6++moZY/TFF1+4fShBBQsA27Zt0+rVq1VdXR3bA3PQwYMHlZ6ergEDBoS1HwEgfAQAJBJaKhKaJwAcbf78+UpLS1NaWlpMz94RAKLjr3/9q4wxOvPMM1VbW+vzWCIUmqnk3HPPTZgiKFgASAaff/65VbFOAAgfAQCJhJaKhFZfAJCkLl26yBij//u///NZv2jRIl1xxRU65phj1KhRI3Xs2FE33nhjwELyX//6l26//XZ1795drVq1UnZ2tjp16qQxY8bom2++8du+vgDwzTff6KyzzlJaWpomT54c9H0dPHhQjz32mE499VS1bNlSTZo0UWFhoS655BLNmzfP7zPo16+fdu7cqRtuuEF5eXnKyspS165d9cwzzwR87ieeeEKDBg3Sscceq6ysLLVq1UrnnXee/vGPfwQ8nsLCQhUWFuq7777TLbfcovz8fGVnZ6tLly567LHHVFdXF3C/cD7rhvz973+XMUY333xzWPuF4sUXX9Q555yj3NxcZWdn66STTtLEiRN14MABv209n/WXX36pUaNGKT8/X+np6d7v29NlZOPGjXr88cf14x//WI0bN/YppGpra/XUU0+pV69eatasmZo2bapevXrpySef9As3obxmfWy+5+XLl2vo0KEqLCxUVlaW2rZtq1NPPVV33HFH0LPgnmI60CIFLxoDFU9vv/229wrfsmXL9JOf/ES5ublq0qSJzj77bL3//vsBn6umpkZPPfWU+vbtq5ycHDVu3FjFxcUaNWqU1q1bJ+lwm27oeKWGuwD96U9/0llnneV9/pNPPlmTJ08O2G48Pz/ff/+9ysrKVFBQoKysLBUXF2vKlCn1/vzUZ926dRo+fLjy8/PVqFEjdejQQcOHD/e+tyNfN9D7a6hw9/wOC7RUVFRI8v0uP/30U1155ZVq06aNsrOz1bNnT/3tb3+r9/nD+Xmrz9q1azVu3Dj17NlTbdu2VVZWlo499ljdcMMN2rJli9/2tu1o27ZtGjlypNq1a6fGjRvrlFNO0e9//3uf5ztSQwFgzpw5GjRokNq0aaOsrCwVFRWprKwsorEYQCQIAEhoDQWAk046ScYYvfzyy951M2fOVEZGhpo2baqhQ4eqvLxcl112mdLT09WhQwd9/vnnPs/x85//XO3bt1dpaanGjBmjO++8U2eddZaMMerSpYv27Nnjs32gAPD555+rS5cuatSokZ5//vmQ3tewYcNkjNHJJ5+s22+/XePGjdPw4cN1/PHH66677vL7DE455RSdcMIJOvnkk3XrrbfqhhtuUMuWLWWM0e9//3uf7b/88kulp6frzDPP1KhRo3T33XdrxIgRat26tYwxAfvUFxYWqkOHDurVq5c3AN16663q0KFDvYV5uJ91Qw4dOqTTTz9dubm5WrVqVcj7BXPdddfJGKOOHTvq+uuv15gxY9S3b18ZY3TOOefo0KFDPtsbY/TjH/9YhYWF6tatm2699Vbdfvvt3oLaUzAOHjxYubm5uuqqqzRu3Djdc8893ue46qqrZIxRQUGB7rjjDt15553eQu2qq67yO8Zgr1mfcL/n5cuXq3HjxmrSpImuvPJK3X333br55ps1cOBANWrUSHv37m3w9d5++21VVFR434unW16gojGQhgLARRddpCZNmqh///666667VFpaqvT0dDVu3Fhr1qzx2efgwYMaMGCA9zO+6aabNHbsWP3sZz9T69atvT+bVVVV3tccMWKE3/FK9QeA8ePHyxijtm3b6qabblJZWZm6devmDWsHDx702b6wsFD5+fk644wzdPzxx+vGG2/UzTffrPz8fBljdP/99zf42R5pyZIlysnJUVpami699FKNHz9el19+udLS0pSTk6MlS5Z4t62qqtIdd9zh/R3heX9/+ctf6n3+ZcuWecNcYWGhz+fiuVLi+S7POecctWvXTr1799add96pa6+9VtnZ2UpPT9dbb73l99zh/rzV58EHH1Rubq4uu+wy3Xbbbbrrrrt04YUXKi0tTXl5edq6davP9jbtaPv27d62fPbZZ+vuu+/WyJEj1bRpU1122WVhBYD7779fxhi1bt1a1157rcrKyjRw4EAZY9S1a1ft3r07pPcNOIkAgIRWXwCYN2+etwvQZ599JunwWaNGjRqpuLjY7w/E/PnzlZ6erssuu8xn/Weffaaamhq/5//d734nY4ymTJnis/7oAPDRRx+pQ4cOysnJ8TtzX5/vvvtOaWlp6tmzZ8DX3rVrl8//PZ/BqFGjfLZfuXKlMjIy1KVLF5/tDxw4EPAs2Xfffadu3bqpVatW+uGHH3we8/whPOOMM3zO1H399dcqKiqSMUbvvvuud73NZ92QnTt3eguFY445RsuXLw953/p4vqvLL7/c7/16CqBHH33UZ73nsx4+fHjAYsVTMObn52vTpk1+j7/44oveAbJHFtTff/+9evbsKWOM3+D1YK9Zn3C/5zFjxsgYo9mzZ/vt88033wS8OhFIfUVQJAEg0FW16dOnyxij0aNH+6z3FOcXX3yx31nlAwcOaMeOHd7/2wwCXrhwoTdcfPnll971hw4d0uDBg2WM0aRJk3yex/PzM2jQIJ/PfPv27crNzVVubm5I4wzq6uq8JzZeeOEFn8f++Mc/yhijE0880ee7su2uE0oXoEDhZc6cOd73eiSbn7f6bN26NeAVgzfeeEPp6em66aabfNbbtKPrr79exhiNHTvWZ/1HH32krKyskAPAW2+9JWOM+vTp43e23/OZ3HnnnaG8bcBRBAAktCMvTXsGAV9xxRUBBwHfeeedMsbotddeC/hcl112mTIyMvzO6gdSV1ennJwcnXvuuT7rjwwAc+fOVYsWLZSfn6+PPvoo5Pe0e/duGWPUt2/fkLoGGGPUtGnTgGeRzj77bBljgp699fjf//1fv2Je+m8B89577/nt43nPI0eO9K5z8rPet2+funfvrubNm+vPf/6zOnfurJYtW2rBggV+23bu3Fk5OTlBn1OSevTooczMzICX4GtqatSmTRuVlJT4rDfGKCsrS9u3bw/4nJ6Csb5C5vzzz5cxRm+88YbfY/Pnz5cxxq9NBXtNG4G+Z08ACHRs4YhGADjjjDP8tq+urlZmZqZ69uzpXVdTU+Pt2hFKNzObAPD//t//kzFGM2bM8Nt+7dq1Sk9P1/HHH++z3vPzs379er99rr32Whlj9MknnwQ93n/+85/eYjKQM8880+97jWYAKCwsDHiS4thjj1WbNm181tn8vNn48Y9/7Pf5h9uODh48qCZNmig3Nzfg7yhPGwglAHiuFqxYsSLg8fbo0UPt2rUL9e0BjiEAIKF5AoBnSUtLU6tWrXTOOef4dbfp3bu3jDEqLy/3uaztWTxnmP/1r39596murtYTTzyhM844Q61atfLOoe1ZTjjhBJ/X8BTDF110kRo1aqSuXbuG1dXF4+KLL5YxRt27d9cDDzygt956S/v27av3MzjllFMCPuaZkWXz5s0+61esWKERI0bo+OOP987VfuTy4osv+mxfWFiozMzMgH/sPcXAkcdg81nX595775UxRtOnT5d0+Oxfp06d1KRJE5++xgcOHFB2drb69+8f9Dn37duntLQ0tWvXLuDxVVRUKD8/X82bN/fZL9B3fiRPwbhw4cKAj7du3Vrp6el+XUSkw2eQMzIy1LJly7BesyHhfM+LFy9WRkaGmjRpouHDh+vZZ5/Vhg0bwn7NaASAO+64I+A+P/rRj1RUVOTzfo0x6t27d0jHahMATjvttHqLeelw8WuM0XfffeddV1hYqNzc3IDbe9p3oHB9tMcff1zGGN17770BH//Vr37lF0CjGQAuvfTSgI+fccYZSk9P9/7f9uetPnV1dXr++ed13nnnqW3btt4TPp4lKyvLZ/tw29HHH38sY4zOOuusgNv//ve/DzkAeMY/1fe+u3btKmOM35VdINoIAEhonl/4oejUqZNfARRoeeedd7z7XH755TLGqKioSCNHjvTOa15RUaHc3FwVFhb6vIYnAHj6WV933XVhD/CTDk97WVFR4Z360hijxo0b65prrtFXX33l9xnU94c6UAHzwQcfqEmTJmrUqJEuvPBC3XHHHfrlL3+piooKXXrppQEvkxcWFiovLy/ga+zfv1/GGJ/pOG0+6/ocd9xxysrK8rnkv3XrVhUXFyszM1PPPvusJGn27Nk+QaEhW7duDen4jm5bxhzuD1wfz+cdqPuPJGVkZKht27b17n/MMccoLS0trNesj833vHDhQm8/ac/7P/HEE/0CYUOiEQCOLrQ8PINrPTxnyH/605+GdKw2AaC4uFjGGH3//fcB9/GEX0/Xw0DHGc4xHGnixIkyxug3v/lNwMefeuopGePbLSeaASDU79L2560+niuMHTp00NVXX62xY8d6fy97rrYcKdx2tGDBAhljNGTIkIDbv/766yEHgMzMzJDe95HtBYgFAgASWjh/NDx9rEMdcLV06VIZY3T++ef79b2ura31zsxzJE8AmD59ui655BIZc7hrTKj9pwPZvHmzXnjhBW/3kTPPPNPn8XADwEUXXVRvwTF58uR6A0A4VwDC/awbkpWV5dedQJK2bNmioqIipaWl6eGHH1ZJSYny8vKC3uBIkvbu3StjDvfFD0dDn7UU/MZRnisAgfp7e64AHH2mONhr1sfme/Y4cOCA3n//ff3yl7/0DiYPdQxLfQHAMx3l1VdfHXC/U045JeLCLZZXAOq7OuK5AnBkVxenAoDnCsB9990X8HHPFYAj77wcDwHA9uctkO3btys9PV0nn3xywO45J5xwQsTtaPny5TLGmSsAbdq0UatWrYK/MSDGCABIaOEEgFtuuUXG1N8v/WieO5o+/vjjfo998MEHMsbUGwBmzZql6upqlZaWyhijYcOGhTWAM5Da2lrvmfUjLxeHGwBOPPFEtW7dOuD2F1xwQb0BwJjQxwCE+1k3xPMHPVAf6c2bN3sHIRtj9Kc//Snk5+3WrZuysrL09ddfh7xPpAHgvPPOkzFG8+fP93vszTfflDGBxwDYBACb7zmQ5557TsYY3XrrrSG9bn0BYM+ePfVezdi9e7f3qsORwi3campqvNPmhjIGYMKECfV+H1Lg73PUqFEyxuh3v/ud3/br16+vdwyAEwHAc2b66JMAHp4ZypwYA+CZQSoQm6s5Nj9vgXh+944ZM8bvsS1btnjPuB8p3Hbk5BgATxCvbwwA4BYCABJaOAFg9erVatSokTp37qy1a9f6PX7w4EGfAtfzh+bo7gTbt2/3ngVsKABIhwuSa665xvs8ocz0sWPHDn388cd+6/fs2aO8vDxlZmb6/FEKNwB4ir+jZ9LxzGzUUAAINAuQp0vEkUVHuJ91QyorK2WMUY8ePfwK64MHD+rGG2/0HveRZz6DmTlzpow53I850MDEb775Rh9++KHPukgDwB/+8AcZY1RSUuIzpmPfvn0qKSmRMf6zu9gGgHC/5/fff99vdhZJeuihh2SM/2wo9WloLvSTTjpJGRkZWrlypXddTU2Nt6iOtHCTpHvuuUfGBJ4F6ODBgz6zAE2bNk3GmID3y5ACf5/vv/++jDnc5e3I56qpqfF2rfr1r38d9Dg9wgkAdXV1OvHEE2WM7/TGkvTyyy/LmMPjRZyYBahdu3b1HrNNALD5eQvkyy+/lDFGp59+us8Vyb179+rCCy90rB2NHDkyYLsPdxYgz+D+Pn36BAyl33//vT744IMg7xpwHgEACS2cACBJzz//vBo1aqTMzEwNHjxYY8aM0W233aZLL71UrVu31oknnujdtqamRmeccYb3l3d5ebmuvfZatWvXTmeeeaby8/ODBgDp8Jl7zxmjwYMHB73hzbJly2TM4bnfr776au987J6uBbfffrvfZxBOAPD0X23RooVGjRqlMWPG6Oyzz1Z6erqGDBlSbwA4+j4At912W4P3AQjns27IoUOHvMfVpEkTlZaW6u677/beFMtz9SEvL09paWl+02g25Oabb5Yxh8dsDBs2TOPGjdMNN9yg888/X1lZWfr5z3/us32kAUCSfvazn3kLyDvvvFO/+MUvdPzxx8sYoyuvvNJve9sAEO73fOmll6pFixb6yU9+oltuuUXjxo3T4MGDlZGRoVatWoU8ILihAOApAlu2bKkbbrhBt912m04++WSdeOKJjnQBkg4X+Z4rLccee6xuvvlmjRs3TldddZXatm3r855XrVql9PR0HXPMMRozZowmTpyoiRMneh+v7/scO3asjDFq3769br75ZpWXl+vkk0/2np0PdB8AJwKAdPjmei1atFB6erouv/xyjR8/Xj/96U+Vnp6uFi1aaNGiRT7b2waAoUOHen9n/epXv9LEiRO9Id8mAEjh/7wFO7aTTz5ZY8aM0ahRo3TsscfqhBNOUI8ePRxpR1999ZX3d26/fv00fvx4v/sAPPDAAyG97ylTpigtLU1NmzbVkCFDVF5ertGjR+snP/mJmjVrpgsuuCCk9w04iQCAhBZuAJAOz/AwYsQIn7ujduvWTTfeeKPefPNNn22//vprjR49WoWFhcrOzlZRUZHGjx+vffv2BfyjUd+dgOvq6nTrrbfKGKOBAwcGPNPq8e233+qBBx7Queeeq/z8fGVlZSkvL0/9+vXTiy++6DeoONwAIEl/+9vf1Lt3bzVv3ly5ubkaMGCA3n333XqP3/Nev/vuO+8NjLKysnTSSSc1eCfgcD7rYF544QWde+65ys3N9d5VeNiwYd67eC5evNg76PX1118P+Xn/9re/6aKLLlK7du3UqFEjHXPMMSopKdG9996r1atX+2zrRACora3VtGnT1LNnTzVp0kRNmjTRaaedpt/85jcN3gnYRjjf8xtvvKGRI0eqS5cuysnJUdOmTXXCCSfotttuC2uAYkMBQDp8BaJr167KysrSMcccoxtvvFG7du1yZBCwx6FDh/TEE0+opKTEe7flTp066YYbbvCbvef555/XKaec4jNLkkdD3+dLL72kM844Q82bN1d2dra6du2qX//61wHHoDgZACRpzZo1uuaaa7xXBPPy8nT11Vf73cxKsg8A27dv17Bhw9S+fXvv7Gee78E2AEjh/bzVZ9++fbrnnntUXFys7OxsdezYUTfffLPj7Wjr1q269tpr1bZtW587AXuuthx9xbGh971gwQKVlpaqQ4cOatSokdq2batTTjlFv/jFL7R06dKQ3jfgJAIAgKAaKmAAIJV4upnNmTPH7UMBrBEAAARFAACQagL12f/444/VvHlztW7dOqQZx4B4RQAAEBQBAECq6dChg8466yyNHj1aZWVluvTSS5WZman09PSwxhoB8YgAACAoAgCAVHP//ferR48eatmypTIyMtSmTRtddNFFYY3XAOIVAQAAAABIIQQAAAAAIIUQAAAAAIAUQgAAAAAAUkjSBIADBw5o7Nix6tChgxo3bqzTTz9dc+fODWnfrVu3qrS0VLm5uWrRooUuueQSbdy4scF9FixY4L1pzM6dO514CwAAAEDUJU0AGDp0qDIzM1VWVqYZM2aoT58+yszM1IIFCxrcb+/evercubPat2+vyspKPfLIIyooKFDHjh21a9eugPvU1taqR48eatasWUQB4Ntvv9Xs2bP14YcfasWKFSwsLCwsLCwsLGEsH374oWbPnq1vv/3WqhZLVUkRABYvXixjjB566CHvuv3796u4uFh9+vRpcN/KykoZY7RkyRLvutWrVysjI0Pjx48PuM9TTz2lNm3a6I477ogoAMyePdt7FYGFhYWFhYWFhcVumT17tlUtlqqSIgCUl5crIyNDu3fv9lk/efJkGWO0efPmevctKSlRSUmJ3/qBAwequLjYb/3XX3+tNm3aaNq0aaqoqJAx9gHgww8/9DZatxM0CwsLCwsLC0uiLZ6TqR9++KFVLZaqkiIAnH/++erSpYvf+vnz58sYo1dffTXgfrW1tcrOztbo0aP9HrvvvvtkjNGePXt81t98883q1q2bampqIg4AK1askDFGK1assNofAAAglVFL2UmKANCtWzf179/fb/3KlStljNH06dMD7rdz504ZYzRhwgS/x6ZNmyZjjNasWeNdt3z5cmVkZOiNN96QpLACwPbt2+tNrTRaAACA8BEA7CRFACgqKtKgQYP81m/cuFHGGFVVVQXcb/PmzTLGqLKy0u+xmTNnyhijZcuWedf169dPgwcP9v4/nADg2TbQQqMFAAAIHwHATlIEgFhcAfjjH/+oRo0aae3atd5tuAIAAADgHgKAnaQIALEYA1BQUKCrrrpKn376qXfxzAL073//W1988UXYx02jBQAAsEctZScpAkBZWVnAWYAmTZoUdBagXr16BZwFaMCAASoqKvL+P9j0U6ecckrYxx1Ko62rq9PevXv1xRdfaNOmTdq4cSNLAiybNm3Sjh07dOjQobDbBQAACA0BwE5SBIBFixbJGN/7ABw4cECdOnVS7969ves+//xzrV692mffKVOmyBijpUuXetetWbNGGRkZGjdunHfdX/7yF7/lyiuvlDFGzz33nN56662wjztYo62rq9NXX32lVatWadWqVVq/fr3rhS1LaMvatWu1atUqffbZZ6qrqwu7bQAAgOAIAHaSIgBIUmlpqTIzM1VeXq4ZM2aob9++yszM1Lvvvuvdpl+/fjLG9y3v2bNHxcXFat++vaZOnaqqqioVFBQoPz9fO3bsaPA1oz0N6N69e71F5MGDB61eA+6oq6vTF198oVWrVvldmQIAAM4gANhJmgCwf/9+lZWVKS8vT9nZ2SopKdGcOXN8tgkUACRpy5YtGjJkiHJyctS8eXMNHjxY69evD/qa0Q4AngKS4j8xHTp0SKtWrdKWLVvcPhQAAJISAcBO0gSARBSs0W7atCmkIIL4tW7dOm3atMntwwAAICkRAOwQAFwUrNF6+pMjcW3YsIHvEACAKCEA2CEAuIgAkPz4DgEAiB4CgB0CgIsIAMmP7xAAgOghANghALiIAJD8+A4BAIgeAoAdAoCLUj0AzJo1q94bq40bN05dunRR9+7d/fZ75ZVXZIzR2Wef7ffYzJkzZYzRG2+84fMaR97n4Uj9+vVTt27dfNYVFhbKGKPzzjsv4D5PP/209zjre16PZP8OAQBwEwHADgHARW4GgOqaWi3csEuvf7JNCzfsUnVNbVRepyGe4nzChAl6/vnnfZZly5bphhtuUHp6ur777juf/e666y5lZmaqSZMmqq6u9nns+uuvV0ZGhvbs2ePzGuEGgMaNGys9PV1ffvllwH0aN25MAAAAwGUEADsEABe5EQCqa2r12Px16jlxrgrHveZdek2cp8fmr4tpEAhWnD/77LMyxugf//iHz/r/+Z//0VVXXSVjjD744AOfx0444QSdeuqpIb9GfQHgvPPOU05Ojh599FGfx7Zs2aL09HRdccUVBAAAAFxGALBDAHBRrANAdU2tRj6zWIXjXtNxRxT/R/7/ullLYhYCghXnGzdulDFG9957r3fd/v37lZWVpT//+c8qKirSww8/7H1sx44dMsbotttuC/k16gsAF110kUaOHKnTTz/d57GpU6eqTZs23m5ABAAAANxDALBDAHBRrAPAY/PX+RT99S2Pz1/n2Gs2xFOcz58/Xzt37vRZPPLz89WvXz/v/9977z0ZY7Rt2zZdc801uvzyy72PzZ49W8YY/elPfwrpNXbu3Km+ffvWGwDmzp0rY4w2bNjgfaxHjx76+c9/HjRYeBAAAACIHgKAHQKAi2IZAKpratVz4ly/M/9HL8f9pztQLK4CNDQI2KO0tNSnr/+DDz6o448/XpL05JNPqn379t5ty8rKZIzRF198EdJreJb6AkBNTY3y8vI0ceJESdKqVatkjNG7775LAAAAIA4QAOwQAFwUywCwcMOukM7+e5aFG3Y58roN8RTR06ZN0z5YldsAACAASURBVLx583wWj8cee8ynr//gwYN19dVXS5KWL18uY4zWrTt8xaJPnz7ecBDKa8ybN0/du3evNwBI0u23366uXbtKku69914VFBSorq6OAAAAQBwgANghALgolgHg9U+2hRUAXv9kmyOv25BQiugPP/xQxhg9/PDDqqurU+vWrfXkk09Kkmpra5WTk6NZs2Z5xwYMHz48rNdoaAyAJC1atEjGGH300Uc6/vjjVV5eHvKxSwQAAACiiQBghwDgIq4ABC+ia2pq1KJFC1122WXeLjgfffSR9/EBAwZo1KhR3rEBM2bMCOs1ggUASSouLtY555wjY4yWLVsW8rFLBAAAAKKJAGCHAOAixgCEVkQPGDBA7dq109NPP62cnBzV1v732CoqKnTSSSfpwQcflDFGK1euDOs1QgkA9913n4wx6tKlS9jHTgAAACB6CAB2CAAuYhag0IroBx54QMYY9enTRwMGDPB57I033lBaWpr+53/+R23atFFdXV1YrxFKAPjss89UUVHhcz8CAgAAAO4jANghALjIjfsAXDdrScLcB8DjzTff9M7Yc//99/s8tnv3bqWnp8sYo4svvjjs1wglAERy7AQAAACihwBghwDgIrfuBPz4/HXqNXGe352AH4+zOwF77Nu3T5mZmTLGaO7cuX6Pd+/eXcYYVVZWhv0aBAAAABIXAcAOAcBFbgQAj+qaWi3csEuvf7JNCzfsimnhn0oIAAAARA8BwA4BwEVuBgDEBt8hAADRQwCwQwBwEQEg+fEdAgAQPQQAOwQAFxEAkh/fIQAA0UMAsEMAcBEBIPnxHQIAED0EADsEABcRAJIf3yEAANFDALBDAHARASD58R0CABA9BAA7BAAXEQCSH98hAADRQwCwQwBwEQEg+fEdAgAQPQQAOwQAFxEAkh/fIQAA0UMAsEMAcBEBIPnxHQIAED0EADsEABcRAJIf3yEAANFDALBDAHARASD58R0CABA9BAA7BAAXEQCSH98hAADRQwCwQwBwEQEg+fEdAgAQPQQAOwQAF7kaAGqqpU3vSSv/evjfmurovE6U7N+/X7W1tQEf+/777yN+fieeQyIAAAAQTQQAOwQAF7kSAGqqpXcqpanFUkXOf5eHOh1e70IQ2Lp1q6677jq1b99eWVlZ6tq1q2bOnOl9/O2335YxRi+99JLuvfde5efnKy0tTd9++61mzZolY4zeeecdjR49Wu3atVPLli29+/773//WhRdeqBYtWqhZs2bq37+/PvjgA5/XD/YckSAAAAAQPQQAOwQAF8U8ANRUSy8M+U/Rn+sbADz/f6E0piHgq6++UseOHVVQUKAJEyboqaee0iWXXCJjjKqqqiT9NwB07dpVPXr00COPPKIHH3xQ+/bt8xbvXbt2Vb9+/fTEE09oypQpkg5/vs2aNVOHDh00ceJETZkyRccff7yys7O1aNEi7zE09ByRIgAAABA9BAA7BAAXxTwAvFN5VNFfz/LOVOdeM4hRo0apQ4cO2rVrl8/6oUOHKjc3Vz/88IM3ABQVFemHH37w2c5TvJ955pmqqanxeeyyyy5TVlaWz2e4bds2tWjRQmeffXZIzxEpAgAAANFDALBDAHBRTANATfV/uv0cfeb/6CX3cHegGFwFqKurU8uWLXXjjTdq586dPounKP/nP//pDQAPPPCA33N4tnv22Wd9325NjZo2baqf/exnfvv8/Oc/V3p6unbv3t3gcziBAAAAQPQQAOwQAFwU0wCw6b3Qzv57lk3vOfO6Ddi+fbuMMQ0ur7zyijcAPPfcc37P4Sne33vP93i//PJLGWP0y1/+0m+fRx991Odzr+85nEAAAAAgeggAdggALoppAFj51/ACwMq/OvO6DfAU6ddcc43mzZsXcNm+fbs3ALz88st+z+Ep3pcuXRrwucMJAEc/hxMIAAAARA8BwA4BwEWpfgWgpqZGLVq00LBhwxrcziYANNQF6KabbgrYBYgAAABAYiEA2CEAuCjVxwBI0siRI5WVlaVPPvnE77EdO3ZIsgsA0uFBwNnZ2fr000+967766ivl5OQEHARMAAAAILEQAOwQAFzELECHC/LCwkI1bdpUd9xxh2bMmKEHH3xQpaWlatWqlST7AOCZBvRHP/qRJk2apMrKShUVFdU7DSgBAACAxEIAsEMAcJE79wEojav7AEiHBwPfcsstKigoUKNGjZSXl6fzzjtPTz/9tCT7ACAdvhHYBRdcoObNm6tp06Y699xztXDhwrCeIxIEAAAAoocAYIcA4CL37gQ89XA3H787AU915U7AyYwAAABA9BAA7BAAXORKAPCoqT480HflXw//S+EfFQQAAACihwBghwDgIlcDAGKC7xAAgOghANghALiIAJD8+A4BAIgeAoAdAoCLCADJj+8QAIDoIQDYIQC4iACQ/PgOAQCIHgKAHQKAiwgAyY/vEACA6CEA2CEAuIgAkPw2bNjAdwgAQJQQAOwQAFwUrNFu2rRJa9euVV1dXYyPDE6oq6vT2rVr9emnn7p9KAAAJCUCgB0CgIuCNdodO3Zo1apV+uKLL3To0KEYHx0iUVdXp6+++kqrVq3Stm3b3D4cAACSEgHADgHARcEa7aFDh/TZZ59p1apVWrVqldatW+ftUsISv8uGDRu0du1arVq1Sp9++qlqa2tj3LIAAEgNBAA7BAAXhdJo6+rqtHv3bm3ZskWbNm1yvbhlCW359NNPtW3bNop/AACiiABghwDgIhotAACAPWopOwQAF9FoAQAA7FFL2SEAuIhGCwAAYI9ayg4BwEU0WgAAAHvUUnYIAC6i0QIAANijlrJDAHARjRYAAMAetZSdpAkABw4c0NixY9WhQwc1btxYp59+uubOnRvSvlu3blVpaalyc3PVokULXXLJJdq4caPPNj/88IOuv/56devWTTk5OWrWrJm6d++uRx99VNXV1VbHTKMFAACwRy1lJ2kCwNChQ5WZmamysjLNmDFDffr0UWZmphYsWNDgfnv37lXnzp3Vvn17VVZW6pFHHlFBQYE6duyoXbt2ebf7+uuv1bt3b5WXl2vatGl66qmnNHz4cKWlpWnYsGFWx0yjBQAAsEctZScpAsDixYtljNFDDz3kXbd//34VFxerT58+De5bWVkpY4yWLFniXbd69WplZGRo/PjxQV/71ltvlTFGX375ZdjHTaMFAACwRy1lJykCQHl5uTIyMrR7926f9ZMnT5YxRps3b65335KSEpWUlPitHzhwoIqLi4O+9sMPPyxjjFavXh32cdNoAQAA7FFL2UmKAHD++eerS5cufuvnz58vY4xeffXVgPvV1tYqOztbo0eP9nvsvvvukzFGe/bs8Vl/8OBB7dy5U5s3b9Yrr7yivLw8FRYW6tChQ2EfN40WAADAHrWUnaQIAN26dVP//v391q9cuVLGGE2fPj3gfjt37pQxRhMmTPB7bNq0aTLGaM2aNT7rX3rpJRljvEuvXr308ccfBz3G7du3a8WKFT7L7NmzabQAAACWCAB2kiIAFBUVadCgQX7rN27cKGOMqqqqAu63efNmGWNUWVnp99jMmTNljNGyZct81n/11VeaN2+eXn75Zd10003q06ePPvjgg6DHWFFR4RMcjlxotAAAAOEjANhJigAQyysAR5s0aZKaN28edBAwVwAAAACcRQCwkxQBIJZjAI62du3aBkNGQ2i0AAAA9qil7CRFACgrKws4C9CkSZOCzgLUq1evgLMADRgwQEVFRUFf+6OPPqq3G1EwNFoAAAB71FJ2kiIALFq0yO8+AAcOHFCnTp3Uu3dv77rPP//cb7rOKVOmyBijpUuXetetWbNGGRkZGjdunHfdzp07VVdX5/fanvsAvPnmm2EfN40WAADAHrWUnaQIAJJUWlqqzMxMlZeXa8aMGerbt68yMzP17rvverfp16+fjPF9y3v27FFxcbHat2+vqVOnqqqqSgUFBcrPz9eOHTu821VVVenEE0/UuHHjNGPGDD388MMaMGCAjDG6+OKLrY6ZRgsAAGCPWspO0gSA/fv3q6ysTHl5ecrOzlZJSYnmzJnjs02gACBJW7Zs0ZAhQ5STk6PmzZtr8ODBWr9+vc82S5cuVWlpqY499lhlZ2erWbNmOu200/TII49Y3QNAotECAABEglrKTtIEgEREowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rKDgHARTRaAAAAe9RSdggALqLRAgAA2KOWskMAcBGNFgAAwB61lB0CgItotAAAAPaopewQAFxEowUAALBHLWWHAOAiGi0AAIA9aik7BAAX0WgBAADsUUvZIQC4iEYLAABgj1rK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MsboiSee0Nq1a7V27VodPXq0zdv279+vs846S5mZmfrtb3+r4uJijR071nPs9zUPwIMGDdI111yjp59+WitWrGgzAJx//vkaP368nn76ad18880yxnh9nESS3n//fUVHR6tPnz565JFHtGjRIvXq1UuDBw8+ZQDwpzaBrimQ9Zz83AOpp79OnDihM888U2PGjPHsGzVqlLKzs1VbW+u1vfvuuzLG6NFHH23zPl944QUZY7Rjxw6v/WVlZcrIyFB1dbXq6up00003KTc31+f80aNH64ILLrB6PgDgLwIAgLDyxhtvKCIiQhEREbr44os1Z84cbdq0SY2NjV7HTZkyRV26dNH27dt97qP5M9bffPONz23Ng96aNWs8+2w+AjR9+nRlZGTo4MGDXvuvu+46de/e3euxmwfoSZMmeR3bVgCYNm2a17Hjxo1TSkqK177c3Fy5XC59+eWXnn27d+9WZGTkKQOAv7UJZE2BrOfk5x5IPf21du1aGWM87yK43W7FxcW1+K5O87Z+/fo27/OBBx6QMUZHjhzxue3BBx9UamqqkpOTNWPGjBY/5nXrrbcqNjY24OcCAIEgAAAIO9u2bdO4cePkcrk8g1lqaqpeffVVSVJTU5MSEhJ0zTXX+H2fjY2NOnjwoGpra5WYmKjbb7/dc1ugAeDEiRNKTEzUrbfe6vNKcvNg+/bbb3uObx6gt27d6nXfbQWAbdu2eR27ZMkSGWN0+PBhSd8Ns7Gxsbr++ut91pybm3vKAOBvbfxdU6Dr+f5zD7Se/ti1a5cSEhJ08cUXy+12S5I+/fRTz7sWpaWlXlvzOz2nuhRoQUGBIiMjA1rL9919990yxrT4cS4ACBYCAICwdfz4cW3btk333nuvYmJi1LVrV+3cuVP79++XMUb3339/m+d/8803mjt3rs466yydccYZXq/03nTTTZ7jAg0ANTU1bb6KbIzRyy+/7Dm+eYDes2eP1323FQD279/f4rHNn13/73//K2OM5s2b57PmO+64w693APypjb9rCnQ933/ugdbzVPbt26e+ffsqMzPT692ITZs2yRijv/71rz7njBo1Smlpaae87/YGgDlz5sgYY/WOBgD4iwAAoENoHhgXLFjgdwCYPn26unTpojvvvFPr16/XG2+8odLSUqWkpOjGG2/0HBdoANi3b5+MMcrPz/d5Jbl5+/4Vi5oH6Nra2hafU0sB4FTHtjcA+Fsbf9fUngAQaD3bUl9fryFDhig5OVk7d+70uu3ll19u8Z2Y+vp6RUVFaebMmae8/+aPAH311Vd+redkt9xyi1wul9W5AOAvAgCADuGjjz6SMUYzZszw+yNA3bt393k1u6GhQREREV5D7mOPPdZqAGjpNrfbrW7duvl8pr81oQgAbrdbMTEx1h8B8rc2/q4p0PWcfG4g9WxNQ0ODhg0bJpfLpXfeecfn9tLSUhljtHHjRq/9y5YtkzFGH3744Skfo/lLwP4c2xK+BAzgdCAAAAgrf/vb31r8oaTFixfLGKMlS5ZI8u9LwMnJyZo6darXbY8++qiMMV5DbnFxsYwx+uCDD3zuq7Xbpk6dqqioqBavVnTgwAGvv0MRACTp6quvtv4SsL+1CWRNgazn5HMDqWdL3G63xo4dq8jISJ8Bv1lNTY26dOmi3/zmN559e/fuVY8ePTRlypRTPoYk/fvf//b6YnGgkpOTVVhYaHUuAPiLAAAgrGRnZ+vss8/WnXfeqZKSEj311FO6/vrrFRERoT59+ngu8VldXa309HTPZUBXrlypBQsWKDs723PMlClTFBERodmzZ2vlypWaOnWqzjrrLJ+PuWzbtk3GGF111VVas2aNXnrpJc8VXFq7bf/+/crKypLL5fLc/8MPP6y8vDwlJSV5PadQBYD33nvP8/sHixcv1kMPPaRevXppyJAhpwwA/tYmkDUFsp6WLgPqbz1bMnv2bBljlJub67lc6/e3ZuPHj1fXrl01b948Pf7448rMzNTgwYM9X672x49//GOrdyuafwjszTffDPhcAAgEAQBAWHnttdc0bdo0nXPOOYqPj1dUVJT69++vwsJCn8+Bf/HFF5oyZYpSU1M9Pzw1a9Yszw+BNV+PvUePHoqPj1dOTo4++eQTZWVl+Qy5RUVFOvPMM9WlSxefQbu122pqajRr1ixlZmaqa9euSk9P16hRo1RSUuJ136EKAJK0efNmnX/++YqKilK/fv20evVq/frXv1ZMTEybdQ6kNoGsyd/1tHSuv/VsyfDhw9v8EnGzQ4cOafz48YqLi1NaWpoKCwsD/jz/kiVLFB8fH/AXee+++2717t27xXe4ACCYCAAA0Mlcc8016t+/v9PL8Pihrae96uvrlZycrNWrV/t9zrFjx5Senq6lS5eGcGUA8B0CAAB0YCe/Cl1ZWamuXbvq5ptvZj0h9Mgjj2jgwIFqamry6/ji4mJlZmbq2LFjIV4ZABAAAKBDS09P1z333KOSkhLdf//9Sk5OVlxcnCorK1kPAHRSBAAA6MCmTp2qrKwsRUdHKyEhQTk5OSovL2c9ANCJEQAAAACAToQAAAAAAHQiBAAAAACgEyEAAAAAAJ0IAQAAAADoRAgAAAAAQCdCAAAAAAA6kf8DNekb36NAFUkAAAAASUVORK5CYII=\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "22258\n",
      "663 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[4],\n",
    "           150,\n",
    "           188,\n",
    "           208)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.496585538687667e-06\n",
      "Cost function before refinement: 1.496585538687667e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -5.43998333e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.0171535150920134e-10\n",
      "     jac: array([-2.79014458e-07,  1.12723053e-07,  2.76456642e-09, -8.39426390e-10,\n",
      "        1.01678678e-09, -1.46581687e-07, -5.97716569e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20008138e-01,  3.28813990e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -5.43998223e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 2.0171535150920134e-10\n",
      "GonioParam(dist=0.7200081378039512, poni1=0.03288139900481467, poni2=0.004, rot1=0.0, offset=-54.399822256631786, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03288139900481467\n",
      " Number of peaks found and used for refinement\n",
      "754\n",
      "Cost function before refinement: 3.084426464441637e-07\n",
      "[ 7.20008138e-01  3.28813990e-02  4.00000000e-03  0.00000000e+00\n",
      " -5.43998223e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 6.551090453612858e-08\n",
      "     jac: array([-1.59759495e-09, -1.69126935e-11,  3.81129886e-06, -2.74614198e-06,\n",
      "       -3.33598038e-10,  1.33732118e-04,  8.98242363e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20526837e-01,  3.32363709e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -5.43998177e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 6.551090453612858e-08\n",
      "GonioParam(dist=0.7205268365472406, poni1=0.03323637090038128, poni2=0.004, rot1=0.0, offset=-54.39981766227154, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7200081378039512 --> 0.7205268365472406\n",
      "Cost function before refinement: 6.551090453612858e-08\n",
      "[ 7.20526837e-01  3.32363709e-02  4.00000000e-03  0.00000000e+00\n",
      " -5.43998177e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.9801782405594906e-10\n",
      "     jac: array([-6.28824819e-07, -6.16534335e-09, -8.41801711e-08,  6.31905195e-08,\n",
      "       -4.25490289e-10,  1.87107307e-09,  5.29587814e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 46\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20528271e-01,  3.33948197e-02,  3.97295090e-03,  1.94838596e-05,\n",
      "       -5.43998157e+01,  9.99025942e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.9801782405594906e-10\n",
      "GonioParam(dist=0.7205282706408196, poni1=0.033394819722196205, poni2=0.003972950903091611, rot1=1.948385963684671e-05, offset=-54.399815665191156, scale=0.999025941539747, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.999025941539747\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXxU9b3/8W+SIQlbwm6SEqMJqCwVFAI3uKAIqBVRK2lBRVB+WsG1mIAobRQKEvCCS6ngLaWtVtvb+2jR1isCrtwiSy0u7JsKiLK4ACIhTPL+/YEzZZhJMuebmTnJzOv5eJwHj5w5Z+Y7M9+Qz/uc7/keIwAAAAAJw7jdAAAAAACxQwAAAAAAEggBAAAAAEggBAAAAAAggRAAAAAAgARCAAAAAAASCAEAAAAASCAEAAAAACCBEAAAAACABEIAAAAAABIIAQAAAABIIAQAAAAAIIEQAAAAAIAEQgAAAAAAEggBAAAAAEggBAAAAAAggRAAAAAAgARCAAAAAAASCAEAAAAASCAEAAAAACCBEAAAAACABEIAAAAAABIIAQAAAABIIAQAAAAAIIEQAAAAAIAEQgAAAAAAEggBAAAAAEggBAAAAAAggRAAAAAAgARCAAAAAAASCAEAAAAASCAEAAAAACCBEAAAAACABEIAAAAAABIIAQAAAABIIAQAAAAAIIEQAAAAAIAEQgAAAAAAEggBAAAAAEggBAAAAAAggRAAAAAAgARCAAAAAAASCAEAAAAASCAEACCCFi5cKGOMFi5cGLPXNMaof//+MXs9oC5PPPGEunTpovT0dBljNGfOHLebZGXUqFEyxuijjz5yuyn18tlnn+nmm2/W9773PSUnJ8sYo6+++sr6+T766CMZYzRq1KjINTIO9O/fX8ZQVqFxoKeiUTPGBCzJyclq27atLr30Uv3hD3+IeXsIANGzd+9e3XffferUqZPS09OVlZWlyy67TP/1X//ldtNwkhdeeEHGGJ133nl64IEHVFZWpnfeecftZoVUVlYmY4zeeOONkI/HSwC4/PLLlZSUpBtuuEE///nPVVZWpqNHj9a6T23/rxAAQiMAoDGhp6JR8xX+ZWVlKisr04MPPqgf/vCHSklJkTFGP/3pT2PaHgJAdHz77bfq3LmzjDHq0aOH7r//ft1+++3q1auXzjjjDLebh5PceOONMsbo008/dbspdaorAOzZs0cbN25UZWVlbBsWQceOHVNycrIGDRrkaD8CgHMEADQm9FQ0ar4AcKply5YpKSlJSUlJMT16RwCIjhdffFHGGF144YWqqqoKeKwxFJqJ5NJLL200RVBdASAefPLJJ1bFOgHAOQIAGhN6Khq1mgKAJHXp0kXGGP33f/93wPqVK1fq+uuv12mnnaYmTZqoY8eOuv3220MWkv/85z91zz336Nxzz1Xr1q2VlpamTp06afz48fryyy+Dtq8pAHz55Ze66KKLlJSUpOnTp9f5vo4dO6YnnnhC5513nlq1aqWmTZsqLy9PQ4cO1dKlS4M+g/79+2v//v267bbblJWVpdTUVHXt2lW/+c1vQj73U089pSuvvFKnn366UlNT1bp1a1122WX63//935DtycvLU15enr7++mvdeeedysnJUVpamrp06aInnnhC1dXVIfdz8lnX5uWXX5YxRuPGjXO0Xzief/55XXLJJcrMzFRaWprOOeccTZ06VRUVFUHb+j7rzz77TGPGjFFOTo6Sk5P937dvyMj27dv15JNP6vvf/77S09MDCqmqqio9/fTT6t27t5o3b65mzZqpd+/e+tWvfhUUbsJ5zZrYfM/vv/++hg8frry8PKWmpqpdu3Y677zzdO+999Z5FNxXTIdapLqLxlDF0xtvvOE/w7d27Vr94Ac/UGZmppo2baqLL75Y//jHP0I+l9fr1dNPP61+/fopIyND6enpKigo0JgxY7RlyxZJJ/p0be2Vah8C9Kc//UkXXXSR//m7d++u6dOnh+w3vt+fb775RiUlJcrNzVVqaqoKCgo0Y8aMGn9/arJlyxaNHDlSOTk5atKkibKzszVy5Ej/ezv5dUO9v9oKd9//YaGWsrIySYHf5UcffaQf//jHatu2rdLS0tSrVy/97W9/q/H5nfy+1WTz5s2aOHGievXqpXbt2ik1NVWnn366brvtNu3atStoe9t+tGfPHo0ePVrt27dXenq6evTood/+9rcBz3ey2gLA4sWLdeWVV6pt27ZKTU1Vfn6+SkpK6nUtBlAfBAA0arUFgHPOOUfGGP35z3/2r1uwYIFSUlLUrFkzDR8+XKWlpbr22muVnJys7OxsffLJJwHP8ZOf/EQdOnRQcXGxxo8fr/vuu08XXXSRjDHq0qWLDh06FLB9qADwySefqEuXLmrSpImeffbZsN7XiBEjZIxR9+7ddc8992jixIkaOXKkzjzzTN1///1Bn0GPHj101llnqXv37rrrrrt02223qVWrVjLG6Le//W3A9p999pmSk5N14YUXasyYMXrggQc0atQotWnTRsaYkGPq8/LylJ2drd69e/sD0F133aXs7OwaC3Onn3Vtjh8/rj59+igzM1MbNmwIe7+63HLLLTLGqGPHjrr11ls1fvx49evXT8YYXXLJJTp+/HjA9sYYff/731deXp66deumu+66S/fcc4+/oPYVjEOGDFFmZqZuuOEGTZw4UQ8++KD/OW644QYZY5Sbm6t7771X9913n79Qu+GGG4LaWNdr1sTp9/z+++8rPT1dTZs21Y9//GM98MADGjdunAYPHqwmTZro8OHDtb7eG2+8obKyMv978Q3LC1U0hlJbALjqqqvUtGlTDRgwQPfff7+Ki4uVnJys9PR0bdq0KWCfY8eOadCgQf7P+I477tCECRP0ox/9SG3atPH/bs6ZM8f/mqNGjQpqr1RzAJg0aZKMMWrXrp3uuOMOlZSUqFu3bv6wduzYsYDt8/LylJOTowsuuEBnnnmmbr/9do0bN045OTkyxujhhx+u9bM92erVq5WRkaGkpCRdc801mjRpkq677jolJSUpIyNDq1ev9m87Z84c3Xvvvf7/I3zv769//WuNz7927Vp/mMvLywv4XHxnSnzf5SWXXKL27durb9++uu+++3TzzTcrLS1NycnJev3114Oe2+nvW00effRRZWZm6tprr9Xdd9+t+++/X1dccYWSkpKUlZWl3bt3B2xv04/27t3r78sXX3yxHnjgAY0ePVrNmjXTtdde6ygAPPzwwzLGqE2bNrr55ptVUlKiwYMHyxijrl276uDBg2G9byCSCABo1GoKAEuXLvUPAfr4448lnThq1KRJExUUFAT9gVi2bJmSk5N17bXXBqz/+OOP5fV6g57/17/+tYwxmjFjRsD6UwPAe++9p+zsbGVkZAQdua/J119/raSkJPXq1Svkax84cCDgZ99nMGbMmIDt169fr5SUFHXp0iVg+4qKipBHyb7++mt169ZNrVu31rfffhvwmO8P4QUXXBBwpO6LL75Qfn6+jDF66623/OttPuva7N+/318onHbaaXr//ffD3rcmvu/quuuuC3q/vgLo8ccfD1jv+6xHjhwZsljxFYw5OTnasWNH0OPPP/+8/wLZkwvqb775Rr169ZIxJuji9bpesyZOv+fx48fLGKNFixYF7fPll1+GPDsRSk1FUH0CQKizavPmzZMxRmPHjg1Y7yvOr7766qCjyhUVFdq3b5//Z5uLgFesWOEPF5999pl//fHjxzVkyBAZYzRt2rSA5/H9/lx55ZUBn/nevXuVmZmpzMzMsK4zqK6u9h/YeO655wIe++Mf/yhjjM4+++yA78p2uE44Q4BChZfFixf73+vJbH7farJ79+6QZwxeffVVJScn64477ghYb9OPbr31VhljNGHChID17733nlJTU8MOAK+//rqMMSoqKgo62u/7TO67775w3jYQUQQANGonn5r2XQR8/fXXh7wI+L777pMxRn//+99DPte1116rlJSUoKP6oVRXVysjI0OXXnppwPqTA8CSJUvUsmVL5eTk6L333gv7PR08eFDGGPXr1y+soQHGGDVr1izkUaSLL75Yxpg6j976/Od//mdQMS/9u4B5++23g/bxvefRo0f710Xysz5y5IjOPfdctWjRQv/zP/+jzp07q1WrVlq+fHnQtp07d1ZGRkadzylJPXv2lMfjCXkK3uv1qm3btiosLAxYb4xRamqq9u7dG/I5fQVjTYXMwIEDZYzRq6++GvTYsmXLZIwJ6lN1vaaNUN+zLwCEapsT0QgAF1xwQdD2lZWV8ng86tWrl3+d1+v1D+0IZ5iZTQD4f//v/8kYo/nz5wdtv3nzZiUnJ+vMM88MWO/7/dm6dWvQPjfffLOMMfrwww/rbO///d//+YvJUC688MKg7zWaASAvLy/kQYrTTz9dbdu2DVhn8/tm4/vf/37Q5++0Hx07dkxNmzZVZmZmyP+jfH0gnADgO1uwbt26kO3t2bOn2rdvH+7bAyKGAIBGzRcAfEtSUpJat26tSy65JGi4Td++fWWMUWlpacBpbd/iO8L8z3/+079PZWWlnnrqKV1wwQVq3bq1fw5t33LWWWcFvIavGL7qqqvUpEkTde3a1dFQF5+rr75axhide+65euSRR/T666/ryJEjNX4GPXr0CPmYb0aWnTt3Bqxft26dRo0apTPPPNM/V/vJy/PPPx+wfV5enjweT8g/9r5i4OQ22HzWNXnooYdkjNG8efMknTj616lTJzVt2jRgrHFFRYXS0tI0YMCAOp/zyJEjSkpKUvv27UO2r6ysTDk5OWrRokXAfqG+85P5CsYVK1aEfLxNmzZKTk4OGiIinTiCnJKSolatWjl6zdo4+Z5XrVqllJQUNW3aVCNHjtTvfvc7bdu2zfFrRiMA3HvvvSH3+d73vqf8/PyA92uM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0913363u3bvr7LPPjsgQIOlEke8703L66adr3Lhxmjhxom644Qa1a9cu4D1v2LBBycnJOu200zR+/HhNnTpVU6dO9T9e0/c5YcIEGWPUoUMHjRs3TqWlperevbv/6Hyo+wBEIgBIJ26u17JlSyUnJ+u6667TpEmT9MMf/lDJyclq2bKlVq5cGbC9bQAYPny4//+sn//855o6dao/5NsEAMn571tdbevevbvGjx+vMWPG6PTTT9dZZ52lnj17RqQfff755/7/c/v3769JkyYF3QfgkUceCet9z5gxQ0lJSWrWrJmGDRum0tJSjR07Vj/4wQ/UvHlzXX755WG9byCSCABo1JwGAOnEDA+jRo0KuDtqt27ddPvtt+u1114L2PaLL77Q2LFjlZeXp7S0NOXn52vSpEk6cuRIyD8aNd0JuLq6WnfddZeMMRo8eHDII60+X331lR555BFdeumlysnJUWpqqrKystS/f389//zzQRcVOw0AkvS3v/1Nffv2VYsWLZSZmalBgwbprbfeqrH9vvf69ddf+29glJqaqnPOOafWOwE7+azr8txzz+nSSy9VZmam/67CI0aM8N/Fc9WqVf6LXl955ZWwn/dvf/ubrrrqKrVv315NmjTRaaedpsLCQj300EPauHFjwLaRCABVVVWaO3euevXqpaZNm6pp06Y6//zz9ctf/rLWOwHbcPI9v/rqqxo9erS6dOmijIwMNWvWTGeddZbuvvtuRxco1hYApBNnILp27arU1FSddtppuv3223XgwIGIXATsc/z4cT311FMqLCz03225U6dOuu2224Jm73n22WfVo0ePgFmSfGr7Pl944QVdcMEFatGihdLS0tS1a1f94he/CHkNSiQDgCRt2rRJN910k/+MYFZWlm688cagm1lJ9gFg7969GjFihDp06OCf/cz3PdgGAMnZ71tNjhw5ogcffFAFBQVKS0tTx44dNW7cuIj3o927d+vmm29Wu3btAu4E7DvbcuoZx9re9/Lly1VcXKzs7Gw1adJE7dq1U48ePfTTn/5Ua9asCet9A5FEAABQp9oKGABIJL5hZosXL3a7KYA1AgCAOhEAACSaUGP2P/jgA7Vo0UJt2rQJa8YxoKEiAACoEwEAQKLJzs7WRRddpLFjx6qkpETXXHONPB6PkpOTHV1rBDREBAAAdSIAAEg0Dz/8sHr27KlWrVopJSVFbdu21VVXXeXoeg2goSIAAAAAAAmEAAAAAAAkEAIAAAAAkEAIAAAAAEACIQAAAAAACYQA4KKvvvpKixYt0rvvvqt169axsLCwsLCwsLA4WN59910tWrRIX331ldtlXaNCAHDRokWL/LeeZ2FhYWFhYWFhsVsWLVrkdlnXqBAAXPTuu+/6O63bCZqFhYWFhYWFpbEtvoOp7777rttlXaNCAHDRunXrZIzRunXr3G4KAABAo0MtZYcA4CI6LQAAgD1qKTsEABfRaQEAAOxRS9khALiITgsAAGCPWsoOAcBFdFoAAAB71FJ2CAAuCqfTVldX6/Dhw/r000+1Y8cObd++naURLDt27NC+fft0/PjxGPYoAAASCwHADgHARXV12urqan3++efasGGDNmzYoK1bt7pe2LKEt2zevFkbNmzQxx9/rOrq6hj3LAAAEgMBwA4BwEV1ddrDhw/7i8hjx47FuHWoj+rqan366afasGGDDh486HZzAACISwQAOwQAF9XVaX0FJMV/43T8+HFt2LBBu3btcrspAADEJQKAHQKAi+rqtDt27NDWrVtj3CpE0pYtW7Rjxw63mwEAQFwiANghALiork7rG0+Oxmvbtm18hwAARAkBwA4BwEUEgPjHdwgAQPQQAOwQAFxEAIh/fIcAAEQPAcAOAcBFBID4x3cIAED0EADsEABclOgBYOHChTLGhFwmTpyoLl266Nxzzw3a7y9/+YuMMbr44ouDHluwYIGMMXr11VcDXmPNmjUh29C/f39169YtYF1eXp6MMbrssstC7vPMM8/421nT8/rE+3cIAICbCAB2CAAucjMAVHqrtGLbAb3y4R6t2HZAld6qqLxObXzF+ZQpU/Tss88GLGvXrtVtt92m5ORkff311wH73X///fJ4PGratKkqKysDHrv11luVkpKiQ4cOBbyG0wCQnp6u5ORkffbZZyH3SU9PJwAAAOAyAoAdAoCL3AgAld4qPbFsi3pNXaK8iX/3L72nLtUTy7bENAjUVZz/7ne/kzFG//u//xuw/j/+4z90ww03yBijd955J+Cxs846S+edd17Yr1FTALjsssuUkZGhxx9/POCxXbt2KTk5Wddffz0BAAAAlxEA7BAAXBTrAFDprdLo36xS3sS/64yTiv+Tf75l4eqYhYC6ivPt27fLGKOHHnrIv+7o0aNKTU3V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GRm6+eab25xjbW2tqqurPbb169dTtMEUzAumgvmpeqAb9o52z+1AvD8nrwGQAhP+wu1TTwD/nz9n81aPln41uu0xId866J2VzgIBwE6nCAC9e/fW9ddf77X/X//6l4wxWrx4sc/j9u7dK2OMFi5c6PXYc889J2OM3n77bUnSpEmTFB8f7/N5srOzddNNN7U5x9mzZ8sY43OjaIMg2Be9BvNT9UA37B3tDECgwpNTdwFqeQ/hegEjgMDw52xeW2PW/cChEBCC/86HEAHATqcIAJwBCBOh/MQz2Be9BvNT9UA37B3tGgApcJ+gn00THojj+SoPAH/+bfM1pj3XEvh7DUAw/k3q4AgAdjpFAOAagA4u1PcuDkXDG8xP1YMx/450FyApcJ+gn20THogmnq/yALAV6B9sC8a/SR1c9TtvR0YvFWCdIgDcd999Pu8CNG/evDPeBegb3/iGz7sAXXfdderdu7f779/97nc+7wJUUVEhY4zKysraPe+ICABO3H8+FF95CXbICHTD3hG/shLIT9DPtgmniQfgBH//2+zPD7Y9mh68f5M6qqZTql5wXefvpYKgUwSAv//9716/A3DixAn16dNHl19+uXvfnj17tH37do9jFyxYIGOMKisr3ft27NihqKgoPfDAA+59n332mVJTUzV8+HCP44uKiuRyufTxxx+3e94REQCc+OQ5VBe9BvO9BaNh76hfWaH5BhDJAvWDbX+aH/p/b53254WqLk7o/L1UEHSKACBJhYWFio6O1owZM7R8+XINGjRI0dHR2rx5s3vM4MGDZYznW/7kk0+Um5urHj166PHHH9fixYuVnZ2tXr166dChQx5jW64LGDNmjFauXKkJEybIGKN58+ZZzbnTBwCnvnseqoteg/2perAadhpuAOh4zvYH2zrimd5g+l+PUV2c2Ll7qSDpNAGgsbFR9913n7KyshQbG6vLLrtMr776qscYXwFAkvbt26cxY8YoKSlJiYmJGj58uHbt2uXzdVasWKF+/fopJiZGubm5Wrx4sU6fPm01504fAJy6+0wog0coPlWnYQcA+KOjnukNhv/1GJwBsNNpAkA4CkoA6EjNopP3nw/1V4860roDACJbJPyb9L8egwBghwDgoIAGgFDfaccfTt5/PtJOhQIAEEk4A3BWCAAOClgAcOJOO/7Oy8n7z0fSqVAAACIJ1wCc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iKIFAACwRy9lhwDgIIoWAADAHr2UHQKAgyhaAAAAe/RSdjpFAKivr9eUKVOUnp4ul8ulIUOGqKqqyu/j33//fRUUFCghIUEpKSkqKirSoUOHPMZs375dM2bM0IABA5SYmKisrCzdcMMNqqystJ43RQsAAGCPXspO2AeA5uZmDRo0SAkJCZozZ46efvpp9e/fX926ddPOnTvPePy+ffuUnp6u3NxcLVmyRPPmzVNKSooGDBigkydPusfde++9Sk5O1uTJk7V8+XI9/vjjys3NVVRUlMrLy63mTtECAADYo5eyE/YBYM2aNTLGaO3ate59hw4dUnJyssaNG3fG44uLixUfH689e/a495WXl8sYo+XLl7v3vfnmmzp27JjHsYcPH1ZGRoauuuoqq7lTtAAAAPbopeyEfQAoLCxUZmammpubPfbfcccdcrlcOnHiRJvH9+jRQ4WFhV77+/btq2HDhp3x9UeNGqXU1NT2Tfp/KFoAAAB79FJ2wj4A9OnTR9dff73X/lWrVskYo23btrV67P79+2WM0cKFC70eKyoq8quxHzRokPr27du+Sf8PRQsAAGCPXspO2AeAhIQETZo0yWv/hg0bZIzRq6++2uqxlZWVMsaorKzM67EZM2bIGNPmGYQtW7bonHPO0cyZM884z9raWlVXV3ts69evp2gBAAAsEQDsdKgA0NzcrMbGRr+206dPS5K6dOmi4uJir+fauHGjjDFat25dq6+3ZcsWGWO0Zs0ar8dmzpwpY4zq6+t9HltbW6vzzjtPvXv39ro2wJfZs2fLGONzo2gBAADajwBgp0MFgE2bNrXaJH952759uyRnzgAcP35cl112mbp37653333Xr/fGGQAAAIDAIgDY6VAB4MCBA3r++ef92hoaGiSF/hqAkydPKj8/X7Gxsfrzn/98Fu+WogUAADgb9FJ2OlQAsDFmzBifdwGaMmWKX3cBysjIaPUuQEOHDvXY19zcrLFjxyoqKkovv/zyWc+dogUAALBHL2Un7APASy+95PU7AHV1dUpOTtbYsWM9xu7evVu7d+/22Dd16lTFx8dr79697n2vv/66jDEqLS31GPuDH/zA6/cBzgZFCwAAYI9eyk7YB4CmpiZdccUVSkxM1COPPKJly5YpLy9P3bp1044dOzzG5uTkKCcnx2Pf3r17lZaWptzcXC1dulTz589XSkqK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x6FDhxQdHa3vf//7Ph9n3UOHABCmfvazn6mkpETFxcUyxmjUqFEqKSlRSUmJGhoaJEl79+5VWlqacnNztXTpUs2fP18pKSm66KKL+G50O9x9990yxmjEiBFev2S4evVq9zjWO3C++93vaujQoZozZ47715e/8pWvyBijJ5980j2ONQ8+Xz8EVlVVpdjYWI9f64yLi3PfFhf+ueaaa3TDDTdo7ty5WrFihe655x65XC51797dfZ96ifUOtEmTJskYo+9973tatmyZCgsLZYzRQw895B7DmgfHz372Mxlj9Oqrr/p8nHUPHQJAmMrJyWn1NH3Lj2pIUnV1tfLz8+VyuZScnKzx48e776IC/wwePLjNr0V8EesdGC+++KKuvfZaZWZmKjo6WikpKbr22mv1yiuveI1lzYPLVwCQ/vsrnoMGDVJcXJwyMjI0bdo0j0/tcGZLlizRN7/5TaWmpio6Olo9e/ZUUVGRdu3a5TWW9Q6cU6dOac6cOcrJyVHXrl3Vp08fLV682Gscax54V1xxhXr06OG+g54vrHtoEAAAAACACEIAAAAAACIIAQAAAACIIAQAAAAAIIIQAAAAAIAIQgAAAAAAIggBAAAAAIggBAAAAAAgghAAAAAAgAhCAAAAAAAiCAEAAAAAiCAEAAAAACCCEAAAAACACEIAAIAO6vnnn5cxRjU1NU5PJeScfu+ff/655s6dqwsuuEDx8fH6v//7P33wwQd+H79w4UL169dPzc3NHs/5k5/8RD179lRaWpp++MMf6vTp05Kk0tJSZWdn68SJEwF/LwDwZQQAAGFn27ZtGj16tM4//3zFxsaqV69euvbaa7V06dKgvF5FRYVmz56t+vr6dj12tpxugp0U6Pe+detWTZs2Tf3795fL5VJ2drYKCwt9NvVNTU0aMWKE0tLSNHfuXC1atEjp6enq27evPv/88zO+1tGjR5Wamqqf//znHvvvuusujRw5UkeOHNGRI0d00UUXac2aNZKkxsZGZWZmasmSJQF5vwDQFgIAgLBSUVGhmJgY9enTRyUlJVq5cqVmzZql/Px85ebmBuU1f/rTn7bajLb12NlqampSY2Oj+1PiSBLoADB69GhlZWVp+vTpWrlypUpKSpSZmamEhAS9++67HmMXLFggl8ul6upq974XXnhBxhiVl5ef8bUWL16spKQkNTY2uvft27dPycnJamhocO+7//77df/993v8nZOTE5H/ewMILQIAgLByww03KCMjw+cn7rW1tUF5TScCwPHjxwP6fOEm0AGgoqJCJ0+e9Ni3c+dOxcbGavz48e59DQ0NSkpK0o9//GOPsTU1NTLG6Iknnjjja1188cUqKiry2PfCCy+ooKDAY9/tt9+uJ5980v33m2++KWOMNm7c6Pf7AgAbBAAAYaVfv34aMmSIX2P379+vSZMmqWfPnoqJidEFF1ygqVOnuhvBDz/8UMXFxerbt6/i4uKUmpqqMWPGeDSds2fPljHGa6upqWnzsZbXv+2229SjRw/FxMSof//+eu6557zm2fI87733nsaNG6fk5GRdcsklPpvglrG7du3Srbfequ7duyspKUkTJ07Up59+6vXcmzZt0te//nXFxsaqd+/eevbZZ93P0RZ/1sZmTv7Ox9d793c922PgwIEaOHCg++9ly5bpnHPO0Ycffugxbv/+/TLGaPbs2W0+37///W8ZY/SLX/zCY//SpUs1duxY99+nTp1Sdna2KioqPMalpqbqrrvusnw3AOAfAgCAsJKfn69u3bp5fW3jyz766CP16tVLLpdL99xzj5599lnNnDlTX/3qV91nD9auXasBAwZo1qxZWrFihX784x8rJSVFOTk57sb1nXfe0bhx42SM0eLFi7V69WqtXr1ax48fb/OxgwcP6rzzzlN2drYeffRRlZaW6sYbb3SP/aKWBrh///666aab9Mwzz2jZsmVtBoBLL71Uo0aN0jPPPKPbb79dxhiPr5NI0ltvvaXY2FhdcMEFWrBggebNm6devXppwIABZwwA/qxNe+fUnvl8+b23Zz39dfr0aZ177rnKz8937xs2bJjy8vJUV1fnsf3tb3+TMUaPP/54m8/5q1/9SsYYbdu2zWN/RUWFevbsqf3796u+vl633XabRowY4XX8tddeq69//etW7wcA/EUAABBW/vjHPyoqKkpRUVG68sordf/99+u1117TqVOnPMZNmDBBXbp0UWVlpddztHzH+rPPPvN6rKXRKysrc++z+QrQ5MmT1bNnTx0+fNhj/80336zu3bt7vHZLAz1u3DiPsW0FgEmTJnmMHTlypNLS0jz2jRgxQi6XSx999JF7365duxQdHX3GAODv2rRnTu2Zz5ffe3vW01+rV6+WMcZ9FqGpqUkJCQk+z+q0bGvXrm3zOX/yk5/IGKNjx455PfbII48oIyNDqampuvPOO31+zeuOO+5QfHx8u98LALQHAQBA2Nm6datGjhwpl8vlbswyMjL0yiuvSJKam5uVlJSkm266ye/nPHXqlA4fPqy6ujolJyfrnnvucT/W3gBw+vRpJScn64477vD6JLmlsf3rX//qHt/SQG/evNnjudsKAFu3bvUYu2jRIhljdPToUUn/bWbj4+N1yy23eM15xIgRZwwA/q6Nv3Nq73y++N7bu57+2L59u5KSknTllVeqqalJkvTBBx+4z1qUl5d7bC1nes50K9Di4mJFR0e3ay5f9MADD8gY4/PrXAAQKAQAAGHr5MmT2rp1qx566CHFxcWpa9eueu+993Tw4EEZY/Twww+3efxnn32mmTNn6rzzztM555zj8Unvbbfd5h7X3gBQW1vb5qfIxhj9+te/do9vaaD37t3r8dxtBYCDBw/6HNvy3fX//Oc/MsZo1qxZXnP+4Q9/6NcZAH/Wxt85tXc+X3zv7V3PMzlw4IB69+6t7Oxsj7MRr732mowx+v3vf+91zLBhw5SZmXnG5z7bAHD//ffLGGN1RgMA/EUAANAptDSMc+bM8TsATJ48WV26dNGPfvQjrV27Vn/84x9VXl6utLQ03Xrrre5x7Q0ABw4ckDFGRUVFXp8kt2xfvGNRSwNdV1fn8z35CgBnGnu2AcDftfF3TmcTANq7nm1paGjQJZdcotTUVL333nsej/3617/2eSamoaFBMTExmjp16hmfv+UrQJ988olf8/myKVOmyOVyWR0LAP4iAADoFN59910ZY3TnnXf6/RWg7t27e32a3djYqKioKI8m94knnmg1APh6rKmpSd26dfP6Tn9rghEAmpqaFBcXZ/0VIH/Xxt85tXc+Xz62PevZmsbGRl199dVyuVx64403vB4vLy+XMUYbNmzw2L9kyRIZY/TOO++c8TVaLgL2Z6wvXAQMIBQIAADCyp/+9CefP5S0cOFCGWO0aNEiSf5dBJyamqqJEyd6PPb444/LGOPR5JaWlsoYo7ffftvruVp7bOLEiYqJifF5t6JDhw55/B2MACBJw4cPt74I2N+1ac+c2jOfLx/bnvX0pampSTfeeKOio6O9GvwWtbW16tKli+677z73vn379ik9PV0TJkw442tI0r/+9S+PC4vbKzU1VdOnT7c6FgD8RQAAEFby8vJ04YUX6kc/+pFWrFihp59+WrfccouioqJ0wQUXuG/xuX//fmVlZblvA7p8+XLNmTNHeXl57jETJkxQVFSU7r77bi1fvlwTJ07Ueeed5/U1l61bt8oYoxtuuEFlZWV68cUX3Xdwae2xgwcPKicnRy6Xy/38jz32mAoLC5WSkuLxnoIVAN5880337x8sXLhQ8+fPV69evXTJJZecMQD4uzbtmVN75uPrNqD+rqcvd999t4wxGjFihPt2rV/cWowaNUpdu3bVrFmz9OSTTyo7O1sDBgxwX1ztj6997WtWZytafgjs9ddfb/exANAeBAAAYeUPf/iDJk2apK985StKTExUTEyM+vTpo+nTp3t9D3zPnj2aMGGCMjIy3D88NW3aNPcPgbXcjz09PV2JiYkqKCjQjh07lJOT49XklpSU6Nxzz1WXLl28Gu3WHqutrdW0adOUnZ2trl27KisrS8OGDdOKFSs8njtYAUCSNm7cqEsvvVQxMTHKzc3VqlWrdO+99youLq7NdW7P2rRnTv7Ox9ex/q6nL4MHD27zIuIWR44c0ahRo5SQkKDMzExNnz693d/nX7RokRITE9t9Ie8DDzyg888/3+cZLgAIJAIAAESYm266SX369HF6Gm4dbT5nq6GhQampqVq1apXfx5w4cUJZWVl66qmngjgzAPgvAgAAdGJf/hR6586d6tq1q26//XbmE0QLFixQv3791Nzc7Nf40tJSZWdn68SJE0GeGQAQAACgU8vKytKDDz6oFStW6OGHH1ZqaqoSEhK0c+dO5gMAEYoAAACd2MSJE5WTk6PY2FglJSWpoKBAVVVVzAcAIhgBAAAAAIggBAAAAAAgghAAAAAAgAhCAAAAAAAiCAEAAAAAiCAEAAAAACCCEAAAAACACPL/AMGbc5dUHPvvAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20560\n",
      "923 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[5],\n",
    "           178,\n",
    "           216,\n",
    "           236)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7.414763745399852e-08\n",
      "Cost function before refinement: 7.414763745399852e-08\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.85998889e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 5.6513401976066356e-11\n",
      "     jac: array([-2.81311437e-07,  1.90457697e-08, -2.47022619e-10,  1.33814411e-09,\n",
      "       -1.23389936e-10, -2.00557892e-07,  7.73080818e-11])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19998572e-01,  3.18038587e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.85998914e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 5.6513401976066356e-11\n",
      "GonioParam(dist=0.719998571752675, poni1=0.031803858748058605, poni2=0.004, rot1=0.0, offset=-48.599891358709684, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.031803858748058605\n",
      " Number of peaks found and used for refinement\n",
      "626\n",
      "Cost function before refinement: 2.383350348017308e-07\n",
      "[ 7.19998572e-01  3.18038587e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.85998914e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 5.1984312387232055e-08\n",
      "     jac: array([-2.19915020e-09, -2.37196929e-11,  3.57712533e-06, -2.57769667e-06,\n",
      "       -2.59923194e-10,  1.07698151e-04,  7.05422505e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20606858e-01,  3.21138531e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.85998873e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 5.1984312387232055e-08\n",
      "GonioParam(dist=0.7206068584664383, poni1=0.03211385308050831, poni2=0.004, rot1=0.0, offset=-48.599887342357356, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.719998571752675 --> 0.7206068584664383\n",
      "Cost function before refinement: 5.1984312387232055e-08\n",
      "[ 7.20606858e-01  3.21138531e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.85998873e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 2.5561187046317613e-10\n",
      "     jac: array([-6.63680455e-07,  8.68967625e-08, -6.74647493e-08,  5.12958215e-08,\n",
      "        7.87452992e-10,  2.88084273e-09,  4.15782562e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 54\n",
      "     nit: 6\n",
      "    njev: 6\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20609298e-01,  3.22472627e-02,  3.96893520e-03,  2.23757106e-05,\n",
      "       -4.85998857e+01,  9.99040899e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.5561187046317613e-10\n",
      "GonioParam(dist=0.7206092976334295, poni1=0.03224726268736372, poni2=0.003968935202854616, rot1=2.237571059770315e-05, offset=-48.599885660072495, scale=0.9990408988314912, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9990408988314912\n",
      "area_pixel=0.041071116230573246 area_sum=0.04123092083600752, Error= -0.0038909243307907342\n",
      "area_pixel=0.0404747680993891 area_sum=0.04058389121931238, Error= -0.0026960777058762783\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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KEOGDIkUgHHjxkmHDh1k6NChcvTRRyMAUPBoCsCrr76aGybzIUoALrvsshb3nHvuuVJcXNxkLUoA9kvJiSee2OTrQQcenTp1kn79+uX27H+y0Ztvvtks3969e6WkpCRUAKZPnx56vlu2bJGKigo57bTT5JBDDmn2/f6bbrqp1ffnQFoSgG7duklxcbHs2rWrWfyePXukXbt20rVr1ybr+78C1BLXXHONBEEgb7/9duh5AQD4DALgCfX19fLuu++KiMhLL71kLAAff/yxvP/++yKy7/nmUQLwzjvv5B45eOmllyIAUPCk8RWgfP931dpNwC3R0tAbJQD7/x/71o5jjz02t+f444+XIAjkk08+abGHz3zmM6ECEHbT7NatW+W4446TIAhk0KBBMmHCBLnrrruksrJSysrKWjznJALQrl07OeKII1qM3997UVFRk7Woz5YnEQFAWwcB8JDWBOCZZ56Rz372s9KpUyfp3LmzXHLJJVJTUxOarzUBOBAEAEBXAO666y4JgkCuvPLKvGrbEIC//OUvEgSBXH755Xn1JCJy1llnJf4NQNi/y2bMmCFBEEhlZWWz1/7whz+oCcD+3wC09LcV9v8G4LDDDmuyjgAAQJZBADwkSgAeffRRKSoqkosvvlhmz54t3/72t+XYY4+Vrl27hv7HCAEAiIfmY0CPOOIICYJAfvWrX+VVW0sAHn30UQmCQB555JFm8Xv27JGuXbvKUUcdlfcfHNt/Y3CSewDCBODmm2+WIAjkz3/+c7PXvvWtb7V4zvv7aOnmYZGW34vPfe5zEgSBLFmypFn8888/H3oPAAIAAFkFAfCQMAHYtm2bdO3aVW688cYm6//3f/8nhx12WLP1/SAAAPHQEIBXXnkl90jNSy65JO/aWgLw9NNPSxAEcu+997a455577pEgCORrX/ua7Nixo9nrmzZtkrVr1+b+edmyZbmnAH344Ye59V27duVuio0rAPuH/FmzZjVZf/nll3N/L+DT5zxx4kQJgqDJY08PpKX34vHHH5cgCGTgwIGyffv23Pr27dtl4MCBEgSB/OQnP2myBwEAgCyDAHhImAD88pe/zP2H77333mtyfP7zn5cTTjihxXwIAEDrLFy4UMaNGyfjxo3LPR+/d+/eubU77rijSfx+ASgtLc3dOPvNb35TbrrpptyjJYNg37Psw7433xJaAvDB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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXhU5d3/8TsLCWFJ2A0pGEkABaxgIVpARUVccScVEBTlBwquxSDi0qgUJdhHxKWKValLbX3s02KrVQE3rLhQiyj7qqwGcAFEICT5/P5IZ8owk2TOnZm5J5P367rOxcWZc2bumfNN8v2cbYwAAAAANBjG9QAAAAAAxA4BAAAAAGhACAAAAABAA0IAAAAAABoQAgAAAADQgBAAAAAAgAaEAAAAAAA0IAQAAAAAoAEhAAAAAAANCAEAAAAAaEAIAAAAAEADQgAAAAAAGhACAAAAANCAEAAAAACABoQAAAAAADQgBAAAAACgASEAAAAAAA0IAQAAAABoQAgAAAAAQANCAAAAAAAaEAIAAAAA0IAQAAAAAIAGhAAAAAAANCAEAAAAAKABIQAAAAAADQgBAAAAAGhACAAAAABAA0IAAAAAABoQAgAAAADQgBAAAAAAgAaEAAAAAAA0IAQAAAAAoAEhAAAAAAANCAEAAAAAaEAIAAAAAEADQgAAAAAAGhACAAAAANCAEAAAAACABoQAAAAAADQgBAAAAACgASEAAAAAAA0IAQAAAABoQAgAAAAAQANCAAAiaPbs2TLGaPbs2TF7TWOMBgwYELPXA2ozc+ZMdevWTY0bN5YxRjNmzHA9JCtXXnmljDHasGGD66HUybZt23TFFVfoJz/5iZKTk2WM0XfffWf9fBs2bJAxRldeeWXkBpkABgwYIGNoq1A/UKmo14wxAVNycrJat26t0047TX/4wx9iPh4CQPSUlpbq5ptvVufOndW4cWNlZ2dr4MCB+t3vfud6aDjEH//4RxljdPzxx+u2225TcXGxPvzwQ9fDCqm4uFjGGL3zzjshH0+UAHDWWWcpKSlJw4cP169+9SsVFxdr3759Na5T0+8VAkBoBADUJ1Qq6jVf419cXKzi4mLdfvvtuuSSS5SSkiJjjH75y1/GdDwEgOj48ccf1aVLFxlj1LNnT91yyy0aO3asevfuraOOOsr18HCIyy+/XMYYbdmyxfVQalVbANi6datWrFihsrKy2A4sgg4cOKDk5GQNGjTI03oEAO8IAKhPqFTUa74AcLj58+crKSlJSUlJMd17RwCIjldeeUXGGJ100kmqqKgIeKw+NJoNyWmnnVZvmqDaAkAi+Oqrr6yadQKAdwQA1CdUKuq16gKAJHXr1k3GGP3v//5vwPyPPvpIl156qY444gg1atRIHTp00NixY0M2kv/6179044036rjjjlPLli2Vnp6uzp07a8KECfr222+Dlq8uAHz77bc6+eSTlZSUpPvuu6/W93XgwAHNnDlTxx9/vFq0aKGMjAzl5ubqggsu0Lx584I+gwEDBmjHjh0aM2aMsrOzlZaWpu7du+uZZ54J+dyPPPKIzjnnHB155JFKS0tTy5YtNXDgQP3jH/8IOZ7c3Fzl5ubq+++/13XXXaecnBylp6erW7dumjlzpiorK0Ou5+Wzrslrr70mY4zGjx/vab1wvPjiizr11FOVlZWl9PR0HXPMMZoyZYr2798ftKzvs962bZtGjx6tnJwcJScn+7e375SRdevW6eGHH9ZPf/pTNW7cOKCRqqio0OOPP64+ffqoadOmatKkifr06aPf/va3QeEmnNesjs12XrJkiYYOHarc3FylpaWpTZs2Ov7443XTTTfVuhfc10yHmqTam8ZQzdM777zjP8K3ePFinXvuucrKylJGRoZOOeUUffDBByGfq7y8XI8//rj69eunzMxMNW7cWPn5+Ro9erRWr14tqaqmaxqvVPMpQC+99JJOPvlk//Mfe+yxuu+++0LWje/n54cfflBRUZE6duyotLQ05efna9q0adX+/FRn9erVGjlypHJyctSoUSO1b99eI0eO9L+3Q1831PurqXH3/Q4LNRUXF0sK3JYbNmzQZZddptatWys9PV29e/fW3//+92qf38vPW3VWrVqlSZMmqXfv3mrTpo3S0tJ05JFHasyYMdq0aVPQ8rZ1tHXrVo0aNUpt27ZV48aN1bNnT/3+978PeL5D1RQA3njjDZ1zzjlq3bq10tLSlJeXp6KiojpdiwHUBQEA9VpNAeCYY46RMUYvv/yyf97TTz+tlJQUNWnSREOHDtXEiRN10UUXKTk5We3bt9dXX30V8BzXXHON2rVrp8LCQk2YMEE333yzTj75ZBlj1K1bN+3evTtg+VAB4KuvvlK3bt3UqFEjPf/882G9r2HDhskYo2OPPVY33nijJk2apJEjR6pTp0665ZZbgj6Dnj17qmvXrjr22GN1/fXXa8yYMWrRooWMMfr9738fsPy2bduUnJysk046SaNHj9Ztt92mK6+8Uq1atZIxJuQ59bm5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ie8PeqhzpDdu3Oi/CNkYo5deeins5+3Ro4fS0tL0zTffhL1OXQPAwIEDZYzR/Pnzgx576623ZEzoawBsAoDNdg7lueeekzFG119/fVivW10A2L17d7VHM3bt2uU/6nAor41beXm5/7a54VwDcO+991a7PaTQ23P06NEyxuipp54KWn7NmjXVXgMQiQDg2zN9+E4AH98dyiJxDYDvDlKh2BzNsfl5C8X3u3fChAlBj23atMm/x/1QXusoktcA+IJ4ddcAAK4QAFCveQkAK1asUKNGjdSlSxetWrUq6PEDBw4ENLi+PzSHn05QWlrq3wtYUwCQqhqSESNG+J8nnDt9bN++XZ9//nnQ/N27dys7O1upqakBf5S8BgBf83f4nXR8dzaqKQCEuguQ75SIQ5sOr591TUpKSmSMUa9evYIa6wMHDmjs2LH+cR+657M2Tz/9tIypOo851IWJ3377rT799NOAeXUNAH/4wx9kjFFBQUHANR179+5VQUGBjAm+u4ttAPC6nT/44IOgu7NI0gMPPCBjgu+GUp2a7oV+zDHHKCUlRcuWLfPPKy8v9zfVdW3cJOn222+XMaHvAnTgwIGAuwA99thjMsaE/L4MKfT2/OCDD2RM1Slvhz5XeXm5/9SqX//617WO08dLAKisrNTRRx8tYwJvbyxJL7/8soypul4kEncBatu2bbVjtgkANj9voWzbtk3GGJ1wwgkBRyT37Nmjs88+O2J1NGrUqJB17/UuQL6L+/v27RsylP7www/68MMPa3nXQOQRAFCveQkAkvT888+rUaNGSk1N1eDBgzVhwgTdcMMNuvDCC9WqVSsdffTR/mXLy8vVv39//y/viRMn6oorrlDbtm110kknKScnp9YAIFXtufftMRo8eHCtX3izePFiGVN17/fLL7/cfz9236kFN954Y9Bn4CUA+M5fbd68uUaPHq0JEybolFNOUXJysoYMGVJtADj8ewBuuOGGGr8HwMtnXZODBw/6x5WRkaHCwkLddttt/i/F8h19yM7OVlJSUtBtNGsyfvx4GVN1zcawYcM0adIkjRkzRmeccYbS0tJ0zTXXBCxf1wAgSb/4xS/8DeTNN9+sX/7yl+rUqZOMMbrsssuClrcNAF6384UXXqjmzZvr3HPP1XXXXadJkyZp8ODBSklJUcuWLcO+ILimAOBrAlu0aKExY8bohhtu0LHHHqujjz46IqcASVVNvu9Iy5FHHqnx48dr0qRJGj58uNq0aRPwnpcvX67k5GQdccQRmjBhgqZMmaIpU6b4H69ue956660yxqhdu3YaP368Jk6cqGOPPda/dz7U9wBEIgBIVV+u17x5cyUnJ+viiy/W5MmTdckllyg5OVnNmzfXRx99FLC8bQAYOnSo/3fWr371K02ZMsUf8m0CgOT95622sR177LGaMGGCRo8erSOPPFJdu3ZVr169IlJHX3/9tf937oABAzR58uSg7wG45557wnrf06ZNU1JSkpo0aaIhQ4Zo4sSJGjdunM4991w1bdpUZ511VljvG4gkAgDqNa8BQKq6w8OVV14Z8O2oPXr00NixY/XWW28FLPvNN99o3Lhxys3NVXp6uvLy8jR58mTt3bs35B+N6r4JuLKyUtdff72MMTrzzDND7mn1+e6773TPPffotNNOU05OjtLS0pSdna0BAwboxRdfDLqo2GsAkKS///3vOvHEE9WsWTNlZWVp0KBBeu+996odv++9fv/99/4vMEpLS9MxxxxT4zcBe/msa/PCCy/otNNOU1ZWlv9bhYcNG+b/Fs+PP/7Yf9Hr66+/Hvbz/v3vf9d5552ntm3bqlGjRjriiCNUUFCgO+64QytWrAhYNhIBoKKiQo899ph69+6tjIwMZWRk6Gc/+5keffTRGr8J2IaX7fzmm29q1KhR6tatmzIzM9WkSRN17dpVN9xwg6cLFGsKAFLVEYju3bsrLS1NRxxxhMaOHaudO3dG5CJgn4MHD+qRRx5RQUGB/9uWO3furDFjxgTdvef5559Xz549A+6S5FPT9vzjH/+o/v37q1mzZkpPT1f37t3161//OuQ1KJEMAJK0cuVKjRgxwn9EMDs7W5dffnnQl1lJ9gGgtLRUw4YNU7t27fx3P/NtB9sAIHn7eavO3r17dfvttys/P1/p6enq0KGDxo8fH/E62rx5s6644gq1adMm4JuAfUdbDj/iWNP7fv/991VYWKj27durUaNGatOmjXr27Klf/vKXWrRoUVjvG4gkAgCAWtXUwABAQ+I7zeyNN95wPRTAGgEAQK0IAAAamlDn7H/++edq1qyZWrVqFdYdx4B4RQAAUCsCAICGpn379jr55JM1btw4FRUV6cILL1RqaqqSk5M9XWsExCMCAIBaEQAANDR33323evXqpRYtWiglJUWtW7fWeeed5+l6DSBeEQAAAACABoQAAAAAADQgBAAAAACgASEAAAAAAA0IAQAAAABoQAgADn333XeaM2eOPv30Uy1dupSJiYmJiYmJicnD9Omnn2rOnDn67rvvXLd19QoBwKE5c+b4v3qeiYmJiYmJiYnJbpozZ47rtq5eIQA49Omnn/qL1nWCZmJiYmJiYmKqb5NvZ+qnn37quq2rVwgADi1dulTGGC1dutT1UAAAAOodeik7BACHKFoAAAB79FJ2CAAOUbQAAAD26KXsEAAcomgBAADs0UvZIQA4RNECAADYo5eyQwBwKJyirays1J49e7RlyxatX79e69atY6oH0/r167V9+3YdPHgwhhUFAEDDQgCwQwBwqLairays1Ndff63ly5dr+fLlWrNmjfPGlim8adWqVVq+fLm+/PJLVVZWxriyAABoGAgAdggADtVWtHv27PE3kQcOHIjx6FAXlZWV2rJli5YvX65du3a5Hg4AAAmJAGCHAOBQbUXrayBp/uungwcPavny5dq0aZProQAAkJAIAHYIAA7VVrTr16/XmjVrYjwqRNLq1au1fv1618MAACAhEQDsEAAcqq1ofeeTo/5au3Yt2xAAgCghANghADhEAEh8bEMAAKKHAGCHAOAQASDxsQ0BAIgeAoAdAoBDBIDExzYEACB6CAB2CAAONfQAMHv2bBljQk6TJk1St27ddNxxxwWt95e//EXGGJ1yyilBjz399NMyxujNN98MeI1FixaFHMOAAQPUo0ePgHm5ubkyxmjgwIEh13nyySf946zueX0SfRsCAOASAcAOAcAhlwGgrLxCC9fu1OtfbNXCtTtVVl4Rldepia85v/fee/X8888HTIsXL9aYMWOUnJys77//PmC9W265RampqcrIyFBZWVnAY1dffbVSUlK0e/fugNfwGgAaN26s5ORkbdu2LeQ6jRs3JgAAAOAYAcAOAcAhFwGgrLxCM+evVu8pc5U76VX/1GfKPM2cvzqmQaC25vzZZ5+VMUb/+Mc/Aub//Oc/1/Dhw2WM0YcffhjwWNeuXXX88ceH/RrVBYCBAwcqMzNTDz30UMBjmzZtUnJysi699FICAAAAjhEA7BAAHIp1ACgrr9CoZz5W7qRXddQhzf+h/79q9icxCwG1Nefr1q2TMUZ33HGHf96+ffuUlpamP//5z8rLy9NvfvMb/2Pbt2+XMUY33HBD2K9RXQA477zzNGrUKJ1wwgkBj02fPl2tW7f2nwZEAAAAwB0CgB0CgEOxDgAz568OaPqrmx6evzpir1kTX3M+f/587dixI2DyycnJ0YABA/z/X7BggYwx2rp1q0aMGKGLL77Y/9icOXNkjNFLL70U1mvs2LFD/fr1qzYAzJ07V8YYrV271v9Yr169dM0119QaLHwIAAAARA8BwA4BwKFYBoCy8gr1njI3aM//4dNR/zkdKBZHAWq6CNinsLAw4Fz/+++/X506dZIk/fa3v1W7du38yxYVFckYoy1btoT1Gr6pugBQXl6u7OxsTZkyRZK0fPlyGWP03nvvEQAAAIgDBAA7BACHYhkAFq7dGdbef9+0cO3OiLxuTXxN9GOPPaZ58+YFTD4zZ84MONd/8ODBuvzyyyVJS5YskTFGq1dXHbHo27evPxyE8xrz5s3TcccdV20AkKQbb7xR3bt3lyTdcccd6tixoyorKwkAAADEAQKAHQKAQ7EMAK9/sdVTAHj9i60Red2ahNNEf/rppzLG6De/+Y0qKyvVqlUr/fa3v5UkVVRUKDMzU7Nnz/ZfGzBy5EhPr1HTNQCS9NFHH8kYo88++0ydOnXSxIkTwx67RAAAACCaCAB2CAAOcQSg9ia6vLxczZs310UXXeQ/Beezzz7zPz5o0CCNHj3af23ArFmzPL1GbQFAkvLz83XqqafKGKPFixeHPXaJAAAAQDQRAOwQABziGoDwmuhBgwapbdu2evLJJ5WZmamKiv+Orbi4WMccc4zuv/9+GWO0bNkyT68RTgC48847ZYxRt27dPI+dAAAAQPQQAOwQABziLkDhNdH33HOPjDHq27evBg0aFPDYm2++qaSkJP385z9X69atVVlZ6ek1wgkAX375pYqLiwO+j4AAAACAewQAOwQAh1x8D8BVsz+pN98D4PPWW2/579hz9913Bzy2a9cuJScnyxij888/3/NrhBMA6jJ2AgAAANFDALBDAHDI1TcBPzx/tfpMmRf0TcAPx9k3Afvs3btXqampMsZo7ty5QY8fd9xxMsaopKTE82sQAAAAqL8IAHYIAA65CAA+ZeUVWrh2p17/YqsWrt0Z08a/ISEAAAAQPQQAOwQAh1wGAMQG2xAAgOghANghADhEAEh8bEMAAKKHAGCHAOAQASDxsQ0BAIgeAoAdAoBDBIDExzYEACB6CAB2CAAOEQASH9sQAIDoIQDYIQA4RABIfGxDAACihwBghwDgEAEg8bENAQCIHgKAHQKAQwSAxMc2BAAgeggAdggADhEAEh/bEACA6CEA2CEAOEQASHxsQwAAoocAYIcA4BABIPGxDQEAiB4CgB0CgEMEgMTHNgQAIFU63fcAACAASURBVHoIAHYIAA4RABIf2xAAgOghANghADhEAEh8bEMAAKKHAGCHAOCQ0wBQXiatXyAte6Xq3/Ky6LxOlOzbt08VFRUhH/vhhx/q/PyReA6JAAAAQDQRAOwQABxyEgDKy6R3S6Tp+VJx5n+nBzpXzXcQBDZv3qyrrrpK7dq1U1pamrp3766nn37a//g777wjY4z++Mc/6o477lBOTo6SkpL03Xffafbs2TLG6N1339W4cePUtm1btWjRwr/uv//9b5199tlq3ry5mjZtqtNPP10ffvhhwOvX9hx1QQAAACB6CAB2CAAOxTwAlJdJLwz5T9OfFRgAfP9/oTCmIeDrr79Whw4d1LFjR9177716/PHHdcEFF8gYoxkzZkj6bwDo3r27evXqpQcffFD333+/9u7d62/eu3fvrgEDBuiRRx7RtGnTJFV9vk2bNlX79u01ZcoUTZs2TZ06dVJ6ero++ugj/xhqeo66IgAAABA9BAA7BACHYh4A3i05rOmvZnp3euResxajR49W+/bttXPnzoD5Q4cOVVZWln788Ud/AMjLy9OPP/4YsJyveT/ppJNUXl4e8NhFF12ktLS0gM9w69atat68uU455ZSwnqOuCAAAAEQPAcAOAcChmAaA8rL/nPZz+J7/w6esqtOBYnAUoLKyUi1atNDYsWO1Y8eOgMnXlP/zn//0B4B77rkn6Dl8yz377LOBb7e8XE2aNNEvfvGLoHWuueYaJScna9euXTU+RyQQAAAAiB4CgB0CgEMxDQDrF4S39983rV8QmdetQWlpqYwxNU5/+ctf/AHgueeeC3oOX/O+YEHgeLdt2yZjjO66666gdR566KGAz72654gEAgAAANFDALBDAHAopgFg2SveAsCyVyLzujXwNekjRozQvHnzQk6lpaX+APDyyy8HPYeveV+0aFHI5/YSAA5/jkggAAAAED0EADsEAIca+hGA8vJyNW/eXMOGDatxOZsAUNMpQNdee23IU4AIAAAA1C8EADsE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cIiiBQAAcaW8rGoP/wOdQ3wT8PS4av4leilbBACHKFoAABCXysuqLvRd9krVv3HW+PvQS9khADhE0QIAANijl7JDAHCIogUAALBHL2WHAOAQRQsAAGCPXsoOAcAhihYAAMAevZQdAoBDFC0AAIA9eik7BACHKFoAAAB79FJ2CAAOUbQAAAD26KXsEAAcomgBAADs0UvZIQA4RNECAADYo5eyQwBwiKIFAACwRy9lhwDgEEULAABgj17KDgHAIYoWAADAHr2UHQKAQxQtAACAPXopOwQAhyhaAAAAe/RSdggADlG0AAAA9uil7BAAHKJoAQAA7NFL2SEAOETRAgAA2KOXskMAcIiiBQAAsEcvZYcA4BBFCwAAYI9eyg4BwCGKFgAAwB69lB0CgEMULQAAgD16KTsEAIcoWgAAAHv0UnYIAA5RtAAAAPbopewQAByiaAEAAOzRS9khADhE0QIAANijl7JDAHCIogUAALBHL2WHAOAQRQsAAGCPXsoOAcAhihYAAMAevZQdAoBDFC0AAIA9eik7BACHKFoAAAB79FJ2CAAOUbQAAAD26KXsEAAcomgBAADs0UvZIQA4RNECAADYo5eyQwBwiKIFAACwRy9lhwDgEEULAABgj17KDgHAIYoWAADAHr2UHQKAQxQtAACAPXopOwQAhyhaAAAAe/RSdggADlG0AAAA9uil7CREAPjuu+80ZswYtWnTRk2aNNGpp56qTz/9NOz1ly9frrPOOktNmzZVy5YtNWLECG3fvj1gmRUrVmjixInq2bOnmjVrpuzsbJ177rlatGiR9bgpWgAAAHv0UnbqfQCoqKhQv3791LRpU91999169NFH1b17dzVv3lyrV6+udf1NmzapTZs2ys/P18yZMzV16lS1bNlSPXv21IEDB/zL3XLLLWrRooVGjx6tWbNmafr06crPz1dKSormzZtnNXaKFgAAwB69lJ16HwBeeuklGWP08ssv++dt375dLVq00LBhw2pdf9y4ccrIyNBXX33lnzdv3jwZYzRr1iz/vH/961/as2dPwLo7d+5U27Zt1b9/f6uxU7QAAAD26KXs1PsAUFhYqCOOOEIVFRUB88eOHasmTZpo//79Na7frl07FRYWBs3v2rWrBg4cWOvrX3LJJWrVqpW3Qf8HRQsAAGCPXspOvQ8AnTt31jnnnBM0/6mnnpIxRp9/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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18647\n",
      "1232 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[6],\n",
    "           207,\n",
    "           245,\n",
    "           266)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.37748174147368e-06\n",
      "Cost function before refinement: 4.37748174147368e-06\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.27998889e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 9.109058243486396e-11\n",
      "     jac: array([-3.53771074e-07,  3.50167703e-09, -7.17406458e-10,  1.96667227e-09,\n",
      "       -3.65232464e-10, -2.61708398e-07,  2.20481224e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19986034e-01,  3.04925065e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.27999078e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 9.109058243486396e-11\n",
      "GonioParam(dist=0.7199860338026991, poni1=0.030492506521307684, poni2=0.004, rot1=0.0, offset=-42.79990784447931, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.030492506521307684\n",
      " Number of peaks found and used for refinement\n",
      "543\n",
      "Cost function before refinement: 1.9115723976987742e-07\n",
      "[ 7.19986034e-01  3.04925065e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.27999078e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 4.1213792481813325e-08\n",
      "     jac: array([-3.06070636e-09, -2.41167086e-11,  3.21647439e-06, -2.31812136e-06,\n",
      "       -3.62528230e-10,  8.61096023e-05,  5.54324342e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20705559e-01,  3.07684347e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -4.27999042e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 4.1213792481813325e-08\n",
      "GonioParam(dist=0.7207055592224313, poni1=0.030768434748054685, poni2=0.004, rot1=0.0, offset=-42.79990417388946, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7199860338026991 --> 0.7207055592224313\n",
      "Cost function before refinement: 4.1213792481813325e-08\n",
      "[ 7.20705559e-01  3.07684347e-02  4.00000000e-03  0.00000000e+00\n",
      " -4.27999042e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.9055962541521217e-10\n",
      "     jac: array([-5.20672544e-07, -3.45117956e-07, -5.78527760e-08,  4.38009067e-08,\n",
      "       -4.68311260e-09,  9.35212499e-08,  5.08197212e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 45\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20707163e-01,  3.08633971e-02,  3.96520588e-03,  2.50699030e-05,\n",
      "       -4.27999030e+01,  9.99050597e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 1.9055962541521217e-10\n",
      "GonioParam(dist=0.7207071627511924, poni1=0.03086339714237221, poni2=0.003965205877861361, rot1=2.5069903048049418e-05, offset=-42.79990297383393, scale=0.99905059684665, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.99905059684665\n",
      "area_pixel=0.04131177354259297 area_sum=0.04228396460577287, Error= -0.023533026539699672\n",
      "area_pixel=0.0435894947035802 area_sum=0.04387578172532226, Error= -0.006567798587455262\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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Lv37948UgFGjRkmrVq1kwIABcuKJJyIAUPBoCsA777yTGybzIUoArrrqqib3XHjhhVJcXNwgFiUAB6Xk9NNPb/D1oEOPNm3aSM+ePXN7Dj7Z6L333muUb9++fVJSUhIqAJMmTQo9302bNklFRYWcffbZctRRRzX6fv9tt9122PfnUJoSgA4dOkhxcbHs3r270fq9e/dKixYtpH379g3iB78C1BTXX3+9BEEg69evDz0vAACfQQA8YdeuXfLBBx+IiMibb75pLAAff/yxfPjhhyJy4PnmUQLw/vvv5x45eOWVVyIAUPCk8RWgfP93dbibgJuiqaE3SgAO/j/2hztOPvnk3J6uXbtKEATyySefNNnDZz7zmVABCLtpdvPmzXLKKadIEATSt29fGTNmjNx///1SWVkpZWVlTZ5zEgFo0aKFHHfccU2uP9h7UVFRg1jUZ8uTiACguYMAeMjhBOCll16Sz33uc9KmTRtp27atXHHFFVJTUxOa73ACcCgIAICuANx///0SBIFcd911edW2IQB/+ctfJAgCufrqq/PqSUTkvPPOS/wbgLB/l02ePFmCIJDKyspGr/3hD39QE4CDvwFo6m8rHPwNwDHHHNMgjgAAQJZBADwkSgCeeeYZKSoqkssvv1ymTZsmjz76qJx88snSvn370P8YIQAA8dB8DOhxxx0nQRDIr371q7xqawnAM888I0EQyNNPP91o/d69e6V9+/Zywgkn5P0Hxw7eGJzkHoAwAbj99tslCAL585//3Oi1b33rW02e88E+mrp5WKTp9+Lzn/+8BEEg8+fPb7T+1VdfDb0HAAEAgKyCAHhImABs27ZN2rdvL7feemuD+P/7f/9PjjnmmEbxgyAAAPHQEIC3334790jNK664Iu/aWgLw4osvShAE8tBDDzW558EHH5QgCORrX/ua7Nixo9HrGzZskBUrVuT+eeHChbmnAG3ZsiUX3717d+6m2LgCcHDInzp1aoP4W2+9lft7AZ8+57Fjx0oQBA0ee3ooTb0Xs2fPliAIpE+fPrJ9+/ZcfPv27dKnTx8JgkB+/OMfN9iDAABAlkEAPCRMAH75y1/m/sO3cePGBscXvvAFOe2005rMhwAAHJ45c+bIqFGjZNSoUbnn45966qm52D333NNg/UEBKC0tzd04e99998ltt92We7RkEBx4ln3Y9+abQksAPvro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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXhU5d3/8TsLCWvCTkiJkQRQwAoWIg+goiAqiopKKiAoyg8UXIsJiEujUJBAHxEUBSulLtVa+1S0WhFwg4oItbiwCyKLSAAXQATCJJ/fHzhThplJZu7MzJlJ3q/rOpdy5pw598x8k3w/ZxsjAAAAADWGcXoAAAAAAKKHAAAAAADUIAQAAAAAoAYhAAAAAAA1CAEAAAAAqEEIAAAAAEANQgAAAAAAahACAAAAAFCDEAAAAACAGoQAAAAAANQgBAAAAACgBiEAAAAAADUIAQAAAACoQQgAAAAAQA1CAAAAAABqEAIAAAAAUIMQAAAAAIAahAAAAAAA1CAEAAAAAKAGIQAAAAAANQgBAAAAAKhBCAAAAABADUIAAAAAAGoQAgAAAABQgxAAAAAAgBqEAAAAAADUIAQAAAAAoAYhAAAAAAA1CAEAAAAAqEEIAAAAAEANQgAAAAAAahACAAAAAFCDEAAAAACAGoQAAAAAANQgBAAAAACgBiEAAAAAADUIAQAAAACoQQgAAAAAQA1CAAAAAABqEAIAAAAAUIMQAAAAAIAahAAAAAAA1CAEAAAAAKAGIQAAYTR//nwZYzR//vyobdMYo169ekVte0BlZs6cqfbt26t27doyxmjGjBlOD8nKDTfcIGOMtm7d6vRQquSbb77R9ddfr1/84hdKTEyUMUbff/+99fNt3bpVxhjdcMMN4RtkNdCrVy8ZQ1uF+EClIq4ZY7ymxMRENWnSRBdccIH+/Oc/R308BIDIKSkp0V133aU2bdqodu3aysjIUJ8+ffSHP/zB6aHhBC+++KKMMTrrrLN0zz33qKioSB9++KHTw/KrqKhIxhi9++67fh+vLgHg4osvVkJCgoYMGaLf/va3Kioq0uHDhytcp6LfKwQA/wgAiCdUKuKau/EvKipSUVGR7r33Xl199dVKSkqSMUa/+c1vojoeAkBk/PTTT2rbtq2MMerUqZPuvvtujRo1Sl26dNGpp57q9PBwguuuu07GGH399ddOD6VSlQWAXbt2af369SotLY3uwMLo6NGjSkxMVN++fUNajwAQOgIA4gmVirjmDgAnW7JkiRISEpSQkBDVvXcEgMh49dVXZYzROeeco7KyMq/H4qHRrEkuuOCCuGmCKgsA1cG2bdusmnUCQOgIAIgnVCriWqAAIEnt27eXMUZ//etfveavWLFC11xzjVq0aKFatWqpVatWGjVqlN9G8t///rfuuOMOnXnmmWrUqJFSU1PVpk0bjR07Vt99953P8oECwHfffadzzz1XCQkJmjJlSqWv6+jRo5o5c6bOOussNWzYUHXq1FF2drauuOIKLV682Oc96NWrl/bu3auRI0cqIyNDKSkp6tChg/74xz/6fe7HHntM/fr10ymnnKKUlBQ1atRIffr00T//+U+/48nOzlZ2drZ++OEH3XrrrcrMzFRqaqrat2+vmTNnqry83O96obzXFXnjjTdkjNGYMWNCWi8YL7zwgs4//3ylp6crNTVVp59+uiZNmqQjR474LOt+r7/55huNGDFCmZmZSkxM9Hze7lNGtmzZolmzZumXv/ylateu7dVIlZWV6cknn1TXrl1Vr1491a1bV127dtUTTzzhE26C2WYgNp/zp59+qkGDBik7O1spKSlq2rSpzjrrLN15552V7gV3N9P+JqnyptFf8/Tuu+96jvCtXr1al156qdLT01WnTh2dd955+uCDD/w+l8vl0pNPPqkePXooLS1NtWvXVm5urkaMGKFNmzZJOl7TFY1XqvgUoJdeeknnnnuu5/nPOOMMTZkyxW/duH9+fvzxRxUUFCgrK0spKSnKzc3V1KlTA/78BLJp0yYNGzZMmZmZqlWrllq2bKlhw4Z5XtuJ2/X3+ipq3N2/w/xNRUVFkrw/y61bt+raa69VkyZNlJqaqi5duugf//hHwOcP5ectkI0bN2r8+PHq0qWLmjZtqpSUFJ1yyikaOXKkduzY4bO8bR3t2rVLw4cPV7NmzVS7dm116tRJf/rTn7ye70QVBYCFCxeqX79+atKkiVJSUpSTk6OCgoIqXYsBVAUBAHGtogBw+umnyxijl19+2TNv3rx5SkpKUt26dTVo0CAVFhZqwIABSkxMVMuWLbVt2zav57j55pvVvHlz5efna+zYsbrrrrt07rnnyhij9u3b68CBA17L+wsA27ZtU/v27VWrVi0999xzQb2uwYMHyxijM844Q3fccYfGjx+vYcOGqXXr1rr77rt93oNOnTqpXbt2OuOMM3Tbbbdp5MiRatiwoYwx+tOf/uS1/DfffKPExESdc845GjFihO655x7dcMMNaty4sYwxfs+pz87OVsuWLdW1a1dPALrtttvUsmXLgI15qO91RY4dO6azzz5b6enpWrduXdDrVebGG2+UMUatWrXSTTfdpLFjx6pHjx4yxuj888/XsWPHvJY3xuiXv/ylsrOz1bFjR91222264447PA21u2Hs37+/0tPTNWTIEI0fP1733nuv5zmGDBkiY4yysrJ055136q677vI0akOGDPEZY2XbDCTUz/nTTz9V7dq1VadOHV177bW65557NGbMGF100UWqVauWDh48WOH23n33XRUVFXlei/u0PH9Noz8VBYDLLrtMderUUe/evXX33XcrPz9fiYmJql27tjZs2OC1ztGjR9W3b1/Pe3zLLbdo3Lhx+vWvf63GjRt7fjZnzJjh2eYNN9zgM14pcACYMGGCjDFq2rSpbrnlFhUUFKhjx46esHb06FGv5bOzs5WZmamePXuqdevWGjVqlMaMGaPMzEwZY/Tggw9W+N6eaOXKlUpLS1NCQoKuvPJKTZgwQVdddZUSEhKUlpamlStXepadMWOG7rzzTs/vCPfre+WVVwI+/+rVqz1hLjs72+t9cR8pcX+W559/vpo1a6Zu3brprrvu0vXXX6/U1FQlJibqnXfe8XnuUH/eAnn44YeVnp6uAQMG6Pbbb9fdd9+tSy65RAkJCcrIyNDOnTu9lrepo5KSEk8tn3feebrnnns0fPhw1a1bVwMGDAgpADz44IMyxqhx48a6/vrrVVBQoIsuukjGGHXo0EH79+8P6nUD4UQAQFwLFAAWL17sOQXoq6++knR8r1GtWrWUm5vr8wdiyZIlSkxM1IABA7zmf/XVV3K5XD7P//TTT8sYo6lTp3rNPzkAfPLJJ2rZsqXS0tJ89twH8sMPPyghIUFdunTxu+19+/Z5/dv9HowYMcJr+bVr1yopKUnt27f3Wv7IkSN+95L98MMP6tixoxo1aqSffvrJ6zH3H8KePXt67an79ttvlZOTI2OM3n//fc98m/e6Inv37vU0Ci1atNCnn34a9LqBuD+rq666yuf1uhugRx991Gu++70eNmyY32bF3TBmZmbqyy+/9Hn8hRde8Fwge2JD/eOPP6pLly4yxvhcvF7ZNgMJ9XMeO3asjDFasGCBzzrfffed36MT/gRqgqoSAPwdVZszZ46MMRo9erTXfHdzfvnll/vsVT5y5Ij27Nnj+bfNRcDLly/3hItvvvnGM//Y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dLzJdx9pOeWUUzRmzBiNHz9eQ4YMUdOmTb1e87p165SYmKgWLVpo7NixmjRpkiZNmuR5PNDnOW7cOBlj1Lx5c40ZM0aFhYU644wzPHvn/X0PQDgCgHT8y/UaNGigxMREXXXVVZowYYKuvvpqJSYmqkGDBlqxYoXX8rYBYNCgQZ7fWb/97W81adIkT8i3CQBS6D9vlY3tjDPO0NixYzVixAidcsopateunTp37hyWOtq9e7fnd26vXr00YcIEn+8BeOihh4J63VOnTlVCQoLq1q2rgQMHqrCwUKNHj9all16qevXq6eKLLw7qdQPhRABAXAs1AEjH7/Bwww03eH07aseOHTVq1Ci9/fbbXst+++23Gj16tLKzs5WamqqcnBxNmDBBhw4d8vtHI9A3AZeXl+u2226TMUYXXXSR3z2tbt9//70eeughXXDBBcrMzFRKSooyMjLUq1cvvfDCCz4XFYcaACTpH//4h7p166b69esrPT1dffv21fvvvx9w/O7X+sMPP3i+wCglJUWnn356hd8EHMp7XZnnn39eF1xwgdLT0z3fKjx48GDPt3h+9NFHnote33zzzaCf9x//+Icuu+wyNWvWTLVq1VKLFi2Ul5en++67T+vXr/daNhwBoKysTLNnz1aXLl1Up04d1alTR7/61a/0+OOPV/hNwDZC+ZzfeustDR8+XO3bt1daWprq1q2rdu3a6fbbbw/pAsWKAoB0/AhEhw4dlJKSohYtWmjUqFHat29fWC4Cdjt27Jgee+wx5eXleb5tuU2bNho5cqTP3Xuee+45derUyesuSW4VfZ4vvviievbsqfr16ys1NVUdOnTQ7373O7/XoIQzAEjShg0bNHToUM8RwYyMDF133XU+X2Yl2QeAkpISDR48WM2bN/fc/cz9OdgGACm0n7dADh06pHvvvVe5ublKTU1Vq1atNGbMmLDX0c6dO3X99deradOmXt8E7D7acvIRx4pe97Jly5Sfn6+WLVuqVq1aatq0qTp16qTf/OY3WrVqVVCvGwgnAgCASlXUwABATeI+zWzhwoVODwWwRgAAUCkCAICaxt85+5999pnq16+vxo0bB3XHMSBWEQAAVIoAAKCmadmypc4991yNHj1aBQUFuvLKK5WcnKzExMSQrjUCYhEBAEClCAAAapoHH3xQnTt3VsOGDZWUlKQmTZrosssuC+l6DSBWEQAAAACAGqTaBIAjR45o3LhxatmypWrXrq2zzz5bixYtCmrdnTt3Kj8/X+np6WrQoIGuuOIKbdmyxe+yu3fv1qhRo5SZmanU1FRlZ2frpptuCudLAQAAACKm2gSAQYMGKTk5WQUFBZo7d666d++u5ORkLVu2rML1Dh48qLZt26p58+YqLi7WI488oqysLLVq1crr21al4986mpWVpaysLE2cOFHz5s3TpEmTdPnll0fypQEAAABhUy0CwEcffSRjjKZPn+6Zd/jwYeXm5qp79+4Vruv+ltGVK1d65q1fv15JSUmaMGGC17L9+vVT69atfYIBAAAAEC+qRQAoLCxUUlKS9u/f7zV/ypQpMsZo+/btAdfNy8tTXl6ez/yLLrpIubm5nn+vX79exhg98cQTko4HjNLS0jC9AgAAACA6qkUAuPDCC9W+fXuf+UuWLJExRq+99prf9crKypSamqrRo0f7PHb//ffLGKMDBw5Ikh577DEZY/R///d/6t27t4wxSkpK0iWXXFLht35W5Pvvv9eCBQv08ccfa82aNUxMTExMTExMTCFMH3/8sRYsWKDvv//eqherqapFAOjYsaN69+7tM3/t2rUyxmjOnDl+19u7d6+MMZo4caLPY7Nnz5YxxvPV6nfccYeMMWrSpIkuueQSvfTSS5o+fbrq16+v3NxcHTp0qMIxlpSU+BTtrFmzPF89z8TExMTExMTEZDctWLDAooOsuapFAMjJyVG/fv185m/ZskXGGM2YMcPvetu3b5cxRsXFxT6PzZs3T8YYrV69WpJ00003yRijjh07qqyszLPciy++KGOM/vCHP1Q4xqKiogqL1ukEzcTExMTExMQUb9OCBQtkjNHHH38cSutY41WLABCNIwC33nqrjDF66KGHvJZzuVxKTk7WjTfeWOEY/R0BcBftmjVrgn2pAAAA+NmaNWvopSxUiwAQjWsAJk+eHDBMtGjRQgMGDAh53BQtAACAPXopO9UiABQUFPi9C5C7aa/oLkBdu3b1exegvn37Kicnx/PvhQsXyhijBx54wGu5o0ePKikpSSNHjgx53BQtAACAPXopO9UiAKxYsULGeH8PwJEjR9SmTRt169bNM2/btm1av36917pTp06VMUarVq3yzNuwYYOSkpI0fvx4r+dr3ry5cnJydPjwYc/8uXPnyhijv/71ryGPm6IFAACwRy9lp1oEAEnKz89XcnKyCgsLNXfuXPXo0UPJycl6//33Pcv06tVLxni/5AMHDig3N1fNmzfXtGnTNGPGDGVlZSkzM1N79uzxWvaZZ56RMUZ5eXmaNWuWCgoKVKtWLZ177rlyuVwhj5miBQAAsEcvZafaBIDDhw+roKBAGRkZSk1NVV5enhYuXOi1jL8AIEk7duzQwIEDlZaWpvr166t///764osv/G7nxRdfVKdOnZSamqoWLVrotttu81wnECqKFgCAyDp27Jj27NmjL7/8Ulu2bGGKk+nLL7/Unj17dOzYsQo/X3opO9UmAMQjihYAgMgpLy/X1q1btW7dOm3cuNHxppYp+Gnjxo1at26dvvrqK5WXlwf8jOml7BAAHETRAgAQOfv379e6dev09ddfV9hEIvaUl5fr66+/1rp163xu8nIieik7BAAHUbQAAETOjh07tG7dukpPI0FsOnbsmNatW6cdO3YEXIZeyg4BwEEULQAAkfPll19q06ZNTg8DVbBp0yZ9+eWXAR+nl7JDAHAQRQsAQORs2bJFmzdvdnoYqILNmzdry5YtAR+nl7JDAHAQRQsAQOS4LyhF/KrsM6SXskMAcBBFCwBA5BAA4h8BIDIIAA6iaAEAiBwCQPwjAEQGAcBBFC0AAJFT3QPA/PnzZYzxO40fP17t27fXmWee6bPe3//+dxljdN555/k8Nm/ePBlj9NZbb3ltY9WqVX7H0KtXL3Xs2NFrXnZ2towx6tOnj991nnrqKc84Az2vGwEgMggADqJoAQCInEgFgFJXmZZv3qc3P9+l5Zv3qdRVFvZtBMPdnE+cOFHPPfec17R69WqNHDlSiYmJ+uGHH7zWu/vuu5WcnKw6deqotLTU67GbbrpJSUlJOnDggNc2Qg0AtWvXVmJior755hu/69SuXZsA4CACgIMoWgAAIifcAaDUVaaZSzapy6RFyh7/umfqOmmxZi7ZFPUgUFlz/swzz8gYo3/+859e8//nf/5HQ4YMkTFGH374oddj7dq101lnnRX0NgIFgD59+igtLU2PPvqo12M7duxQYmKirrnmGgKAgwgADqJoAQCInHAGgFJXmYb/8SNlj39dp57Q/J/47xvnr4xqCKisOd+yZYuMMbrvvvs88w4fPqyUlBT97W9/U05Ojn7/+997HtuzZ4+MMbr99tuD3kagAHDZZZdp+PDhOvvss70emzZtmpo0aeI5DYgA4AwCgIMoWgAAIiecAWDmkk1eTX+gadaS6H3xmLs5X7Jkifbu3es1uWVmZqpXr16efy9dulTGGO3atUtDhw7VVVdd5XlswYIFMsbopZdeCmobe/fuVY8ePQIGgEWLFskY4/VdDJ07d9bNN99cabBwI+hhHWoAACAASURBVABEBgHAQRQtAACRE64AUOoqU5dJi3z2/J88nfrz6UDROgpQ0UXAbvn5+V7n+j/88MNq3bq1JOmJJ55Q8+bNPcsWFBTIGKOvv/46qG24p0ABwOVyKSMjQ5MmTZIkrVu3TsYYvf/++wQAhxEAHETRAgAQOeEKAMs37wtq7797Wr55XxhGXzl3Ez179mwtXrzYa3KbOXOm17n+/fv313XXXSdJ+vTTT2WM0aZNx49adO/e3RMOgtnG4sWLdeaZZwYMAJJ0xx13qEOHDpKk++67T1lZWSovLycAOIwA4CCKFgCAyAlXAHjz810hBYA3P98VhtFXLpgm+uOPP5YxRr///e9VXl6uxo0b64knnpAklZWVKS0tTfPnz/dcGzBs2LCQtlHRNQCStGLFChlj9Mknn6h169YqLCwMeuwSASBSCAAOomgBAIicmnIEoKIm2uVyqUGDBhowYIDnFJxPPvnE83jfvn01YsQIz7UBc+fODWkblQUAScrNzdX5558vY4xWr14d9NglAkCkEAAcRNECABA5NeUagMqa6L59+6pZs2Z66qmnlJaWprKy/46vqKhIp59+uh5++GEZY7R27dqQthFMALj//vtljFH79u1DHjsBIDIIAA6iaAEAiJyachegyprohx56SMYYde/eXX379vV67K233lJCQoL+53/+R02aNFF5eXlI2wgmAHz11VcqKiry+j4CAoCzCAAOomgBAIiccH8PwI3zV8bV9wC4vf3225479jz44INej+3fv1+JiYkyxujyyy8PeRvBBICqjJ0AEBkEAAdRtAAARE4kvgl41pJN6jppsc83Ac+KwW8Cdjt06JCSk5NljNGiRYt8Hj/zzDNljFFxcXHI2yAAxCcCgIMoWgAAIifcAcCt1FWm5Zv36c3Pd2n55n1Rb/xrEgJAZBAAHETRAgAQOZEKAIgeAkBkEAAcRNECABA5BID4RwCIDAKAgyhaAAAihwAQ/wgAkUEAcBBFCwBA5BAA4h8BIDII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51sRAIIVRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTsEAAdRtAAAAPbopewQABxE0QIAANijl7JDAHAQRQsAAGCPXsoOAcBBFC0AAIA9eik7BAAHUbQAAAD26KXsEAAcRNECAADYo5eyQwBwEEULAABgj17KDgHAQRQtAACAPXopOwQAB1G0AAAA9uil7BAAHETRAgAA2KOXskMAcBBFCwAAYI9eyg4BwEEULQAAgD16KTvfigBw7NgxTZw4UW3atJHL5VK/fv1UVlbm9/kffPCBcnJyFBsbq6Sk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Y4fy8vLUvn17RUVFqV27dho4cKCWLl16UR6vtLRUs2bN0rFjxwK67UI53QQ76Zt+7tu2bdOUKVPUrVs3uVwuZWRkKD8/v8Gm3u12Kzc3VykpKZo7d64WLlyoNm3aqEuXLvrqq6/O+1jHjx9XcnKyfv/733uN33XXXRo6dKiOHj2qo0ePqnv37lq7dq0kqba2VmlpaVqyZMk38nwBoCkEAABBpbS0VJGRkercubPmzJmjFStWaObMmcrOzlanTp0uymP+9re/bbQZbeq2C+V2u1VbW+v5K3Eo+aYDQF5entLT01VYWKgVK1Zozpw5SktLU2xsrHbu3Ok1d/78+XK5XNq1a5dn7Pnnn5cxRiUlJed9rEWLFik+Pl61tbWesYMHDyoxMVE1NTWesWnTpmnatGle/87MzAzJ/QbQvAgAAILKoEGDlJqa2uBf3Kuqqi7KYzoRAE56VVq1AAAJc0lEQVSePPmN3l+w+aYDQGlpqU6fPu01Vl5erqioKI0aNcozVlNTo/j4eD344INecysqKmSM0eOPP37ex7rqqqs0evRor7Hnn39eOTk5XmN33HGHnnjiCc+/33nnHRljtGXLFr+fFwDYIAAACCpdu3ZVv379/Jp76NAhjR8/Xm3btlVkZKQ6dOiggoICTyP40UcfafLkyerSpYuio6OVnJys4cOHezWds2bNkjHG56ioqGjytvrHv/3223XppZcqMjJS3bp10zPPPOOzzvr72b17t0aOHKnExET17NmzwSa4fu6+ffs0duxYJSQkKD4+XuPGjdMXX3zhc9+vv/66rrnmGkVFRaljx456+umnPffRFH9eG5s1+buehp67v69nIHr16qVevXp5/r1s2TJdcskl+uijj7zmHTp0SMYYzZo1q8n7+89//iNjjP7whz94jS9dulQjRozw/PvMmTPKyMhQaWmp17zk5GTdddddls8GAPxDAAAQVLKzs9W6dWuft22c65NPPlG7du3kcrl099136+mnn9aMGTP03e9+13P1YN26derRo4dmzpyp4uJiPfjgg0pKSlJmZqancX3//fc1cuRIGWO0aNEirVmzRmvWrNHJkyebvK2yslKXX365MjIy9Jvf/EZFRUUaPHiwZ+7X1TfA3bp105AhQ/TUU09p2bJlTQaAq6++WsOGDdNTTz2lO+64Q8YYr7eTSNK7776rqKgodejQQfPnz9cjjzyidu3aqUePHucNAP68NoGuKZD1nPvcA3k9/XX27Flddtllys7O9owNGDBAWVlZqq6u9jrefvttGWP02GOPNXmfzz33nIwx2rFjh9d4aWmp2rZtq0OHDunYsWO6/fbblZub63P+wIEDdc0111g9HwDwFwEAQFB57bXXFB4ervDwcPXu3VvTpk3Tpk2bdObMGa95Y8aMUVhYmLZv3+5zH/Xvsf7yyy99bqtv9FavXu0Zs3kL0IQJE9S2bVt9+umnXuO33nqrEhISvB67voEeOXKk19ymAsD48eO95g4dOlQpKSleY7m5uXK5XPrkk088Y/v27VNERMR5A4C/r00gawpkPec+90BeT3+tWbNGxhjPVQS3263Y2NgGr+rUH+vWrWvyPn/961/LGKMTJ0743Pbwww8rNTVVycnJmjRpUoNv87rzzjsVExMT8HMBgEAQAAAEnW3btmno0KFyuVyexiw1NVWvvPKKJKmurk7x8fEaMmSI3/d55swZffrpp6qurlZiYqLuvvtuz22BBoCzZ88qMTFRd955p89fkusb2zfffNMzv76B3rp1q9d9NxUAtm3b5jV34cKFMsbo+PHjkv7XzMbExOi2227zWXNubu55A4C/r42/awp0PV9/7oG+nv7Ys2eP4uPj1bt3b7ndbknShx9+6LlqUVJS4nXUX+k531eBTp48WREREQGt5eumT58uY0yDb+cCgG8KAQBA0Dp9+rS2bdumBx54QNHR0WrVqpV2796tyspKGWP00EMPNXn+l19+qRkzZujyyy/XJZdc4vWX3ttvv90zL9AAUFVV1eRfkY0xevnllz3z6xvoAwcOeN13UwGgsrKywbn1713/73//K2OMZs6c6bPme+65x68rAP68Nv6uKdD1fP25B/p6ns/hw4fVsWNHZWRkeF2N2LRpk4wx+vOf/+xzzoABA5SWlnbe+77QADBt2jQZY6yuaACAvwgAAL4V6hvG2bNn+x0AJkyYoLCwMN17771at26dXnvtNZWUlCglJUVjx471zAs0ABw+fFjGGI0ePdrnL8n1x9e/sai+ga6urm7wOTUUAM4390IDgL+vjb9rupAAEOjr2ZSamhr17NlTycnJ2r17t9dtL7/8coNXYmpqahQZGamCgoLz3n/9W4A+//xzv9ZzrokTJ8rlclmdCwD+IgAA+FbYuXOnjDGaNGmS328BSkhI8Plrdm1trcLDw72a3Mcff7zRANDQbW63W61bt/Z5T39jLkYAcLvdio6Otn4LkL+vjb9rCnQ9554byOvZmNraWvXp00cul0tvvfWWz+0lJSUyxmjjxo1e40uWLJExRu+///55H6P+Q8D+zG0IHwIG0BwIAACCyl//+tcGfyhpwYIFMsZo4cKFkvz7EHBycrLGjRvnddtjjz0mY4xXk1tUVCRjjN577z2f+2rstnHjxikyMrLBbys6cuSI178vRgCQpFtuucX6Q8D+vjaBrCmQ9Zx7biCvZ0PcbrcGDx6siIgInwa/XlVVlcLCwvSrX/3KM3bw4EG1adNGY8aMOe9jSNK///1vrw8WByo5OVmFhYVW5wKAvwgAAIJKVlaWrrjiCt17770qLi7Wk08+qdtuu03h4eHq0KGD5ys+Dx06pPT0dM/XgC5fvlyzZ89WVlaWZ86YMWMUHh6uqVOnavny5Ro3bpwuv/xyn7e5bNu2TcYYDRo0SKtXr9YLL7zg+QaXxm6rrKxUZmamXC6X5/4fffRR5efnKykpyes5XawA8M4773h+/2DBggWaN2+e2rVrp549e543APj72gSypkDW09DXgPr7ejZk6tSpMsYoNzfX83WtXz/qDRs2TK1atdLMmTP1xBNPKCMjQz169PB8uNof3/ve96yuVtT/ENjmzZsDPhcAAkEAABBUXn31VY0fP15XXnml4uLiFBkZqc6dO6uwsNDnfeAff/yxxowZo9TUVM8PT02ZMsXzQ2D138fepk0bxcXFKScnR3v37lVmZqZPkztnzhxddtllCgsL82m0G7utqqpKU6ZMUUZGhlq1aqX09HQNGDBAxcXFXvd9sQKAJG3ZskVXX321IiMj1alTJ61cuVK//OUvFR0d3eTrHMhrE8ia/F1PQ+f6+3o2pG/fvk1+iLje0aNHNWzYMMXGxiotLU2FhYUBv59/4cKFiouLC/iDvNOnT1f79u0bvMIFAN8kAgAAhJghQ4aoc+fOTi/Do6Wt50LV1NQoOTlZK1eu9PucU6dOKT09XYsXL76IKwOA/yEAAMC32Ll/hS4vL1erVq10xx13sJ6LaP78+eratavq6ur8ml9UVKSMjAydOnXqIq8MAAgAAPCtlp6ervvvv1/FxcV66KGHlJycrNjYWJWXl7MeAAhRBAAA+BYbN26cMjMzFRUVpfj4eOXk5KisrIz1AEAIIwAAAAAAIYQAAAAAAIQQAgAAAAAQQggAAAAAQAghAAAAAAAhhAAAAAAAhBACAAAAABBC/h9Ubfm09j75BgAAAABJRU5ErkJggg==\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16809\n",
      "1413 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[7],\n",
    "           236,\n",
    "           273,\n",
    "           293)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.734044802496035e-08\n",
      "Cost function before refinement: 9.734044802496035e-08\n",
      "[ 7.20000000e-01  3.20000000e-02  4.00000000e-03  0.00000000e+00\n",
      " -3.72000000e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.3838347147363678e-10\n",
      "     jac: array([-5.98673543e-07,  2.23605236e-08, -1.03159942e-10,  2.50403027e-09,\n",
      "       -2.11195058e-10, -4.33428498e-07,  1.29258940e-10])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.19998053e-01,  3.17753501e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -3.72000028e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 1.3838347147363678e-10\n",
      "GonioParam(dist=0.7199980533232613, poni1=0.03177535006475983, poni2=0.004, rot1=0.0, offset=-37.20000282727144, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032 --> 0.03177535006475983\n",
      " Number of peaks found and used for refinement\n",
      "454\n",
      "Cost function before refinement: 1.430842008138168e-07\n",
      "[ 7.19998053e-01  3.17753501e-02  4.00000000e-03  0.00000000e+00\n",
      " -3.72000028e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 3.226849481117596e-08\n",
      "     jac: array([-3.92485422e-09, -5.23527888e-11,  2.95969591e-06, -2.13336162e-06,\n",
      "       -3.04084313e-10,  6.79809093e-05,  4.29992953e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 64\n",
      "     nit: 7\n",
      "    njev: 7\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20809333e-01,  3.20129561e-02,  4.00000000e-03,  0.00000000e+00,\n",
      "       -3.71999997e+01,  1.00000000e+00,  1.70270825e+01])\n",
      "Cost function after refinement: 3.226849481117596e-08\n",
      "GonioParam(dist=0.7208093328161905, poni1=0.032012956081398876, poni2=0.004, rot1=0.0, offset=-37.19999969780997, scale=1.0, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7199980533232613 --> 0.7208093328161905\n",
      "Cost function before refinement: 3.226849481117596e-08\n",
      "[ 7.20809333e-01  3.20129561e-02  4.00000000e-03  0.00000000e+00\n",
      " -3.71999997e+01  1.00000000e+00  1.70270825e+01]\n",
      "     fun: 1.8511910126699818e-10\n",
      "     jac: array([-5.57402301e-07,  1.08439870e-09, -4.85885850e-08,  3.72815016e-08,\n",
      "       -3.49842101e-10,  3.44041984e-09,  3.16520936e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 45\n",
      "     nit: 5\n",
      "    njev: 5\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20810790e-01,  3.20817605e-02,  3.95963325e-03,  2.90908690e-05,\n",
      "       -3.71999988e+01,  9.99058845e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 1.8511910126699818e-10\n",
      "GonioParam(dist=0.7208107904725951, poni1=0.03208176053609102, poni2=0.003959633245361843, rot1=2.9090869024017394e-05, offset=-37.1999988266373, scale=0.9990588449954669, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 1.0 --> 0.9990588449954669\n",
      "area_pixel=0.04876436188373834 area_sum=0.050127698054059644, Error= -0.027957633764832325\n",
      "area_pixel=0.057546003803974344 area_sum=0.05775905585124136, Error= -0.0037022909182844216\n",
      "area_pixel=0.049658293833474865 area_sum=0.05076774880169413, Error= -0.022341785884543948\n",
      "area_pixel=0.05525805937418937 area_sum=0.055742972286024095, Error= -0.00877542420646828\n",
      "area_pixel=0.05413146279471537 area_sum=0.05471036770655596, Error= -0.010694425791447673\n",
      "area_pixel=0.045739492253746405 area_sum=0.04707526635197212, Error= -0.029203955540549473\n",
      "area_pixel=0.04829832444085547 area_sum=0.04934824839708468, Error= -0.021738310146036582\n",
      "area_pixel=0.05408463708295397 area_sum=0.054632906002321624, Error= -0.010137239499762784\n",
      "area_pixel=0.04180745340076797 area_sum=0.04491414146774922, Error= -0.0743094308376167\n",
      "area_pixel=0.04855682651641935 area_sum=0.04971370658799365, Error= -0.023825281728061563\n",
      "area_pixel=0.05821213808510883 area_sum=0.058390691277043244, Error= -0.0030672845528085186\n",
      "area_pixel=0.053533284197945896 area_sum=0.0542348167245984, Error= -0.013104604680305085\n",
      "area_pixel=0.05444126075367084 area_sum=0.055046238495225275, Error= -0.011112485882569193\n",
      "area_pixel=0.05139325908436465 area_sum=0.052436334224842895, Error= -0.020295952408193915\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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J6eccooMGjQoUgDGjh0r7dq1k8GDB8txxx2HAEDBoykAb775Zm6YzIcoAbj88sub3XPuuedKcXFxo1iUAByQklNOOaXR14MOfnXo0EF69+6d23PgyUbvvPNOk3x79+6VkpKSUAGYOnVq6Plu3rxZKioq5IwzzpDDDjusyff7r7/++hbfn4NpTgCOOuooKS4ult27dzdZX19fL23atJFOnTo1ih/4ClBzXHXVVRIEgbz77ruh5wUA4DMIgCfU1dXJBx98ICIir776qrEAfPLJJ/Lhhx+KyP7nm0cJwHvvvZd75OBll12GAEDBk8ZXgPL931VLNwE3R3NDb5QAHPh/7Ft6nXDCCbk93bt3lyAIZPv27c328NnPfjZUAMJumt2yZYuceOKJEgSBDBgwQMaPHy+33367VFZWSllZWbPnnEQA2rRpI0cffXSz6w/0XlRU1CgW9dnyJCIAaO0gAB7SkgA88cQTct5550mHDh2kY8eOcumll0pNTU1ovpYE4GAQAABdAbj99tslCAK58sor86ptQwD++te/ShAEcsUVV+TVk4jI5z73ucS/AQj7d9m0adMkCAKprKxscuzll19WE4ADvwFo7m8rHPgNwJFHHtkojgAAQJZBADwkSgAWLFggRUVFcskll8jMmTPlvvvukxNOOEE6deoU+h8jBAAgHpqPAT366KMlCAL53e9+l1dtLQFYsGCBBEEgc+bMabK+vr5eOnXqJMcee2zef3DswI3BSe4BCBOAG264QYIgkL/85S9Njn33u99t9pwP9NHczcMizb8XX/jCFyQIAnnmmWearH/22WdD7wFAAAAgqyAAHhImANu2bZNOnTrJdddd1yj+v//7v3LkkUc2iR8AAQCIh4YAvPHGG7lHal566aV519YSgMcff1yCIJC77rqr2T133nmnBEEg3/jGN2Tnzp1Njr///vuyatWq3D8vWbIk9xSgjz/+OBffvXt37qbYuAJwYMifMWNGo/jrr7+e+3sBnz7nCRMmSBAEjR57ejDNvRcLFy6UIAikf//+smPHjlx8x44d0r9/fwmCQH7+85832oMAAECWQQA8JEwAfvvb3+b+w7dp06ZGry9+8Yty8sknN5sPAQBomUWLFsnYsWNl7Nixuefjn3TSSbnYrbfe2mj9AQEoLS3N3Th72223yfXXX597tGQQ7H+Wfdj35ptDSwA++ugj6dChgxxxxBFy4403yuTJk2Xy5Mm54X3Pnj0yfPhwCYJA/umf/km+9rWvyX/+53/KNddcI+eff74UFxfLd7/73UY5r7/++tz6m266SW699Vbp0aNH7u8AnHjiiY3WtyQA7733Xu7rOVdccYVMnDhRrrjiCjnkkENk5MiRzZ7zgceedu/eXSZOnCiTJ0+WmTNnRr4XIiJXXnll7r6Gm2++Wb797W/n7j84+O8SHAABAIAsgwB4SJgA3HfffZE37B1xxBHN5kMAAFrmwHPxw16f/t/FAQE4+NWuXTvp0qWLnH/++VJeXi4rV66M3YeWAIiIPPnkk3LOOec0errOwXn37dsnCxYskIsuukg+85nPyCGHHCJdu3aVc889V6ZMmdLkKTcNDQ3ygx/8QE499VQ59NBD5dhjj5VvfvOb8vHHH0vHjh2bPDWnJQEQ2f9c/X/913+VY445JvdXgB9++OHIc77//vvltNNOk0MPPbTJZxP1l4AffPBB6du3r7Rv317at28vffr0kQceeCDyLwE3BwIAAK0dBMBDwgTgwK/Lf/azn8kf//jHJq+wAR8BAIA0eeuttyQIAhk1apTrVgAAIA8QAA8JE4Bf//rXEgTN/zGbKBAAANDggw8+aPL/lu/YsUMuvfRSCYJAfvWrXznqDAAA4oAAeEiYAGzdulWOOOIIGTJkSLNP7qitrW02HwIAABpUVFTI8ccfL1dffbVUVFTI2LFj5bjjjpMgCGTYsGGyb98+1y0CAEAeIAAeMXPmTJk8ebKMHz9egiCQL33pS01u3Fu4cKEUFxdL79695d5775XZs2fL7bffLmeffbbceOONjfId2Dtq1CgJgkCuueaaXOxg/vznP+fip556qnTq1Cn3z4899pi18wcAv3nmmWfkkksukS5dusihhx4qHTp0kLPPPlu+973v5f04UQAAcA8C4BGlpaWhNyAefLNZdXW1XHzxxXLkkUdKu3btpHv37jJu3Dh57bXXGuWLuqHxYA7cqNfcK+ymQwAAAABonSAAAAAAAAAFBAIAAAAAAFBAIAAAAAAAAAUEAgAAAAAAUEAgAA7ZsmWLLF68WFasWCE1NTW8ePHixYsXL168YrxWrFghixcvli1btrge61oVCIBDFi9eHPmkHl68ePHixYsXL14tvxYvXux6rGtVIAAOWbFiRe6idW3QmXj16yc1QbD/p8/5TfMk3R93X1rvZ5y8+az1aU2an61Jbe1j2tegVlyztu3+Ndaa9pxGX6a9uorZ6tGkRmt8D1Oou/gfArBixQrXY12rAgFwSE1NjQRBIDU1Na5byQZDhogEwf6fPuc3zZN0f9x9ab2fcfLms9anNWl+tia1tY9pX4Nacc3aGjnixDXWmvacRl+mvbqK2erRpIaN/lydW4xYzT8EgFkqHgiAQxAAZdIaWLXzpzkkau5L6/3UGF58XZPmZ2tSW/uY9jWoFdesrZFDY6hPY2CNkzet/fn26tPwaquOZwM2ApBNEACHIADKpDWwaudPc0jU3JfW+6kxvPi6Js3P1qS29jHta1ArrllbI4fGUJ/GwBonb1r78+3Vp+HVVh3PBmwEIJsgAA5BAJRJa2DVzp/mkKi5L633U2N48XVNmp+tSW3tY9rXoFZcs7ZGDo2hPo2BNU7etPbn26tPw6utOp4N2AhANkEAHIIAKJPWwKqdP80hUXNfWu+nxvDi65o0P1uT2trHtK9BrbhmbY0cGkN9GgNrnLxp7c+3V5+GV1t1PBuwEYBsggA4BAFQZuVKkerq/T99zm+aJ+n+uPvSej/j5M1nrU9r0vxsTWprH9O+BrXimrVt96+x1rTnNPoy7dVVzFaPJjVs9Ofq3GLEaubNY5ZKAALgEAQAAAAAIDnMUslAABzCRQsAAACQHGapZCAADuGiBQAAAEgOs1QyEACHcNEqU1a2/+agsjK/85vmSbo/7r603s84efNZ69OaND9bk9rax7SvQa24Zm3b/WusNe05jb5Me3UVs9WjSQ0b/bk6txixmn79mKUSgAA4BAFQJs6THFzmN82TdH/cfWm9n6ZP3PB5TZqfrUlt7WPa16BWXLO2Ro44cY21pj2n0Zdpr65itno0qWGjP1fnFiPGU4CSgQA4BAFQJq2BVTt/mkOi5r603k+N4cXXNWl+tia1tY9pX4Nacc3aGjk0hvo0BtY4edPan2+vPg2vtup4NmAjANkEAXAIAqBMWgOrdv40h0TNfWm9nxrDi69r0vxsTWprH9O+BrXimrU1cmgM9WkMrHHyprU/3159Gl5t1fFswEYAsgkC4BAEQJm0Blbt/GkOiZr70no/NYYXX9ek+dma1NY+pn0NasU1a2vk0Bjq0xhY4+RNa3++vfo0vNqq49mAjQBkEwTAIQiAMmkNrNr50xwSNfel9X5qDC++rknzszWprX1M+xrUimvW1sihMdSnMbDGyZvW/nx79Wl4tVXHswEbAcgmCIBDEABl0hpYtfOnOSRq7kvr/dQYXnxdk+Zna1Jb+5j2NagV16ytkUNjqE9jYI2TN639+fbq0/Bqq45nAzYCkE0QAIcgAMqkNbBq509zSNTcl9b7qTG8+Lomzc/WpLb2Me1rUCuuWVsjh8ZQn8bAGidvWvvz7dWn4dVWHc8GbAQgmyAADkEAlElrYBWRffv2ydrT+ogEgew57wKzZAgAApAkPwJgVh8BSJYXAUi3R5MaNvpDADILAuAQBECZ+fNFKiv3/1TmtfUfya2X3izTzx0tv/rmPWbJTPtMuj/uvrTezzh581nr05o0P1uT2trHtK9BrbhmbY0cceIaa017TqMv015dxWz1aFLDRn+uzi1GrGb8eGapBCAADkEAWg9L1tZKaUWVlFZUyZg5y1y3AwAAAMIslRQEwCFctK0HBAAAAMA/mKWSgQA4hIu29YAAAAAA+AezVDIQAIdw0SqT4j0AS9bW5u4BmP3vd5gl4x4A7gFIkp97AMzqcw9AsrzcA5BujyY1bPTHPQCZBQFwCAKgTIpPAVqytlaWdustEgTyZo/PmSXjKUA8BShJfp4CZFafpwAly8tTgNLt0aSGjf54ClBmQQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKFNWtv9fDGVl6qmXrK2VuX2Hy9JuveXJoSPNkpn2mXR/3H1pvZ9x8uaz1qc1aX62JrW1j2lfg1pxzdq2+9dYa9pzGn2Z9uoqZqtHkxo2+nN1bjFiNf36MUslAAFwCALQeqhes1FKK6qktKJKxsxZ5rodAAAAEGappCAADuGibT0gAAAAAP7BLJUMBMAhXLSthyVraxEAAAAAz2CWSgYC4BAuWmVWrhSprt7/U5kla2tl2LgZMnL0VLntrgVmyUz7TLo/7r603s84efNZ69OaND9bk9rax7SvQa24Zm3b/WusNe05jb5Me3UVs9WjSQ0b/bk6txixmnnzmKUSgAA4BAFQJs6THGLCU4AUMX3ihs9r0vxsTWprH9O+BrXimrU1csSJa6w17TmNvkx7dRWz1aNJDRv9uTq3GDGeApQMBMAhCIAyCIDuPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgDIIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGQTBMAhCIAyCIDuPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgDIIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGQTBMAhCIAyCIDuPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIQOthydpaKa2oktKKKhkzZ5nrdgAAAECYpZKCADiEi7b1gAAAAAD4B7NUMhAAh3DRth6q12xEAAAAADyDWSoZCIBDuGhbDwgAAACAfzBLJQMBcAgXrTLcBKy7j5uA46/hJuBouAk4PM5NwP7fwGqrjmc32XITcDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKLNypUh19f6fyixZWyvDxs2QkaOnym13LTBLZtpn0v1x96X1fsbJm89an9ak+dma1NY+pn0NasU1a9vuX2Otac9p9GXaq6uYrR5Natjoz9W5xYjVzJvHLJUABMAhCEDrYcnaWimtqJLSiioZM2eZ63YAAABAmKWSUnACsG3bNrnrrrvk4osvls985jMSBIHMnz8/7/1btmyR6667To4++mjp0KGDXHjhhbJixYpEvXDRth4QAAAAAP9glkpGwQnAunXrJAgCOf744+XCCy+MJQANDQ0yePBgOeyww+Tuu++WBx54QE4//XQ5/PDD5a233ordCxdt6wEBAAAA8A9mqWQUnADU1dXJBx98ICIir776aiwB+NWvfiVBEMhvfvObXKy2tlY6deoko0ePjt0LF60yZWX7bw4qK1NPXb1mo8ztO1yWdustTw4daZbMtM+k++PuS+v9jJM3n7U+rUnzszWprX1M+xrUimvWtt2/xlrTntPoy7RXVzFbPZrUsNGfq3OLEavp149ZKgEFJwAHE1cARowYIZ/97GeloaGhUfz666+XDh06SF1dXaz6CIAycZ7kEJPqNRt5CpAWpk/c8HlNmp+tSW3tY9rXoFZcs7ZGjjhxjbWmPafRl2mvrmK2ejSpYaM/V+cWI8ZTgJKBAMQQgJNPPlmGDRvWJD5nzhwJgkD+8pe/xKqPACiTogDwGFBFEIBk+REAs/oIQLK8CEC6PZrUsNEfApBZEIAYAnDYYYfJNddc0yT++OOPSxAE8tRTT4Xu3bhxo9TU1DR6LV68mItWEwRAdx8CEH8NAhANAhAeRwD8H15t1fFswEYAsgkCEEMAiouLZfz48U3izz77rARBIIsWLQrdW1lZKcE/LtJPv7holUAAdPchAPHXIADRIADhcQTA/+HVVh3PBmwEIJsgADEEgN8AeA4CoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAYghANwD4DkIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGQTBCCGAHzlK19p9ilA1113HU8B8gEEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAhAiAO+//76sXr1a9uzZk4s98sgj8um/A7Bp0ybp1KmTjBwZ/9nwCIAyCIDuPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkk4IUgJkzZ8rkyZNl/PjxEgSBfOlLX5LJkyfL5MmT5eOPPxYRkbFjx0oQBLJu3brcvr1798o555wjHTt2lEmTJsmDDz4ovXr1ksMPP1zWrFkTuw8EQJn580UqK/f/VGbJ2lq59dKbZfq5o2X2v99hlsy0z6T74+5L6/2MkzeftT6tSfOzNamtfUz7GtSKa9bWyBEnrrHWtOc0+jLt1VXMVo8mNWz05+rcYsRq/jHLMUvFoyAFoLS0VMKeyHNg4G9OAEREPvroI7n22mulc+fO0qFDBxkyZIi8+uqrifpAAFoPS9bWSmlFlZRWVMmYOctctwMAAADCLJWUghQAX+CibT0gAAAAAP7BLJUMBMAhXLStBwQAAADAP5ilkoEAOISLVhnuAdDdxz0A8ddwD0A03AMQHuceAP+/v26rjmffsecegGyCADgEAVAmxacAVa/ZyFOAtOApQMny8xQgs/o8BShZXp4ClG6PJjVs9MdTgDILAuAQBEAZWwJwah+zZAgAApAkPwJgVh8BSJYXAUi3R5MaNvpDADILAuAQBEAZWwLAbwDMQACS5UcAzOojAMnyIgDp9mhSw0Z/CEBmQQAcggAok6IA8IfAFEEAkuVHAMzqIwDJ8iIA6fZoUsNGfwhAZkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCACiDAOjuQwDir0EAokEAwuMIgP/Dq606ng3YCEA2QQAcggAogwDo7kMA4q9BAKJBAMLjCID/w6utOp4N2AhANkEAHIIAKIMA6O5DAOKvQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCAChTVrb/XwxlZeqpl6ytlbl9h8vSbr3lyaEjzZKZ9pl0f9x9ab2fcfLms9anNWl+tia1tY9pX4Nacc3atvvXWGvacxp9mfbqKmarR5MaNvpzdW4xYjX9+jFLJQABcAgC0HpYsrZWSiuqpLSiSsbMWea6HQAAABBmqaQgAA7hom09IAAAAAD+wSyVDATAIVy0rQcEAAAAwD+YpZKBADiEi1aZlStFqqv3/1RmydpaGTZuhowcPVVuu2uBWTLTPpPuj7svrfczTt581vq0Js3P1qS29jHta1Arrlnbdv8aa017TqMv015dxWz1aFLDRn+uzi1GrGbePGapBCAADkEAlInzJIeY8BQgRUyfuOHzmjQ/W5Pa2se0r0GtuGZtjRxx4hprTXtOoy/TXl3FbPVoUsNGf67OLUaMpwAlAwFwCAKgDAKguw8BiL8GAYgGAQiPIwD+D6+26ng2YCMA2QQBcAgCoEyKAlC9ZiMCoAUCkCw/AmBWHwFIlhcBSLdHkxo2+kMAMgsC4BAEQBlbAnBqH7NkCAACkCQ/AmBWHwFIlhcBSLdHkxo2+kMAMgsC4BAEQBlbAsBvAMxAAJLlRwDM6iMAyfIiAOn2aFLDRn8IQGZBAByCACiTogBwD4AiCECy/AiAWX0EIFleBIrJ6ooAACAASURBVCDdHk1q2OgPAcgsCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJgiAQxAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCYIgEMQAGUQAN19CED8NQhANAhAeBwB8H94tVXHswEbAcgmCIBDEIDWw5K1tVJaUSWlFVUyZs4y1+0AAACAMEslBQFwCBdt6wEBAAAA8A9mqWQgAA7hom09IAAAAAD+wSyVDATAIVy0rQcEAAAAwD+YpZKBADiEi1YZbgLW3cdNwPHXcBNwNNwEHB7nJmD/b2C1Vcezm2y5CTibIAAOQQCUQQB09yEA8dcgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEAlEEAdPchAPHXIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BAJRBAHT3IQDx1yAA0SAA4XEEwP/h1VYdzwZsBCCbIAAOQQCUSVEAqtdsRAC0QACS5UcAzOojAMnyIgDp9mhSw0Z/CEBmQQAcggAoY0sATu1jlgwBQACS5EcAzOojAMnyIgDp9mhSw0Z/CEBmQQAcggAoY0sA+A2AGQhAsvwIgFl9BCBZXgQg3R5NatjoDwHILAiAQxAAZVIUAO4BUAQBSJYfATCrjwAky4sApNujSQ0b/SEAmQUBcAgCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqDMypUi1dX7fyqzZG2tDBs3Q0aOniq33bXALJlpn0n3x92X1vsZJ28+a31ak+Zna1Jb+5j2NagV16xtu3+NtaY9p9GXaa+uYrZ6NKlhoz9X5xYjVjNvHrNUAhAAhyAArYcla2ultKJKSiuqZMycZa7bAQAAAGGWSgoC4BAu2tYDAgAAAOAfzFLJQAAcwkXbekAAAAAA/INZKhkIgEO4aJUpK9t/c1BZmXrqJWtrZW7f4bK0W295cuhIs2SmfSbdH3dfWu9nnLz5rPVpTZqfrUlt7WPa16BWXLO27f411pr2nEZfpr26itnq0aSGjf5cnVuMWE2/fsxSCUAAHIIAKBPnSQ4x4SlAipg+ccPnNWl+tia1tY9pX4Nacc3aGjnixDXWmvacRl+mvbqK2erRpIaN/lydW4wYTwFKBgLgEARAGQRAdx8CEH8NAhANAhAeRwD8H15t1fFswEYAsgkC4BAEQBkEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCyCQLgEARAmRQFoHrNRgRACwQgWX4EwKw+ApAsLwKQbo8mNWz0hwBkFgTAIQiAMrYE4NQ+ZskQAAQgSX4EwKw+ApAsLwKQbo8mNWz0hwBkFgTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgDK2BICvAJmBACTLjwCY1UcAkuVFANLt0aSGjf4QgMyCADgEAVBm/nyRysr9P5VZsrZWbr30Zpl+7miZ/e93mCUz7TPp/rj70no/4+TNZ61Pa9L8bE1qax/Tvga14pq1NXLEiWusNe05jb5Me3UVs9WjSQ0b/bk6txixmvHjmaUSgAA4BAFoPSxZWyulFVVSWlElY+Ysc90OAAAACLNUUhAAh3DRth4QAAAAAP9glkoGAuAQLtrWAwIAAADgH8xSyUAAHMJFqwz3AOju4x6A+Gu4ByAa7gEIj3MPgP/fX7dVx7Pv2HMPQDZBAByCACiT4lOA+EvAivAUoGT5eQqQWX2eApQsL08BSrdHkxo2+uMpQJkFAXAIAqAMAqC7DwGIvwYBiAYBCI8jAP4Pr7bqeDZgIwDZpOAEoK6uTiZOnCjHHnustGvXTgYMGCBPP/10Xnv/+Mc/yoUXXiidO3eWI488Uvr37y8LFixI3AsCoAwCoLsPAYi/BgGIBgEIjyMA/g+vtup4NmAjANmk4ARg1KhRUlJSIuXl5TJ79mwZNGiQlJSUyIsvvhi573e/+50UFRXJ4MGDZebMmfLAAw/IBRdcIEEQyA9+8INEvSAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0KSgCWL18uQRDItGnTcrFdu3ZJ9+7dZdCgQZF7//mf/1m6du0qdXV1uVh9fb10795dzjzzzET9IADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTQpKACZMmCBt2rSRrVu3NopPnTpVgiCQd999N3TvwIEDpVevXs3GBw4cmKgfBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCySUEJwNChQ6Vnz55N4s8884wEQSCPPfZY6N6KigoJgkDuuOMO+dvf/iZvv/223HPPPdKmTRt59NFHE/WDACiTogBUr9mIAGiBACTLjwCY1UcAkuVFANLt0aSGjf4QgMxSUALQq1cvueiii5rEV61aJUEQyKxZs0L3bt++Xa688kopKiqS4B8XW4cOHWTx4sV51d64caPU1NQ0ei1evJiLVhNbAnBqH7NkCAACkCQ/AmBWHwFIlhcBSLdHkxo2+kMAMktBCcBJJ50kw4YNaxJ/5513JAgCmT59euje+vp6ueOOO2TEiBHyy1/+Un7+85/LBRdcIB07dpSlS5e2WLuysjInDp9+cdEqUVa2/18MZWXqqavXbJS5fYfL0m695amhI82SmfaZdH/cfWm9n3Hy5rPWpzVpfrYmtbWPaV+DWnHN2rb711hr2nMafZn26ipmq0eTGjb6c3VuMWI1/foxSyWgoATA5DcAN9xwg5x11lnS0NCQi+3Zs0dOOeUUGTBgQIu1+Q1A66Z6zUYpraiS0ooqGTNnmet2AAAAQPg6dVIKSgCS3gOwe/duKSkpkdtuu63JsZtuukmKi4tl9+7dsfvhom09LFlbiwAAAAB4BrNUMgpKAMrLy5t9CtCUKVMk6ilA77//vgRBIBUVFU2OjR8/XoIgkJ07d8buh4u29YAAAAAA+AezVDIKSgCWLVsmn/47AHV1dXLyySc3epTnhg0bZPXq1bl/3rt3r3Tq1El69OjR6P/p37Ztmxx33HFy2mmnJeqHi1aZlStFqqv3/1RmydpaGTZuhowcPVVuuyv5X38WEfM+k+6Puy+t9zNO3nzW+rQmzc/WpLb2Me1rUCuuWdt2/xprTXtOoy/TXl3FbPVoUsNGf67OLUasZt48ZqkEFJQAiIiMGDFCSkpKZMKECTJ79mwZPHiwlJSUyPPPP59bM2TIEAmCxm/NvffeK0EQyOc+9zmZPn26fP/735eePXtKEATy85//PFEvCIAycZ7kEBP+DoAipk/c8HlNmp+tSW3tY9rXoFZcs7ZGjjhxjbWmPafRl2mvrmK2ejSpYaM/V+cWI8ZTgJJRcAKwa9cuKS8vly5dukjbtm2lf//+8tRTTzVaM6QZARARWbhwoQwYMEA6deok7du3l4EDB8p///d/J+4FAVAGAdDdhwDEX4MARIMAhMcRAP+HV1t1PBuwEYBsUnAC4BMIgDIIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGQTBMAhCIAyCIDuPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgDIIgO4+BCD+GgQgGgQgPI4A+D+82qrj2YCNAGQTBMAhCIAyCIDuPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAMgiA7j4EIP4aBCAaBCA8jgD4P7zaquPZgI0AZBMEwCEIgDIpCkD1mo0IgBYIQLL8CIBZfQQgWV4EIN0eTWrY6A8ByCwIgEMQgNZD9ZqNUlpRJaUVVfK1uctdtwMAAADCLJUUBMAhXLStBwQAAADAP5ilkoEAOISLtvVwsACMmbPMdTsAAAAgzFJJQQAcwkXbeliythYBAAAA8AxmqWQgAA7holUmxZuAeQqQItwEnCw/NwGb1ecm4GR5uQk43R5Natjoj5uAMwsC4BAEQBkEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCyCQLgEARAGQRAdx8CEH8NAhANAhAeRwD8H15t1fFswEYAsgkC4BAEQBkEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCyCQLgEARAGQRAdx8CEH8NAhANAhAeRwD8H15t1fFswEYAsgkC4BAEQBkEQHcfAhB/DQIQDQIQHkcA/B9ebdXxbMBGALIJAuAQBEAZBEB3HwIQfw0CEA0CEB5HAPwfXm3V8WzARgCyCQLgEARAmZUrRaqr9/9UpnrNRhk2boaMHD1VbrtrgVky0z6T7o+7L633M07efNb6tCbNz9aktvYx7WtQK65Z23b/GmtNe06jL9NeXcVs9WhSw0Z/rs4tRqxm3jxmqQQgAA5BAFoP1Ws2SmlFlZRWVMnX5i533Q4AAAAIs1RSEACHcNG2HhAAAAAA/2CWSgYC4BAu2tYDAgAAAOAfzFLJQAAcwkWrTFnZ/puDysrUU1ev2Shz+w6Xpd16y5NDR5olM+0z6f64+9J6P+PkzWetT2vS/GxNamsf074GteKatW33r7HWtOc0+jLt1VXMVo8mNWz05+rcYsRq+vVjlkoAAuAQBECZOE9yiAlPAVLE9IkbPq9J87M1qa19TPsa1Ipr1tbIESeusda05zT6Mu3VVcxWjyY1bPTn6txixHgKUDIQAIcgAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKIAC6+xCA+GsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAyiAAuvsQgPhrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNEACHIADKzJ8vUlm5/6cyS9bWyq2X3izTzx0ts//9DrNkpn0m3R93X1rvZ5y8+az1aU2an61Jbe1j2tegVlyztkaOOHGNtaY9p9GXaa+uYrZ6NKlhoz9X5xYjVjN+PLNUAhAAhyAArYcla2ultKJKSiuqZMycZa7bAQAAAGGWSgoC4BAu2tZD9ZqNCAAAAIBnMEslAwFwCBdt6+FgAfja3OWu2wEAAABhlkoKAuAQLlplUrwHoHrNxoPuAbjTLBn3AHAPQJL83ANgVp97AJLl5R6AdHs0qWGjP+4ByCwIgEMQAGVSfApQ9ZqN//cUoFP7mCXjKUA8BShJfp4CZFafpwAly8tTgNLt0aSGjf54ClBmQQAcggAoY0sAeAyoGQhAsvwIgFl9BCBZXgQg3R5NatjoDwHILAiAQxAAZVIUAP4OgCIIQLL8CIBZfQQgWV4EIN0eTWrY6A8ByCwIgEMQAGUQAN19CED8NQhANAhAeBwB8H94tVXHswEbAcgmCIBDEABlEADdfQhA/DUIQDQIQHgcAfB/eLVVx7MBGwHIJt4KwCWXXCILFy6UnTt3um4lNRAAZRAA3X0IQPw1CEA0CEB4HAHwf3i1VcezARsByCbeCkCPHj2kqKhIDj/8cLn66qvlj3/8o+zbt891W6ogAMogALr7EID4axCAaBCA8DgC4P/waquOZwM2ApBNvBUAEZFXXnlFbrrpJunSpYsUFxdL165dpby8XFauXOm6NRUQAGUQAN19CED8NQhANAhAeBwB8H94tVXHswEbAcgmXgvAARoaGuSpp56SMWPGyOGHHy7FxcXSq1cvue++++R//ud/XLeXGARAl5f+5Sp5pfQMeX/cDeq5l6ytlbl9h8vSbr3lyaEjzZKVle3/F1hZmd39cfeZ9qmRN5+1Pq1J87M1qa19TPsa1Ipr1rbdv8Za057T6Mu0V1cxWz2a1LDRn6tzixGr6dePWSoBrUIADmbLli1y5ZVXSlFRkRQVFUmbNm3kC1/4glRVVbluLTYIgC6lFVW5lzZL1tbmco+Zs0w9PwAAAMSHWSoZrUYAXnzxRbnhhhukc+fOUlRUJGeccYZMmzZNfvjDH8qZZ54pxcXFcuedd7puMxZctLogAAAAAIUFs1QyvBaAVatWyXe+8x054YQTpLi4WLp06SK33HJLs/cAXHfddXLUUUc56DI5XLS6IAAAAACFBbNUMrwVgLPOOkuKi4ulffv2MmrUKHniiSekoaEhdP0vfvELKSoqstihOVy0ugwbN0NGjp4qw8bNUM9dvWZjLv9tdy0wS7ZypUh19f6fNvfH3Wfap0befNb6tCbNz9aktvYx7WtQK65Z23b/GmtNe06jL9NeXcVs9WhSw0Z/rs4tRqxm3jxmqQR4KwBDhgyROXPmyNatW/Nav2PHDlm/fn3KXemCAOhy4Ck9S7v1Vs9dvWbj/z0F6NQ+ZsniPHFCc3/cfaZ9auTNZ61Pa9L8bE1qax/Tvga14pq1NXLEiWusNe05jb5Me3UVs9WjSQ0b/bk6txgxngKUDG8FYMOGDZF/BGznzp2yYcMGix3pgwDoggAo70MA4q9BAKJBAMLjCID/w6utOp4N2AhANvFWAIqLi2XhwoWhxx955BEpLi622JE+CIAuCIDyPgQg/hoEIBoEIDyOAPg/vNqq49mAjQBkE28FoKioKFIAfvazn0lJSYnFjvRBAHSxJgD8ITAzEIBk+REAs/oIQLK8CEC6PZrUsNEfApBZvBKArVu3yoYNG2TDhg1SVFQkM2bMyP3zwa8///nPctlll0m3bt1ct2wEAqBLmgLAXwJWBAFIlh8BMKuPACTLiwCk26NJDRv9IQCZxSsBuPvuu6W4uDivV1FRkUyZMsV1y0YgALogANHsOe8CBAAB0DmGAOjHEQD/h1dbdTwbsBGAbOKVALz88svy/e9/X6ZNmyZFRUXy1a9+Vb7//e83et1///0ya9YsefXVV123awwCoAsCEE71mo2y9PgzEAAEQOcYAqAfRwD8H15t1fFswEYAsolXAnAwd999t/zlL39Rz1tXVycTJ06UY489Vtq1aycDBgyQp59+Ou/9jzzyiJxzzjnSoUMHOfLII2XQoEHy7LPPJuoFAdAFAQintKIq1z8CkOIaBCAaBCA8jgD4P7zaquPZgI0AZBNvBSAtRo0aJSUlJVJeXi6zZ8+WQYMGSUlJibz44ost7q2srJSioiIZMWKEzJo1S2bOnCk33HCDLFiQ7A9DIQC6IADhIACW1iAA0SAA4XEEwP/h1VYdzwZsBCCbeCMAkyZNknvuuSf3134nTZrU4uuee+6JVWP58uUSBIFMmzYtF9u1a5d0795dBg0aFLl36dKlUlRUJD/4wQ/in1wICIAupRVVuZc2S9bW5nKPmbNMPX/apPneAAAAuIJZKhneCEBRUZEUFxfL7t27c//c0ivu3wGYMGGCtGnTpslfF546daoEQSDvvvtu6N6RI0fKscceKw0NDbJv3z7Ztm1b/JP8FFy0uiAA4SAAAACQRZilkuGNANhg6NCh0rNnzybxZ555RoIgkMceeyx079FHHy3Dhw+X6dOnS+fOnSUIAunSpYvMnDkzcT9ctLogAOEgAAAAkEWYpZJRUALQq1cvueiii5rEV61aJUEQyKxZs5rd99FHH0kQBNK5c2fp2LGjTJs2TX71q1/JJZdcErnvYDZu3Cg1NTWNXosXL+aiVQQBCAcBAACALIIAJKNVCcCOHTtk7ty58tBDD8n69etj7z/ppJNk2LBhTeLvvPOOBEEg06dPb3bfu+++K8E/bjJ55JFHcvGGhgY5/fTT5bjjjmuxdmVlZS7Hp19ctDrwl4DD4SZgS2u4CTgabgIOj3MTsP83sNqq49lNttwEnE28FYBrrrlGevXqlfvn3bt3yxlnnJH7/n+nTp3k9ddfj5Uz6W8ANm3aJEEQyCGHHCJ79+5tdGzSpEkSBIFs2LAhsja/AUgfawJwah+zZAgAApAkPwJgVh8BSJYXAUi3R5MaNvpDADKLtwJw4oknyp133pn75/nz50tRUZH84he/kFWrVslpp50ml19+eaycSe8BaGhokHbt2kmXLl2aHPvRj34kQRDIG2+8EasXEX5tpQ0CEA4CYGkNAhANAhAeRwD8H15t1fFswEYAsom3AtC+fXuZO3du7p8vv/xy6d+/f+6f77///mYH8ijKy8ubfQrQlClTpKWnAJ1zzjnSpk2b3FOKDnDnnXdKEATy3nvvxepFBAHQBgEIBwGwtAYBiAYBCI8jAP4Pr7bqeDZgIwDZxFsBOProo+X+++8XEZH6+no58sgj5Y477sgd//GPfyzt27ePlXPZsmXy6b8DUFdXJyeffLIMHDgwF9uwYYOsXr260d7p06dLEATy4x//OBfbtWuXnHTSSXL66afH6uMACIAuCEA4CIClNQhANAhAeBwB8H94tVXHswEbAcgm3grAF7/4RTnttNPk9ddfl7vvvluKi4tl+fLlueMVFRVywgknxM47YsQIKSkpkQkTJsjs2bNl8ODBUlJSIs8//3xuzZAhQyQIGr81O3fulF69eskhhxwi5eXlMmPGDOnfv7+0adNGnnjiiUTniADoggCEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBs4q0AvPrqq3LUUUdJcXGxFBUVyYgRIxod79Gjh1x11VWx8+7atUvKy8ulS5cu0rZtW+nfv7889dRTjdY0JwAi+2/kHTt2rBx11FHStm1bGThwYJO9cUAAdOEpQOEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJt4KwAiIrW1tbJ48WJZsmRJo/iWLVvkhz/8oaxcudJRZzogALqkKQBL1tYiAFogAMnyIwBm9RGAZHkRgHR7NKlhoz8EILN4LQBZBwHQBQEIBwGwtAYBiAYBCI8jAP4Pr7bqeDZgIwDZxHsB+OSTT+Svf/2rvPDCC/L88883ebVmEABdho2bISNHT5Vh42ao516ytjaX/7a7FpglW7lSpLp6/09L+0srqnL9573PtE+NvPms9WlNmp+tSW3tY0nPM24+zfoaudLsX2Otac9p9GXaq6uYrR5Natjoz9W5xYjVzJvHLJUAbwVg8+bNMmrUKDnkkEOkuLi4yauoqEiKi4tdt2kEAqBLaUVV7qXNkrW1udxj5ixTz582ab43AAAArmCWSoa3AnDFFVdISUmJ3HLLLbJo0SJZsmRJs6/WDBetLghAOAgAAABkEWapZHgrAIcddphMmDDBdRupwkWrS5pD7vMIAAAAgHcwSyXDWwE45phj5MEHH3TdRqpw0eoyt+9wWdqtt8ztO1w99/Nra3P5nxw60ixZWdn+m5jKyqztL62oyvWf9z7TPjXy5rPWpzVpfrYmtbWPJT3PuPk062vkSrN/jbWmPafRl2mvrmK2ejSpYaM/V+cWI1bTrx+zVAK8FYBvf/vbMnToUNdtpAoCoEuaTwF6nqcA6WH6xA2f16T52ZrU1j6W9Dzj5tOsr5Erzf411pr2nEZfpr26itnq0aSGjf5cnVuMGE8BSoa3AvDSSy9Jnz595OKLL5ZHH31UXnnlFVmxYkWTV2sGAdCFx4CGgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBs4q0AFBUV5V48BQjyAQEIBwGwtAYBiAYBCI8jAP4Pr7bqeDZgIwDZxFsB+MlPfpLXqzWDAOjCV4DCQQAsrUEAokEAwuMIgP/Dq606ng3YCEA28VYACgEEQBcEIBwEwNIaBCAaBCA8jgD4P7zaquPZgI0AZJNWIQDvv/++vPHGG7J9+3bXraiCAOiCAISDAFhagwBEgwCExxEA/4dXW3U8G7ARgGzitQAsXrxYTj311Nz3/p999lkREdm0aZOcffbZ8tvf/tZxh2YgALogAOEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJt4KwCPPfaYFBcXy7nnniuTJk2SoqKinACIiFx22WUyfLj+895tggDoggCEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBs4q0A9OvXTy688EIREdm8eXMTAbj33nulW7durtpTAQHQ5dZLb5bp546WWy+9WT33C2/V5vLPGneHWbL580UqK/f/tLS/tKIq13/e+0z71Mibz1qf1qT52ZrU1j6W9Dzj5tOsr5Erzf411pr2nEZfpr26itnq0aSGjf5cnVuMWM348cxSCfBWANq1aycPPfSQiDQvAA8//LC0bdvWVXsqIAC6lFZU5V7avPBWbS73VQ8vU8+fNmm+NwAAAK5glkqGtwJw1FFHybRp00SkeQH4zne+I127dnXVngpctLogAOEgAAAAkEWYpZLhrQB8+ctflt69e0t9fX0TAfjggw/k6KOPlnHjxjnu0gwuWl0QgHAQAAAAyCLMUsnwVgDWrFkjnTp1krPPPlumTJkixcXFMnHiRLn99tvl6KOPls6dO8u6detct2kEF60u3AMQDvcAWFrDPQDRcA9AeJx7APz//rqtOp59x557ALKJtwIgsn9A/sIXviDFxcVSVFSUe33+85+XN99803V7xiAAuqT5FKAX39qUy7+KpwCZwVOAkuXnKUBm9XkKULK8PAUo3R5Natjoj6cAZRavBeAAH330kbzyyiuybNkyqa2tdd2OGgiALghAOAiApTUIQDQIQHgcAfB/eLVVx7MBGwHIJt4KwKRJk+Svf/1r6PGamhqZNGmSxY70QQB0aS0CUHfu+SJBILvPOz9ZAgTA3zUIQDQIQHgcAfB/eLVVx7MBGwHIJt4KQFFRkSxcuDD0+COPPCLFxcUWO9IHAdAlTQF44a1aNQF49YQzRYJA/nzy2ckSqXvReAAAIABJREFUIAD+rkEAokEAwuMIgP/Dq606ng3YCEA2abUC8NBDD0m7du0sdqQPAqCLLQEw/UvAxn0iAP6uQQCiQQDC4wiA/8OrrTqeDdgIQDbxSgCef/55mTRpkkyaNEmKiorky1/+cu6fD359+9vflq5du0r//v1dt2wEAqBLa/kNAAIQI69Pw30+axCAaBCA8DgC4P/waquOZwM2ApBNvBKAu+++O/ekn08/+efTr169esmyZa3veewHgwDo0lruAUAAYuT1abjPZw0CEA0CEB5HAPwfXm3V8WzARgCyiVcCsHPnTtm8ebNs2rRJioqKZPbs2bJ58+ZGrw8//FB27drlulUVEABdEIBwEABLaxCAaBCA8DgC4P/waquOZwM2ApBNvBKAg1m/fr3s2LHDdRupggDoMrfvcFnarbfM7TtcPfeLb23K5X/iC1ca5TLus6xs/78Ay8ry3lJaUZWrm/e+BHXU8+az1qc1pu9Z1H6T2trHkp5n3Hya9TVypdm/xlrTntPoy7RXVzFbPZrUsNGfq3OLEavp149ZKgHeCkAhgADoUlpRlXtp8+Jbm3K5v/rwUqNcafbpU00AAIC0YZZKhrcCsG/fPpk1a5b0799fOnfuLMXFxU1ebdq0cd2mEVy0utgSgNE/RgAAAAB8gFkqGd4KQHl5uRQXF0ufPn2krKxM7r777mZfrRkuWl3SHHL/9DcEAAAAwDeYpZLhrQAcc8wxMmLECNdtpAoXrS7Dxs2QkaOnyrBxM9Rz/+lvm3L5//POnxrlMu5z5UqR6ur9P/OktKIqVzfvfQnqqOfNZ61Pa0zfs6j9JrW1jyU9z7j5NOtr5Eqzf421pj2n0Zdpr65itno0qWGjP1fnFiNWM28es1QCvBWAjh07yuzZs123kSoIgC5pPgXoT3/jKUBqmD5xw+c1pu9Z1H6T2trHkp5n3Hya9TVypdm/xlrTntPoy7RXVzFbPZrUsNGfq3OLEeMpQMnwVgAuv/xy+frXv+66jVRBAHRBAMJBACytQQCiQQDC4wiA/8OrrTqeDdgIQDbxVgDee+896d27t0yZMkU2b97sup1UQAB0QQDCQQAsrUEAokEAwuMIgP/Dq606ng3YCEA28VYAOnbsKB06dMg98adDhw5y+OGHN3odccQRrts0AgHQJU0BeAkB0AMBSJYfATCrjwAky4sApNujSQ0b/SEAmcVbARg7dqyMGzeuxVdrBgHQhd8AhIMAWFqDAESDAITHEQD/h1dbdTwbsBGAbOKtABQCCIAuCEA4CIClNQhANAhAeBwB8H94tVXHswEbAcgmXgnAihUrYr9aMwiALghAOAiApTUIQDQIQHgcAfB/eLVVx7MBGwHIJl4JQFFRUbN/8be514G1rRkEQBcEIBwEwNIaBCAaBCA8jgD4P7zaquPZgI0AZBOvBOAnP/lJ7FdrBgHQhZuAw0EALK1BAKJBAMLjCID/w6utOp4N2AhANvFKAAoNBECX0oqq3Eubl/62KZd71OylRrnS7NOnmgAAAGnDLJUMBMAhXLS6IAB+1QQAAEgbZqlkIAAO4aLVBQHwqyYAAEDaMEslAwFwCBetLgiAXzUBAADShlkqGQiAQ7hodeEm4HC4CdjSGm4CjoabgMPj3ATs/w2stup4dpMtNwFnEwTAIQiALqkKwNsIgBoIQLL8CIBZfQQgWV4EIN0eTWrY6A8ByCwIgEMQAF0QgHAQAEtrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgALogAOEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BAHRBAMJBACytQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCAOhiSwBqTkEAjEAAkuVHAMzqIwDJ8iIA6fZoUsNGfwhAZkEAHIIA6IIAhIMAWFqDAESDAITHEQD/h1dbdTwbsBGAbIIAOAQB0IWvAIWDAFhagwBEgwCExxEA/4dXW3U8G7ARgGyCADgEAdAFAQgHAbC0BgGIBgEIjyMA/g+vtup4NmAjANkEAXAIAqDLsHEzZOToqTJs3Az13C+9vSmXf+IdPzHKZdznypUi1dX7f+ZJaUVVrm7e+xLUUc+bz1qf1pi+Z1H7TWprH0t6nnHzadbXyJVm/xprTXtOoy/TXl3FbPVoUsNGf67OLUasZt48ZqkEIAAOQQB0Ka2oyr20eentTbncV8562ShXmn36VBMAACBtmKWSgQA4hItWlzSH3Jff3owAAAAAeAazVDIKTgDq6upk4sSJcuyxx0q7du1kwIAB8vTTT8fOM3ToUAmCQG688cbEvXDR6oIA5Fdz37591uoCAACkCbNUMgpOAEaNGiUlJSVSXl4us2fPlkGDBklJSYm8+OKLeed49NFH5bDDDkMAPGNu3+GytFtvmdt3uHrul9/enMv/+EVXGuUy7rOsbP9NUGVleW8prajK1d13002p1VHPm89an9aYvmdR+01qax9Lep5x82nW18iVZv8aa017TqMv015dxWz1aFLDRn+uzi1GrKZfP2apBBSUACxfvlyCIJBp06blYrt27ZLu3bvLoEGD8sqxa9cuOeGEE+See+5BADwjzacAvfz25sz8HYB9+e5LUEc9bz5rfVpj+p5F7TeprX0s6XnGzadZXyNXmv1rrDXtOY2+THt1FbPVo0kNG/25OrcYMZ4ClIyCEoAJEyZImzZtZOvWrY3iU6dOlSAI5N13320xx6RJk+T444+XnTt3IgCegQCEgwBYWoMARIMAhMcRAP+HV1t1PBuwEYBsUlACMHToUOnZs2eT+DPPPCNBEMhjjz0WuX/Dhg3Svn17+eUvfykiggB4RpoCsPQdBEANBCBZfgTArD4CkCwvApBujyY1bPSHAGSWghKAXr16yUUXXdQkvmrVKgmCQGbNmhW5/ytf+YoMHjw4989xBGDjxo1SU1PT6LV48WIuWkUQgHAQAEtrEIBoEIDwOALg//Bqq45nAzYCkE0KSgBOOukkGTZsWJP4O++8I0EQyPTp00P3Pvfcc1JUVCSvvPJKLhZHACorKyX4x0X66RcXrQ4IQDgIgKU1CEA0CEB4HAHwf3i1VcezARsByCYFJQBJfwNQX18vvXv3lquvvrpRnN8A+AUCEA4CYGkNAhANAhAeRwD8H15t1fFswEYAsklBCUDSewDmzp0rhxxyiLz00kuybt263CsIArn66qtl3bp1smPHjtj9cA+ALghAOAiApTUIQDQIQHgcAfB/eLVVx7MBGwHIJgUlAOXl5c0+BWjKlCkS9RSgqK/vHHgtWrQodj8IgC4IQDgIgKU1CEA0CEB4HAHwf3i1VcezARsByCYFJQDLli2TT/8dgLq6Ojn55JNl4MCBudiGDRtk9erVuX9evXq1LFq0qMkrCAK59NJLZdGiRfL+++/H7gcB0OXWS2+W6eeOllsvvVk999J3NufyP3D17Ua5jPucP1+ksnL/zzwprajK1W2YOy+1Oup581nr0xrT9yxqv0lt7WNJzzNuPs36GrnS7F9jrWnPafRl2qurmK0eTWrY6M/VucWI1YwfzyyVgIISABGRESNGSElJiUyYMEFmz54tgwcPlpKSEnn++edza4YMGSJB0PJbw2NA/aK0oir30mbpO5tzuUfMetkoV5p95lOzoWGftboAAABpwiyVjIITgF27dkl5ebl06dJF2rZtK/3795ennnqq0RoEoHWCAORXEwEAAICswCyVjIITAJ/gotUFAcivJgIAAABZgVkqGQiAQ7hodeEegHC4B8DSGu4BiIZ7AMLj3APg//fXbdXx7Dv23AOQTRAAhyAAuqT5FKBlPAVIjxh5d517vj9P+MlnDU8BioanAIXHeQqQ/0+wsVXHs6fs8BSgbIIAOAQB0AUBCKc1CsDcF/+e69mL4T6fNQhANAhAeBwB8H94tVXHswEbAcgmCIBDEABdEIBwWqMAHNyzF8N9PmsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAuiAA4SAAltYgANEgAOFxBMD/4dVWHc8GbAQgmyAADkEAdEEAwkEALK1BAKJBAMLjCID/w6utOp4N2AhANkEAHIIA6JKmACz/+4cIgBYIQLL8CIBZfQQgWV4EIN0eTWrY6A8ByCwIgEMQAF0QgHAQAEtrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgALogAOEgAJbWIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BAHSZ23e4LO3WW+b2Ha6ee9k7m3P5qz4/wiiXcZ9lZfv/BVhWlveW0oqqXN2Gm25KrY5m3oN7jlybTz5ba0zfs6j9JrW1jyU9z7j5NOtr5Eqzf421pj2n0Zdpr65itno0qWGjP1fnFiNW068fs1QCEACHIAC6lFZU5V7aLHtncy73V370klGuNPvMp2b93gZrdU1w8T4BAEDrglkqGQiAQ7hodUlzYFz+9w8RAMsgAAAA0BLMUslAABzCRasLApBfTQQAAACyArNUMhAAh3DR6jJs3AwZOXqqDBs3Qz338r9/mMtfftt8o1zGfa5cKVJdvf9nnpRWVOXq1r+2IrU6mnkP7jlybT75bK0xfc+i9pvU1j6W9Dzj5tOsr5Erzf411pr2nEZfpr26itnq0aSGjf5cnVuMWM28ecxSCUAAHIIA6MJTgMJp9BSgC/Lcl6COZl6eAqRYW/tY0vOMm0+zvkauNPvXWGvacxp9mfbqKmarR5MaNvpzdW4xYjwFKBkIgEMQAF0QgHAQAEtrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgALogAOEkEYC3evYVCQLZNfi8RG2GggAky48AmNVHAJLlRQDS7dGkho3+EIDMggA4BAHQJU0BeGVdYQnAe1t2qp1vExCAZPkRALP6CECyvAhAuj2a1LDRHwKQWRAAhyAAuiAA4Rw8TDfkIQDrN2/PrX/9pLOS9RkGApAsPwJgVh8BSJYXAUi3R5MaNvpDADILAuAQBECPffv2IQARIACW1iAA0SAA4XEEwP/h1VYdzwZsBCCbIAAOQQD0QACiQQAsrUEAokEAwuMIgP/Dq606ng3YCEA2QQAcggDoYVMA/ooAmIEAJMuPAJjVRwCS5UUA0u3RpIaN/hCAzIIAOAQB0CNtAXgVAdADAUiWHwEwq48AJMuLAKTbo0kNG/0hAJkFAXAIAqDHvn37pLSiKvfS5tV1H+Zyf+mhl4xypdlnPjX37G1ocf36zdtz68+/7zkLHTbFxfsEAACtC2apZCAADuGi1SNtAXilwARg3SYEAAAA/IdZKhkIgEO4aPWwKQBfRgCsgAAAAEBLMEslAwFwCBetHvwGIP+au+v5ChAAAGQDZqlkIAAO4aLVg5uAo+EmYEtruAk4Gm4CDo9zE7D/N7DaquPZTbbcBJxNEACHIAB6NDQgAFHEFYB1mxCARGsQgGgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAeiAA0TQWgAtaXI8AJFyDAESDAITHEQD/h1dbdTwbsBGAbIIAOAQB0AMBiCauAPAVoIRrEIBoEIDwOALg//Bqq45nAzYCkE0QAIcgAHrYFYCzjXIhAEMQgCT5EQCz+ghAsrwIQLo9mtSw0R8CkFkQAIcgAHqkLQCvrS8sAeArQAnXIADRIADhcQTA/+HVVh3PBmwEIJsgAA5BAPRAAKJBACytQQCiQQDC4wiA/8OrrTqeDdgIQDZBAByCAOiBAESDAFhagwBEgwCExxEA/4dXW3U8G7ARgGyCADgEAdADAYiGewAsrUEAokEAwuMIgP/Dq606ng3YCEA2QQAcggDosbdhnwwbN0NGjp4qw8bNUM//2voPc/m//Z/zjXIZ97lypUh19f6feVJaUZWrW/fKay2uX7dpe279v5f9OFmfYeTZ/8E9R67NJ5+tNQk+m7z3m9TWPpb0POPm06yvkSvN/jXWmvacRl+mvbqK2erRpIaN/lydW4xYzbx5zFIJQAAcggDosbdhn5RWVOVe2ry2/sNc7n978E9GuUz7bGjYJ/v27Utcc+fuvS2uX7dpe279Bd97LlGfpqT5eQIAQDZglkoGAuAQLlo90heAj7wQgO119fL5adUy9P4lsmtPy4N8czXjCsD59/ktAAuWrpdvLlwhtZ/UWeoMAAB8gVkqGQiAQ7ho9SiU3wA88Nzfcnt/+vK6RDXzEYD1m1uHANTV782tufYnr1rsDgAAfIBZKhkIgEO4aPXY27BP5vYdLku79Za5fYer539t/Ye5/L///AijXCZ9Tn3izdz+P395XN77Siuqcvv2fOs/Wly/btP23Ppfn/ul2H1GUla2/yausrLIZQf3HLZ2W119bs2CAZeb1dRYk+e5JcpvUlv7WNLzjJtPs75GrjT711hr2nMafZn26ipmq0eTGjb6c3VuMWI1/foxSyUAAXAIAqDH3gJ5CtDUJ97M7f9/Zw3Ie9/BT9TZm6HHgG6rq8+tWV56hllNjTVxniYSd79Jbe1jSc8zbj7N+hq50uxfY61pz2n0Zdqrq5itHk1q2OjP1bnFiPEUoGQgAA5BAPRAAKJBAPKoiQDkfwwB0I8jAP4Pr7bqeDZgIwDZBAFwCAKgR/oC8FF2BOD87PwdAARAYS8CgACk2RcCEL+OZwM2ApBNEACHIAB61O9tQAAiiCsA/AYg4RoEIBoEIDyOAPg/vNqq49mAjQBkEwTAIQiAHgUjAI8jAAeDACjsRQAQgDT7QgDi1/FswEYAsgkC4BAEQA8EIBoEII+aCED+xxAA/TgC4P/waquOZwM2ApBNEACHIAB6WBWAk/kKkBEIQLL8CIBZfQQgWV4EIN0eTWrY6A8ByCwIgEMQAD0KRgAUfgNQjwCktwYBiAYBCI8jAP4Pr7bqeDZgIwDZBAFwCAKgR/3eBrn10ptl+rmj5dZLb1bP/9r6j3L5/2vMbUa5TPqc+vibuf3PVtyX977Siqrcvp0/ntPi+nWbtufWT71yYuw+I5k/X6Sycv/PCA7uOWzttrr63Jrbht9iVlNjTZ7nlii/SW3tY0nPM24+zfoaudLsX2Otac9p9GXaq6uYrR5Natjoz9W5xYjVjB/PLJUABMAhCIAe9XsbpLSiKvfS5rX1H+VyX/7An4xymfQ59Yk3c3sfqn47Uc1Pdu1pcf26Tdtz6y/43nOx+9Qgn/dpW119bs3pdz5psTsAAPABZqlkIAAO4aLVo2AE4HFzAdiKAAAAQEZglkoGAuAQLlo99lgUgOEIgBUQAAAAaAlmqWQgAA7hotVjT+r3AHyYy/9D7gEwg3sAkuXnHgCz+twDkCwv9wCk26NJDRv9cQ9AZkEAHIIA6LEn9acAfejdU4De4ylAPAVIYy9PAeIpQGn2xVOA4tfx7Ck7PAUomyAADkEA9EAAokEA8qipsKbhggsQgCgQgPA4AuD/8GqrjmcDNgKQTRAAhyAAeiAA0SAAedQ0XPPxjj3y6glnigSB7L2g5fc4dg8IgFl9BCBZXgQg3R5NatjoDwHILAUnAHV1dTJx4kQ59thjpV27djJgwAB5+umnW9z36KOPypVXXiknnniitG/fXnr06CG33HKLbNmyJXEvCIAeNgXgLwiAGRkVgO89tTrXywdnDwzPEQUCkF59BCBZXgQg3R5NatjoDwHILAUnAKNGjZKSkhIpLy+X2bNny6BBg6SkpERefPHFyH2dO3eWM844Q+688055+OGH5aabbpJDDz1UTjvtNNm5c2eiXhAAPRCAaBCAPGoarpn8+1X/99kgAPF6RAAQANOcCEA6/SEAmaWgBGD58uUSBIFMmzYtF9u1a5d0795dBg0aFLm3urq6SeynP/2pBEEgDz/8cKJ+EAA9EIBoEIA8aiIA+R9DAPTjCID/w6utOp4N2AhANikoAZgwYYK0adNGtm7d2ig+depUCYJA3n333Vj5PvnkEwmCQG65JeLxgxEgAHogANEgAHnURADyP4YA6McRAP+HV1t1PBuwEYBsUlACMHToUOnZs2eT+DPPPCNBEMhjjz0WK99bb70lQRDI1KlTE/WDAOixux4BiCKrAvDJrj0IgOleBAABSLMvBCB+Hc8GbAQgmxSUAPTq1UsuuuiiJvFVq1ZJEAQya9asWPmuvfZaadOmjbz11lstrt24caPU1NQ0ei1evJiLVond9Q0yt+9wWdqtt8ztO1w9/2vrP8zl/92FI4xymfQ55fE3c/v//OVxee8rrajK7dv1zW+1uH7dpu259b8+70ux+4ykrGz/v8DLyiKXHdxz2NpPdu3JrVkw4HKzmoZrJv9+Va6Xv3wl/88m7x5a6i/p3iTH8vwMjfNp1tfIlWb/GmtNe06jL9NeXcVs9WhSw0Z/rs4tRqymXz9mqQQUlACcdNJJMmzYsCbxd955R4IgkOnTp+eda+HChRIEgUycmN9fSa2srJTgH5b66RcXrTm76xuktKIq99LmtfUf5nIPnxl9w3hLmPQ55fE3c3t/tOTtRDU/2r67xfXrNm3Prb/ge8/F7lODfN6nT3btya05/c4nLXbXlMm/X5XrZfbz+X82AACQHL5NkYyCEgCt3wC88MIL0q5dO7n44oulvr4+rz38BiBdCkUApiIAjdiKAAAAFDQIQDIKSgA07gF44403pFOnTtKvXz/Ztm2bUT9ctHoUigBo/AbgQwQgFRAAAAD7MEslo6AEoLy8vNmnAE2ZMkXyeQrQ22+/LV26dJEePXpIbW2tcT9ctHrsrm+QYeNmyMjRU2XYuBnq+V9b/2Euf1nFPKNcJn1OefzN3P5fP5z/TeulFVW5fR+//EqL6/++aXtu/TU3/zh2n5GsXClSXb3/ZwQH9xy2duuuPbk1X7ruAbOahmsm/35Vrpf/nhPvgQJ59dBSf0n3JjmW52donE+zvkauNPvXWGvacxp9mfbqKmarR5MaNvpzdW4xYjXz5jFLJaCgBGDZsmXy6b8DUFdXJyeffLIMHPh/T+3YsGGDrF69utHeDz74QE466STp2rWrrFu3TqUfBEAPngIUzcFP1NlzXstPAfp7K3kK0Mc7fX0KUP6fTd49tNRf0r1JjsV5aopJPs36GrnS7F9jrWnPafRl2qurmK0eTWrY6M/VucWI8RSgZBSUAIiIjBgxQkpKSmTChAkye/ZsGTx4sJSUlMjzzz+fWzNkyBAJgsZvzVlnnZW76fdnP/tZo9fTTz+dqBcEQI+0BeDVdX4IwBQVATi/xfWt5TGgPgnAvVUIQIsgAOFxBMD/4dVWHc8GbAQgmxScAOzatUvKy8ulS5cu0rZtW+nfv7889dRTjdY0JwBhT/AJgkCGxP2P4D9AAPSoq9+LAESAAORREwHI/xgCoB9HAPwfXm3V8WzARgCyScEJgE8gAHogANHEFYBW8xWgHQiA8V4EAAFIsy8EIH4dzwZsBCCbIAAOQQD0QACiMRGAlRkQgI19zhEJAvl4wGCzviLWcA9AHiAA4XEEwP/h1VYdzwZsBCCbIAAOQQD0QACiKfTfAOT1niMA+R9DAPTjCID/w6utOp4N2AhANkEAHIIA6JG2ALySIQHYnaF7ALbs2I0AmO5FABCANPtCAOLX8WzARgCyCQLgEARADwQgmrgC0Fp+A4AAKOxFABCANPtCAOLX8WzARgCyCQLgEARADwQgGhMB8PkeAJ8EIO2bgD/qP0gkCGTvBSF/xwEB0K2tkQMBQAAQgNT7QwCSgQA4BAHQo65+r5RWVOVe2ryy7sNc7uEzXzTKZdLnlMffzO390ZK3E9Xc+MmuFtf/fdP23PoLvvdc7D41yOd9+mj77tya0+980iiXKfdWrcrVmP18/p9NPuzYXZ/LfW/VKtXcAACtGWapZCAADuGi1WPXHgQg35r5CMC6gwTg/PsQgHxIUwA2bt2Vy93v3j+q5gYAaM0wSyUDAXAIF60eaQvA8r8jALZBAP4PBAAAoHmYpZKBADiEi1aPQhGAqQcJwEPVCQVga3YE4MMCFIC+kxEAAIADMEslAwFwCBetHrv2pHsT8PK/+3ET8NSDbgL+fyneBLx+c+t4CtCH2z29CTjGZ5NP/o1bd+Vyv3bCmfH75yZgbgLmJmA/ezSpYaM/bgLOLAiAQxAAPRCAaOIKwIbNOxCAmGsQgDxAAMLjCID/w6utOp4N2AhANkEAHIIA6FEwAvAEvwE4mIIRgE8QAOP6CECyvAhAuj2a1LDRHwKQWRAAhyAAeqQtAMve2eyFAHz3idX2BeBEfwVg87Y6BCCf/hEABAAB8LNHkxo2+kMAMgsC4BAEQA8EIBoEAAFAABRyIQB6+/Pt1afh1VYdzwZsBCCbIAAOQQD0QACiaSQA58YTgBWtRQCORwAQAMXaGjkQAAQAAUi9PwQgGQiAQxAAPQpFAP6/J+0IwLpN6QnAzsHniQSB1LXQRz4CsMlXATjbrgA0NOyT7eeciwBo1tbIgQAgAAhA6v0hAMlAAByCAOiBAERz8DDd0uAtkq4AHMi7soWbi1u1AFj+DcDBN4cjAEq1NXIgAAgAApB6fwhAMhAAhyAAeqQtAEs9EYD7MiQALZ1/XAFY5lgAphz0iFbbAtDie5VQAPZecIFTAag/f3/9fQgAAuDD8GqrjmcDNgKQTRAAhyAAeuzas1eGjZshI0dPlWHjZqjnX/rO5lz+/7+9N4+v6dr//1clREKDKEKbRkW5pTUr0ar7qZbqr7i4uaV1VbWfluunOiCmomZa1CwU98PtbdUtaa8pYqghhhAhQiIxZR5ljhOZXt8/Ijvn5Ex7n7323ifnvJ+Px370Wuu93u/3Wmtz369z9l5nauAOWb7k5LnicIww/uetv4ke5xt4QBiXefq8Vfu7WUWC/QdTgiTnaQmx89fPGZGRJm0yC0oEm2EfrZcXMzISOHnSbCxrNksO3hTi/LLtd/M+LGHGv/48x/xjs9Ewq2tlaW5m+g5FpeKdCeuwc/EO43Fi1soU5saZaf9gShDeHbMUv+08KD++xNiyIFe2AAAgAElEQVRcfEhp52ErN2cl8pKbq1ZtauUoJ4Ya+Wk1Nwlt0Tt2UC1lAyQANIQEAD90peXwDTwgXLw5fydb8D1s/RlZvuTkueJwjDB2/fE4m2Km5D60an83q0iw77fsuOQ8xeYi1y6zoESw6TDnkOyYclh68KYQY/Mft7n61p9nz0VHjfqVmJ8aa1YXciAIwr6hWso2SABoCN20/HAWAbDySI0AWHdMHQHgv/SY5DzF5iLXTr8wft6OBMCmkyQAHCUHgiDsG6qlbIMEgIbQTcsPEgDiY0oVAH3tWABkFOjsRwAcqhEAG0/Gc/WtLwB6LCQBQBAEUQ3VUrZBAkBD6Kblh660HNt7DsN5nxexvecw7v7P3c4W/P/25wBZvuTkufJIjDA+cuQHosf5Bh4QxhVOnGzV/k5moWD/c7+RkvO0hNj56+eMqVNN2mQU6ASbnb2Hy4s5dWrVy2VmYlmzWXaoZm+ujvrAvA9LmPGfWVAi+P6x7wijYVbXytLczPRZ9ClmrUxhbpyZdrP7Zkt8ibG5+JDSzsNWbs5K5CU3V63a1MpRTgw18tNqbhLaonv1olrKBkgAaAgJAH48fKTsKUDnbtvHKUDfHokVxid1Ue4UoDuZhXqnAJn54Skb4XkKkP7pOGqcAlR9Ko0pG1t/pE1MDpkFNacdXVLpFCCLPqWcmiJmnJl2s/tmS3yJsbn4kNLOw1ZuzkrkJTdXezrBRq04aozVag0ViEunANkGCQANIQHAD2cRAN+FkADQJyNfPQEQfu9BVQwzNrb+RoOYHEgAkAAgAaBym1o5yomhRn4kABwWEgAaQgKAHyQALCNHAFwmAQAA6LIgRPBT8dprRv1KCgD9bzpIANgYnwSAbX5JACibo5wYauRHAsBhIQGgISQA+EECwDJSBcBtEgBGtJ99UE8AGNvY+iNtYnIgAUACgASAym1q5Sgnhhr5kQBwWEgAaAgJAH4oLQDCbmfZhQBYRQLAgHRnEQD5JABkxycBYJtfEgDK5ignhhr5kQBwWEgAaAgJAH6QALCMfjGnkyoATBScclBKAJxXVQAYPwK08kiMTXsjJgcSACQASACo3KZWjnJiqJEfCQCHhQSAhpAA4IfTCICjt0gA6GFPAsDWE5rE5JDuhAKgsrKSBIBUW7k5kwBQP0c5MdTIjwSAw0ICQENIAPCDBIBlpAqA+Iy6IQDS8tQTAH6zLAsAW9/PEJODMwqAigoSAJJt5eZMAkD9HOXEUCM/EgAOCwkADSEBwI/iR2X46u3PseaVMfjq7c+5+w+7nSX4//79WbJ8yclz1dFbwvgj05aJHucbeEAYl71+i1X7+IxCwX7ByGmS87SE2Pnr54ydO03apOXpBJtpFvyJirlzJzB/vtlYfrMOCn5Kf9hu1L8qJFboD5m23HwcS5jJQX+eX//lK6NhVtfK0tzM9Fn0aWWtzGJunIn28opK8/tmS3wJsbn5kNLOw1ZuzkrkJTdXrdrUylFODDXy02puEtqiJ02iWsoGSABoCAkAfhQ/KoNv4AHh4k1YfJbge9j6M7J8yclz9dFbwthVR2/ZFDPxQbFV+/iMQsG+1+JQyXmKzUWuXVqeTrBpO9O8HY97w2/WQcHHw0flRv2rQmKF/jWh4vdGDPrz7LIgxKhfiXtfyb9PYigrr9A8B4Ig7B+qpWyDBICG0E3LD1UFwIazsnxpLQASsqUJgJ6L7FcApOY9VE0AtNMTAMWPyoz6V+ntzWoJeyMG/Xk6iwAoJQFAEIQIqJayDRIAGkI3LT/oGwDxMcUJgII6JwAs2fEWAEUlxgJgtUoC4KX5R4z6HVEAPCojAUAQhHWolrINEgAaQjctPxR/ByDePt4BWBNa8w7A4a+Wih4n/R2AAsF+/gjt3wGo3LHDpE1q3kNR/ni8A/DczJp8Srb+YNS/Wu/9jMMS3s8Qk0NKbs085wz/0miYI74DUFJWTu8ASLWVmzO9A6B+jnJiqJEfvQPgsJAA0BASAPwoflSm7ClA8fZxCtD3oXHC+MQuvUWP8w3UOwWo36tW7eMzCuzqFKBKMydLpOY9FOWPxylAz82syae8v/EpQGtCb+ntDd9TgJJza+YZ7mt82pH+WjnKKUAlZRZO9qJTgOgUIDoFSJ386BQgh4UEgIaQAOCH0gLgrBMLAFPHTsqBpwBIydVGAJRZFQDi90ZMDs4oAHSlJAAk28rNmQSA+jnKiaFGfiQAHBYSABpCAoAfJAAsI1UAxKWTAKhNO73fATAlAGzdGzE5JOUUKyIASssrkN3LnwQACQDl8iIBID2OnRXYJAAcExIAGkICgB9FJc4hANYeIwGgj5oCwM9OBMBFjgJg48l4s+O0FgAWf9yPBAAJABIA6uRHAsBhIQGgISQA+OGUAuAlJxIArw0waZNsRwLA1r0Rk0PiA2UEgCWRRQKAgw8SACQASAAonh8JANsgAaAhJAD4UegkAmCdSgLgFgkAI9rPrhEApa8aCwBb90ZMDgYC4FnnEAAWH+sjAUACgASAOvmRAHBYSABoCAkAfigtAM7EOY4AeFgHBUCFHQiA52cf0hMA/Y369fcmoQ4KgNprbMnn/Rd7A4whs0dfLvMz1W7pW70i/1cBxlDY9xVFYnPzQQKABAAJAMXzIwFgGyQANIQEAD8KdKVOJwCkFJmOKgD0n41XXADMqREAj0wIgPXH1REAFxQTAK+Z7av97YDN97CEYtKSqLcpPgkA2/ySAFA2Rzkx1MiPBIDDQgJAQ0gA8CNfV4rtPYfhvM+L2N5zGHf/Z+KyBP+//TlAli85ea4/HieMvzT876LH+QYeEMblffIPq/a30gsE+3/1/YvkPC0hdv76OZdP+cykTeKDYlH+RMWcOrXq/1imTjXZ3WHOIcFP0aTJRv227o2YHBKya+a5s/dwo2H6a1V77J3MQvz3fwKQ0u1loz79cWW11li/r+Izwz6b72Fza2yivbCkzGwcm+JLiM3Nh5R2HrZyc1YiL7m5atWmVo5yYqiRn1Zzk9AW3asX1VI2QAJAQ0gA8CNfVwrfwAPCxZszcVmC72Hrz8jyJSfP9cfjhLErDsfYFPNOZqFV+9i0AsG+6zchkvMUm4tYu5KycpM2iQ+KRfnjcW90nHtI8JGa99Cof8OJeKF/uYS9EUNCds08n599yKjf0vzeXP2H2T79cQ8flZvtKyuvEB2PFwUW/k6rEZ8giLoB1VK2QQJAQ+im5UfeQxIAYmM6kgDQL4yVFgB/mntY8JGcq64AuJ9dJPhuP/ugUb+l+YntKyopM9v3qEx9AWBJ1JMAIAiiGqqlbIMEgIbQTcsPpQXA6bhMuxAAthaZ+jFvSxQAXRZoLwB0pdoLgBe+rhEAiQ+Kjfr192bZIeUEgN8sfgKg7cyavgJdqdlxtQWYGgW4pb/TJAAIgqiGainbIAGgIXTT8iOvuBRDxq/Du2OWYsj4ddz9n47LFPxPnblTli85eW44ES+M37Fhn+hxvoEHhHGJx8Os2semFQj2AZ9ukpynJcTOXz/nkvDLJm3uZxeJ8icqZmQkcPJk1X9N0HneEcFP6slzRv0bT9bszfb14vdGTA73smrm+c4E4znor1Xtsfp9lVeuGPS1nVnTV3A+3Oy42utv8z1sbo1NtFv6O21TfAmxufmQ0s7DVm7OSuQlN1et2tTKUU4MNfLTam4S2qJ37KBaygZIAGgICQB+5BY/UvQUoNNxmXZxCtCGEzW/3KrkKUAxafmCfbiJH56Sg22nABmfuw9UFcZqnQL04rwjFn9LQf9Xde/bcApQXHoBop/vbjKHu/rzlHgKkH5f7dN82s6s6av92wb648prrb8apwDlFZs/2YtOAVIoZyXy0vKEnbqQo5wYauSn1dwktNEpQLZBAkBDSADwgwSAZaQKgJup+gLAHo4BNS0A7qopAOYfsbiGm07eliUA+i49ZraItzZPsQKg9nGqzxkIgP5mx5X3ly8AIhJycLODscCprKysupdrCRRLf6dJACiUMwkA9XOUE0ON/EgAOCwkADSEBAA/coqcQwDY+imzVAFwI8W+BEDtT6CruZNZyE0AFPZ9xWKslxQWAJaKeGvzFC8ADOfmN6vm141r/7YBbwFgLsffr6YI7Tm9/YV2S3+nSQAolDMJAPVzlBNDjfxIADgsJAA0hAQAP5QWAKduOZcAiE7JE+zt4YfA1BAAwrq+aHpduywIEWyK/dUVALc5CYDa69h+tp4AeMW8AChTUAAsPXhTaE/u+rLQ/oAEgHRbuTmTAFA/Rzkx1MiPBIDDQgJAQ0gA8MNSscCDP/QEwHUnEADXk+uGALBWGIuNWVFRadXGmgCQ+w6ApSI+PoOTAKhVyOv/unGJRgJgiZ4ASCEBQALAnotXteLYWYFNAsAxIQGgISQA+JFdWKKoADgRm1EjAJ7XTgDY+ilznRcA/U0LAGuFsdiYpeUVVm26fiNeAEh5P6MaS0V8XHoBFwFQu5DvOLdGAOj6aSMAFh+4USMAutUIAEt/p0kAKJQzCQD1c5QTQ438SAA4LCQANIQEAD+UFgDHY9L1BEB3Wb7k5Ln5D3UEQFRSXREAlgtjsTF1peVWbbrpCYAilQXALQkCoPZJP/p9tZ/zf+Hrw2bvC/1xtU8I4ikAFv1XXwD0EdqzSABIt5WbMwkA9XOUE0ON/EgAOCwkADSEBAA/LBULPAi9USMAouu4ADD16XVtriXl1gkBYO2TcbExix+VWbXpvvBojQDo+4pRv60nNFVjqYjXP5ZVlgCo9ZhPJ9ECwHCccgKg5huAzAISAJJt5eZMAkD9HOXEUCM/EgAOi9MJgJKSEsyYMQOtW7dGw4YN8fLLL+Po0aOixiYnJyMgIABNmjTBk08+iWHDhuHOnTs250ICgB9KC4CQ6DSnEgBXE51LABTozJ85X00PPQFQqLAAqH1cp/6xrFYFQK2x+n26WgJA/7cNat8Xlr454CkAzL0DkFGgIwEg1VZuziQA1M9RTgw18iMB4LA4nQAYPXo0XF1dMW3aNAQFBcHf3x+urq44c+aMxXGFhYV4/vnn0bJlS6xYsQKrV6+Gj48PnnnmGWRnZ9uUCwkAfmQU6OAbeEC4eHMkOk3w/W6Q8a/ASkFOnpv/uC2MXXrwpk0xb6UXWLWPTMwV7LsvFCeQbclFrF2BrtSkza30AlH+rNnkFj+yatNzUajQfzUx16h/w4l4oX/54RiLc7OWY1FJmUFfdEqe0PfcTOP89MeWllcY9D03s6bvXlaRQd9L848IfTdS8s36zCjQme2zZX76LDsUI7RvPBkvtFv6O63k33WCIOoWVEvZhlMJgIsXL4Ixhm+//VZo0+l08PPzg7+/v8WxK1asAGMM4eHhQltMTAxcXFwwa9Ysm/Khm5YfybkPFS0KDkWlCr7HbD0vy5ecPDeetK3IlCoAriTkCPY97FgAxKbxEQDZhSVWbXotrhEAVxJyjPp5CoDc4kcGfdeTxQuAkrJygz6/WQeFvvgMw73v+k2I0Hc9Oc+sz/R85QTAyiM1AmDDCT0BkE8CgCAI61AtZRtOJQCmT58OFxcX5OcbftK1dOlSMMaQmJhodmzv3r3Ru7fx1/qDBg2Cn5+fTfloedOWllfgUFQqZuy9hpGbwuAbeAB/mnsYw9afweig8/hwZzjazz6IcdsvYta+KMz/LRrT917FisMxmBd8HbP2RWHDiXgsPXQTs/ZFYcfZu9h17h7+fTEBv1xKRHBkMoIjk/H71RSsConFb1dT8MetTJy6lYmz8Vk4G5+FkOg0RCbmIiopD9eT83ArvQDxGQXCf+MzCg2u25nG153H14mYDIOioKKikut67b2cJPge+8MFWb7kFC/rj8cJY1ceUU4ARNiZAMg3IwBi0vK5CAAx3yDpC4DL9y0LgBUyBUDtT9yjksQLAF2poQB4fs4hoS8mzfDfPn0BUPtbDX2faXnKCYDvQmKF9rXH4oT2dBIABEGIgASAbTiVAHjjjTfwwgsvGLUfO3YMjDH8/vvvJsdVVFTAzc0NkyZNMuqbO3cuGGMoKLBeVNVGq5u2sKQM/9+60wb/J+qI1/Ozqwqfl+YfQfeFR+EbeAA9Fx3F/3x3EgNX/YG3vj+NUZvC8Lct5zD2hwv4YMdFfLLrEv7xYwQ+++kKvtgTiWm/XMXMX6+h37LjBr5XHonBdyGxWHkkBssOxWD98ThsOnnb6rXuWJyBn4NRqTgUlYqQ6DSE3kjH8Zh0nIjNEMTSmbgsQTCdjsvEXzaeFcaO3BSGs/FZOHc7GxfvPsClew9w+X4OriTkIDIxF1cScnDp3gOE3c4yiLn7/H1cT87DjZR83EjJx83UfMSmFSA2rQAxaVV/3nb6jpFoqBZid8wIsbtZRbibVWTQdi+rSLCPSy8w+sQ+PqMQMWn5uJVegDhB+BUYFfYX7z5AbFqVTfUVk5aP7WfuGuUZpycg49ILjB4TiknLF/qrc629Rncf560/B/3+Xy4l4m5WEe5n18z5858jhf6ALedwNTEXMWn5uJtVhITsYiRkFyPxQc1V3ZaQXYz72UUG/sNuZyE+oxDRKXmISMgxePTLN/AAbmcWIj6jQMhRv+9GSr6QV+2+4MhkIe/aMXeevYsrCTm4fP8BLt59YJTP/eyqedT2mZRTjOTch0jKKUZq3kOk5j1EQnYx4jMKcCMlH5GJuQi/Z+gvNe8hEh9Uzfv///cVoX3aL1eF9TkRayjqq9tv14ofnZKHxAfFSMl9iOvJeWa/LSIIwjEhAWAbTiUAOnfujNdff92o/caNG2CMYcuWLSbHZWVlgTGGhQsXGvVt3LgRjDHExsZajJ2RkYHo6GiDKzg4WJWbNi69AAGbz2HYhrMY8r1x4d994VF89M9wvPX9aQxecwqjNoVh8JpT+J9vT8I38AA6zj2EtjMPoNPXhw0eJ7C3S//FQHv2L9ePreOljlNqPaX4FWNrTzZK7q2c2Lz7eN+DvNqrr7YzqwSy/nX9+e4AqzrGV0y7qUuqDyntPGzl5qxEXnJz1apNrRzlxKgLa3j0RrphQUIvAdsNTiUA2rVrhyFDhhi137lzB4wxrFmzxuS4xMREMMawYsUKo77t27eDMYbIyEiLsefPnw/2+CatfSl90+o/PqB/9VocipyiR9Yd1KKyshIVFZUoKilDXnEpcosfIbuwBBn5OuGTvTuZVZ8W30ovwNXEXFy8+wAh0WnCJ9Jn4rJwIiYDR6LTEBKdhsPX0/D71RTh0aHgyGT8djVFuPTbzV1ZPf0BxpDc9WV89ctVzN1/HV8HX8f836Ixe18UvtgTiWHrz+Af/4rApH9dxkf/vITRQecRsPkchm84i3fWncGg1acwcNUf+PO3J/HqiuPwX3oMPRcdRc9Fobjm1w1gDBeefQntZh1E25kH0G7WQYOXLHkXwDzHkwAgAeAsAoBHbLXz52ErN2cl8pKbq1ZtauUoJ0ZdWMN/X0wwLCBIANgNTiUAnPUbgITsYowOOo+/b7+Ij/4Zjom7L+OrX64iKinP+uC6hJSj3Dj6r6yshK60XPRV/tprAKs6dz02reoxievJeYhKysOVhBxEJOTg8v2qx3fC7z3AhTvZuHAnG+H3HuBKQk7VUY6MIb/PK7hwJxtht6seETp1KxMnYjNwIiaj6lGimAycupWJc7ezceneg6ofc2IMOb374chj0XX4etUjSAejUnHgWtX/PhSVisPXU5H3cj+AMWT38sd/r9WIsP1XjMXX/iuGV3XbrxFJwp9/v5qCg1GpeNDLX/AbHJmMA9dS8d9rKQaC78C1VFy4k111/vxj2wPXUvH74/7fr6bgv9dScDI2o+pITsbw4HGe+qKx2q465oPe/jgYlWokKvdfSUZmz74AY8jq2Rf7riQJc9l3JQn7riTh2M10FPR5RbDZfyUZ/7lc1RccmYz/XktBTu+qNct7uR+Ox6TjUFQq9l1Jwn8uJ2Hv5ST8cikRv1xKxJ5LiQZ//s/lKpu07n0AxpDZoy+CI5Nx+HoaTsRmIOx2ll5sf+y/kizMYf+VqnnmPo6d2bOvkFf12qc/9quf938uJxkI55ze/sLjZ2fishB2Owu5Lxv63Hs5Cb9GJCHr8Vpl9OiLPeGJ+OliAn4OT8CPFxLw74sJ+M/lJPx2NQWHr6fieEw6Tsdl4sKdbGT2qBqX3qMv9jye9/4ryUjt1kfw98vjtQmOTEZ+n34G7atCYvHLpUTk9PYX8vpiTyR2Pn4HqcOcQ+i37Dje33bB6LrZoeoTypsduotq5+FDSjsPW7k5K5GX3Fy1alMrRzkx6sIanojJsP7/oyQANMGpBAC9A+DgaCQAVPdj63ip45RaTx5nmNurjZJ7Kyc27z7e9yCvdp6xefiQ0s7DVm7OSuQlN1et2tTKUU4MNfLTam4S2kgA2IZTCYBp06aZPAVoyZIlsHYKUK9evUyeAvTmm2+iXbt2NuVDAoAzShWsvP0rWSTyHKfUevIoXuzVRsm9lRObdx/ve5BXO8/YPHzwKOqVKFil+FVqvNhc7al4VSuOnRXYJAAcE6cSABcuXEDt3wEoKSlB+/bt0adPH6EtISEBMTGGx/gtX74cjDFcunRJaIuNjYWLiwsCAwNtyocEAGeUKlh5+1eySOQ5Tqn15FG82KuNknsrJzbvPt73IK92nrF5+OBR1CtRsErxq9R4sbnaU/GqVhw7K7BJADgmTiUAACAgIACurq6YPn06goKC0K9fP7i6uuLUqVOCzYABA8CY4dIUFBTAz88PLVu2xMqVK7FmzRr4+PigTZs2yMzMtCkXEgCcUapg5e1fySKR5zil1pNH8WKvNkrurZzYvPt434O82nnG5uGDR1GvRMEqxa9S48Xmak/Fq1px7KzAJgHgmDidANDpdJg2bRq8vb3h5uaG3r1748iRIwY2AwYYCwAASEpKwl//+ld4enqicePGeOeddxAfH29kJxYSAJxRqmDl7V/JIpHnOKXWk0fxYq82Su6tnNi8+3jfg7zaecbm4YNHUa9EwSrFr1LjxeZqT8WrWnHsrMAmAeCYOJ0AsCdIAHBGqYKVt38li0Se45RaTx7Fi73aKLm3cmLz7uN9D/Jq5xmbhw8eRb0SBasUv0qNF5urPRWvasWxswKbBIBjQgJAQ0gAcCYyEjh5suq/9uxfrh9bx0sdp9R6SvErxtaebJTcWzmxeffxvgd5tfOMrXb+PGzl5qxEXnJz1apNrRzlxFAjP63mJqEtescOqqVsgASAhpAAIAiCIAiCsB2qpWyDBICG0E1LEARBEARhO1RL2QYJAA2hm5YgCIIgCMJ2qJayDRIAGkI3LWemTq16OWjqVPv2L9ePreOljlNqPaX4FWNrTzZK7q2c2Lz7eN+DvNp5xlY7fx62cnNWIi+5uWrVplaOcmKokZ9Wc5PQFt2rF9VSNkACQENIAHBGykkOWvqX68fW8VLHKbWeck/csGcbJfdWTmzefbzvQV7tPGPz8CGlnYet3JyVyEturlq1qZWjnBhq5KfV3CS00SlAtkECQENIAHBGqYKVt38li0Se45RaTx7Fi73aKLm3cmLz7uN9D/Jq5xmbhw8eRb0SBasUv0qNF5urPRWvasWxswKbBIBjQgJAQ0gAcEapgpW3fyWLRJ7jlFpPHsWLvdooubdyYvPu430P8mrnGZuHDx5FvRIFqxS/So0Xm6s9Fa9qxbGzApsEgGNCAkBDSABwRqmClbd/JYtEnuOUWk8exYu92ii5t3Ji8+7jfQ/yaucZm4cPHkW9EgWrFL9KjRebqz0Vr2rFsbMCmwSAY0ICQENIAHBGqYKVt38li0Se45RaTx7Fi73aKLm3cmLz7uN9D/Jq5xmbhw8eRb0SBasUv0qNF5urPRWvasWxswKbBIBjQgJAQ0gAcEapgpW3fyWLRJ7jlFpPHsWLvdooubdyYvPu430P8mrnGZuHDx5FvRIFqxS/So0Xm6s9Fa9qxbGzApsEgGNCAkBDSABwRqmClbd/JYtEnuOUWk8exYu92ii5t3Ji8+7jfQ/yaucZm4cPHkW9EgWrFL9KjRebqz0Vr2rFsbMCmwSAY0ICQEMiIiLAGENwcDCio6Ppknv16oVoxqr+a8/+5fqxdbzUcUqtpxS/YmztyUbJvZUTm3cf73uQVzvP2Grnz8NWbs5K5CU3V63a1MpRToy6uIYKxA1+LAAiIiK0LuvqFCQANCQ4OBjs8Y1LF1100UUXXXTRRZdtV3BwsNZlXZ2CBICG5ObmIjg4GBEREdY/dZB5VYsN+rahbl+0j45x0T46xkX76BgX7WPdviIiIhAcHIzc3Fyty7o6BQkAJyE6mt43cARoHx0D2kfHgPbRMaB9JJwREgBOAv0D5xjQPjoGtI+OAe2jY0D7SDgjJACcBPoHzjGgfXQMaB8dA9pHx4D2kXBGSAA4CfQPnGNA++gY0D46BrSPjgHtI+GMkABwEjIyMjB//nxkZGRonQohA9pHx4D20TGgfXQMaB8JZ4QEAEEQBEEQBEE4ESQACIIgCIIgCMKJIAFAEARBEARBEE4ECQCCIAiCIAiCcCJIABAEQRAEQRCEE0ECwMEpKSnBjBkz0Lp1azRs2BAvv/wyjh49qnVahBnCw8MxefJkdOrUCR4eHvDx8UFAQABu3bplZHvz5k0MHjwYjRo1QrNmzTB27FhkZmZqkDVhjcWLF4Mxhs6dOxv1hYWF4ZVXXoG7uztatWqFKVOmoLCwUIMsCVNERERg6NChaNasGdzd3dG5c2esXbvWwIb20L6Ji4vDu+++i6effhru7u7o2LEjvvnmGxQXFxvY0T4SzgQJAAdn9OjRcHV1xbRp0xAUFAR/f3+4urrizJkzWqdGmGDUqFHw9vbGlClTsG3bNixatAitWrVCo0aNcP36dcEuKSkJTz31FPz8/LB27VosWbIEzZo1Q9euXfHo0SMNZ0DUJikpCR4eHmjUqJGRAIiMjETDhg3RvXt3bN68GR+LVwkAABIsSURBVHPmzIGbmxveeustjbIl9AkJCUGDBg3Qp08frF69Glu3bkVgYCCmT58u2NAe2jeJiYlo2rQpfH19sWzZMgQFBWH8+PFgjGHYsGGCHe0j4WyQAHBgLl68CMYYvv32W6FNp9PBz88P/v7+GmZGmCMsLMyogI+Li4Obmxvef/99oW3SpElwd3dHQkKC0BYaGgrGGIKCglTLl7DOu+++i9dffx0DBgwwEgBDhgxB69atkZ+fL7Rt27YNjDGEhISonSqhR35+Plq1aoURI0agoqLCrB3toX2zZMkSkz/yNW7cODDGkJOTA4D2kXA+SAA4MNOnT4eLi4vBP2gAsHTpUjDGkJiYqFFmhFR69OiBHj16CH9u2bIlAgICjOw6dOiAgQMHqpkaYYFTp07BxcUFUVFRRgIgPz8frq6uBp8mA8CjR4/QuHFjfPTRR2qnS+ixefNmMMZw8+ZNAEBRUZGREKA9tH8CAwPBGENWVpZRe7169VBUVET7SDglJAAcmDfeeAMvvPCCUfuxY8fAGMPvv/+uQVaEVCorK/H0009j0KBBAIDk5GQwxrBixQoj27Fjx8LLy0vtFAkTlJeXo0uXLvj0008BwEgAnD17Fowx7Nmzx2jsq6++aiD4CPUZNWoUPD09ERoaig4dOoAxhkaNGmHixInQ6XQAaA/rAocPHxYe94mMjERiYiJ+/vlneHp64vPPPwdA+0g4JyQAHJjOnTvj9ddfN2q/ceMGGGPYsmWLBlkRUtm9ezcYY9i+fTsA4NKlS2CMYdeuXUa206dPB2MMJSUlaqdJ1GLDhg1o0qSJ8GJ2bQGwd+9eMMZw+vRpo7EBAQHw9vZWLVfCmC5dusDDwwMeHh6YMmUKfv31V0yZMgWMMYwePRoA7WFdYdGiRXB3dwdjTLjmzJkj9NM+Es4ICQAHpl27dhgyZIhR+507d8AYw5o1azTIipBCTEwMPD094e/vj/LycgDA6dOnzX5a9fXXX4MxhtzcXLVTJfTIzs6Gl5cXvvvuO6GttgDYtWsXGGO4ePGi0fi///3vaNKkiSq5EqZp164dGGOYOHGiQfunn34Kxhji4uJoD+sIu3fvxuDBg7F161b8+uuvmDBhAp544gmsX78eAP1dJJwTEgAODH0DULdJS0tDu3bt4OPjg5SUFKGdvgGwfyZOnIj27dsbvNBN3wDULTp37gzGGE6dOmXQfurUKTDG8H//93+0h3WAn376Ce7u7khKSjJoHz9+PDw8PJCdnU37SDglJAAcGHoHoO6Sl5eHbt26wcvLCzdu3DDoo3cA7Ju4uDjUq1cP69atw71794SrT58+6NChA+7du4cHDx7Qc8d2zptvvgnGGGJjYw3aY2JiwBjD999/T3tYB+jfvz/69etn1L5v3z4wxhAaGkr7SDglJAAcmGnTppk8Baj6WDQ6Bcg+0el06N+/Pzw8PHDu3DmTNi1atDB7CpCpb30I9Th58qTBs8amrqlTpyIvL8/iySMTJkzQaAYEAMycOROMMRw/ftyg/fjx42CM4ccff6Q9rAN06NABffr0MWrfs2cPGGM4fPgw7SPhlJAAcGAuXLhg9DsAJSUlaN++vcl/EAntKS8vx7Bhw+Dq6oqDBw+atZs4cSLc3d0NRFz1NzubN29WI1XCDFlZWdi/f7/R1blzZzz77LPYv38/oqKiAABvvfUWWrdujYKCAmH8Dz/8IBQmhHZcuXIFjDG89957Bu1jxoyBq6ur8Fge7aF9884776BBgwZGv6b+l7/8BfXq1aN9JJwWEgAOTkBAgPDJRlBQEPr16wdXV1ej51oJ+2Dq1KlgjGHo0KHYvXu30VVNYmIimjdvDj8/P6xbtw5Lly5Fs2bN8NJLL9Hz/3aKqR8Ci4iIgJubm8GvjzZs2FA48pXQlgkTJoAxhr/97W/YuHEjAgICwBjDrFmzBBvaQ/um+rc4WrZsiYULF2Ljxo0YMmQIGGP4+OOPBTvaR8LZIAHg4Oh0OkybNg3e3t5wc3ND7969ceTIEa3TIswwYMAAi4+O6BMdHY1BgwbBw8MDTZs2xfvvv4/09HSNMiesYUoAAMCZM2fQr18/NGzYEC1atMDkyZMNPoUktKO0tBQLFiyAr68v6tevj/bt25s8PY320L65ePEihgwZAm9vb9SvXx8dOnTAkiVLUFZWZmBH+0g4EyQACIIgCIIgCMKJIAFAEARBEARBEE4ECQCCIAiCIAiCcCJIABAEQRAEQRCEE0ECgCAIgiAIgiCcCBIABEEQBEEQBOFEkAAgCIIgCIIgCCeCBABBEARBEARBOBEkAAiCIAiCIAjCiSABQBAEQRAEQRBOBAkAgiAIgiAIgnAiSAAQBEEQBEEQhBNBAoAgCIIgCIIgnAgSAARBEHbKzp07wRjDvXv3tE5FdbSee1lZGRYvXoy2bdvC3d0dr732Gm7duiV6/IoVK9CxY0dUVFQY+Jw7dy5at26N5s2b44svvkBlZSUAYPPmzfDx8UFJSQn3uRAEQdSGBABBEHWOqKgojBo1Cs8++yzc3NzQpk0bvPHGG1i3bp0i8cLCwjB//nzk5uZK6pOL1kWwlvCee3h4OCZPnoxOnTrBw8MDPj4+CAgIMFnUl5eXY+jQoWjevDkWL16M1atX46mnnkKHDh1QVlZmNVZ+fj68vLywY8cOg/bPPvsMI0aMQE5ODnJycvDSSy9hz549AACdTodWrVph7dq1XOZLEARhCRIABEHUKcLCwtCgQQO0b98eixYtwrZt2zBv3jwMGjQIfn5+isT89ttvzRajlvrkUl5eDp1OJ3xK7EzwFgCjRo2Ct7c3pkyZgm3btmHRokVo1aoVGjVqhOvXrxvYLl++HB4eHoiOjhbafvzxRzDGEBoaajXWmjVr4OnpCZ1OJ7QlJSWhadOmyMvLE9pmzJiBGTNmGPzZ19fXKfebIAh1IQFAEESd4u2330aLFi1MfuKekZGhSEwtBEBRURFXf3UN3gIgLCwMjx49MmiLi4uDm5sb3n//faEtLy8Pnp6emD17toHtvXv3wBjDd999ZzVWly5dMHbsWIO2H3/8EYMHDzZo+/jjj7Fq1Srhz5cvXwZjDMePHxc9L4IgCFsgAUAQRJ2iY8eO+POf/yzKNjk5GRMmTEDr1q3RoEEDtG3bFhMnThQKwfv372PSpEno0KEDGjZsCC8vL/z1r381KDrnz58PxpjRde/ePYt91fE//PBDtGzZEg0aNECnTp2wfft2ozyr/dy4cQNjxoxB06ZN0a1bN5NFcLVtfHw8PvjgAzRp0gSenp4YP348iouLjXyfPHkSPXv2hJubG9q1a4ctW7YIPiwhZm1syUlsPqbmLnY9pdCjRw/06NFD+PPGjRvxxBNP4P79+wZ2ycnJYIxh/vz5Fv3dvXsXjDH885//NGhft24d3n33XeHPpaWl8PHxQVhYmIGdl5cXPvvsMxtnQxAEIQ4SAARB1CkGDRqEJ5980uixjdqkpKSgTZs28PDwwOeff44tW7bg66+/xgsvvCB8e7B371507doV8+bNw9atWzF79mw0a9YMvr6+QuF67do1jBkzBowxrFmzBrt378bu3btRVFRksS89PR3PPPMMfHx8sHDhQmzevBnDhg0TbPWpLoA7deqE4cOHY9OmTdi4caNFAdC9e3eMHDkSmzZtwscffwzGmMHjJABw5coVuLm5oW3btli+fDmWLFmCNm3aoGvXrlYFgJi1kZqTlHxqz13KeoqlsrISTz/9NAYNGiS0DRw4EJ07d0ZWVpbBdf78eTDGsHLlSos+//Wvf4ExhqioKIP2sLAwtG7dGsnJycjNzcWHH36IoUOHGo1/44030LNnT5vmQxAEIRYSAARB1CmOHj0KFxcXuLi4wN/fHzNmzEBISAhKS0sN7MaNG4d69erh0qVLRj6qn7F++PChUV91obdr1y6hzZZHgD766CO0bt0a2dnZBu2jR49GkyZNDGJXF9BjxowxsLUkACZMmGBgO2LECDRv3tygbejQofDw8EBKSorQFh8fD1dXV6sCQOzaSMlJSj615y5lPcWye/duMMaEbxHKy8vRqFEjk9/qVF979+616HPu3LlgjKGwsNCo75tvvkGLFi3g5eWFTz/91ORjXp988gnc3d0lz4UgCEIKJAAIgqhzhIeHY8SIEfDw8BAKsxYtWuC3334DAFRUVMDT0xPDhw8X7bO0tBTZ2dnIyspC06ZN8fnnnwt9UgVAZWUlmjZtik8++cTok+Tqwvbs2bOCfXUBferUKQPflgRAeHi4ge3q1avBGEN+fj6AqmLW3d0d7733nlHOQ4cOtSoAxK6N2Jyk5qM/d6nrKYaYmBh4enrC398f5eXlAIBbt24J31qEhoYaXNXf9Fg7CnTSpElwdXWVlIs+gYGBYIyZfJyLIAiCFyQACIKoszx69Ajh4eGYNWsWGjZsiPr16+PGjRtIT08HYwxz5syxOP7hw4f4+uuv8cwzz+CJJ54w+KT3ww8/FOykCoCMjAyLnyIzxrBv3z7BvrqATkxMNPBtSQCkp6ebtK1+dj01NRWMMcybN88o5y+++ELUNwBi1kZsTlLz0Z+71PW0RlpaGtq1awcfHx+DbyNCQkLAGMOhQ4eMxgwcOBCtWrWy6luuAJgxYwYYYzZ9o0EQBCEWEgAEQTgE1QXjggULRAuAjz76CPXq1cOXX36JvXv34ujRowgNDUXz5s3xwQcfCHZSBUBaWhoYYxg7dqzRJ8nVl/6JRdUFdFZWlsk5mRIA1mzlCgCxayM2JzkCQOp6WiIvLw/dunWDl5cXbty4YdC3b98+k9/E5OXloUGDBpg4caJV/9WPABUUFIjKpzb/+7//Cw8PD5vGEgRBiIUEAEEQDsH169fBGMOnn34q+hGgJk2aGH2ardPp4OLiYlDkfvfdd2YFgKm+8vJyPPnkk0bP9JtDCQFQXl6Ohg0b2vwIkNi1EZuT1Hxqj5WynubQ6XTo378/PDw8cO7cOaP+0NBQMMZw8OBBg/a1a9eCMYZr165ZjVH9ErAYW1PQS8AEQagBCQCCIOoUJ06cMPlDSStWrABjDKtXrwYg7iVgLy8vjB8/3qBv5cqVYIwZFLmbN28GYwyRkZFGvsz1jR8/Hg0aNDB5WlFmZqbBn5UQAADwzjvv2PwSsNi1kZKTlHxqj5WynqYoLy/HsGHD4OrqalTgV5ORkYF69eph2rRpQltSUhKeeuopjBs3zmoMALhz547Bi8VS8fLywpQpU2waSxAEIRYSAARB1Ck6d+6M5557Dl9++SW2bt2KDRs24L333oOLiwvatm0rHPGZnJwMb29v4RjQoKAgLFiwAJ07dxZsxo0bBxcXF0ydOhVBQUEYP348nnnmGaPHXMLDw8EYw9tvv41du3bhp59+Ek5wMdeXnp4OX19feHh4CP6XLVuGgIAANGvWzGBOSgmAy5cvC79/sGLFCixduhRt2rRBt27drAoAsWsjJScp+Zg6BlTseppi6tSpYIxh6NChwnGt+lc1I0eORP369TFv3jysWrUKPj4+6Nq1q/BytRhefPFFm76tqP4hsGPHjkkeSxAEIQUSAARB1CkOHz6MCRMm4E9/+hMaN26MBg0aoH379pgyZYrRc+AJCQkYN24cWrRoIfzw1OTJk4UfAqs+j/2pp55C48aNMXjwYMTGxsLX19eoyF20aBGefvpp1KtXz6jQNteXkZGByZMnw8fHB/Xr14e3tzcGDhyIrVu3GvhWSgAAwPHjx9G9e3c0aNAAfn5++OGHH/DVV1+hYcOGFtdZytpIyUlsPqbGil1PUwwYMMDiS8TV5OTkYOTIkWjUqBFatWqFKVOmSH6ef/Xq1WjcuLHkF3kDAwPx7LPPmvyGiyAIgickAAiCIJyM4cOHo3379lqnIWBv+cglLy8PXl5e+OGHH0SPKSkpgbe3N77//nsFMyMIgqiCBABBEIQDU/tT6Li4ONSvXx8ff/wx5aMgy5cvR8eOHVFRUSHKfvPmzfDx8UFJSYnCmREEQZAAIAiCcGi8vb0xc+ZMbN26FXPmzIGXlxcaNWqEuLg4yocgCMJJIQFAEAThwIwfPx6+vr5wc3ODp6cnBg8ejIiICMqHIAjCiSEBQBAEQRAEQRBOBAkAgiAIgiAIgnAiSAAQBEEQBEEQhBNBAoAgCIIgCIIgnAgSAARBEARBEAThRJAAIAiCIAiCIAgnggQAQRAEQRAEQTgR/w98xwix1YCuVQAAAABJRU5ErkJggg==\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXxU5d3//ysLCWvCbkjBSAIiYBGFSMEFN1wqbpW0oCIotwvuxQCitlEpSsBbXIqCLaVWq3dv+/MGaysCVsSKCPWLKPumArK7ACIQJnn//ogzZZhJMnNlZq5ZXs/H4zx4MHPOnJMzn8Dnfc51zjECAAAAkDKM6w0AAAAAEDsEAAAAACCFEAAAAACAFEIAAAAAAFIIAQAAAABIIQQAAAAAIIUQAAAAAIAUQgAAAAAAUggBAAAAAEghBAAAAAAghRAAAAAAgBRCAAAAAABSCAEAAAAASCEEAAAAACCFEAAAAACAFEIAAAAAAFIIAQAAAABIIQQAAAAAIIUQAAAAAIAUQgAAAAAAUggBAAAAAEghBAAAAAAghRAAAAAAgBRCAAAAAABSCAEAAAAASCEEAAAAACCFEAAAAACAFEIAAAAAAFIIAQAAAABIIQQAAAAAIIUQAAAAAIAUQgAAAAAAUggBAAAAAEghBAAAAAAghRAAAAAAgBRCAAAAAABSCAEAAAAASCEEAAAAACCFEAAAAACAFEIAAAAAAFIIAQAAAABIIQQAAAAAIIUQAAAAAIAUQgAAImjmzJkyxmjmzJkxW6cxRv3794/Z+oC6PPXUU+ratasaNmwoY4ymTJniepOsDBs2TMYYffbZZ643pV62b9+u66+/Xj/60Y+Unp4uY4y++eYb68/77LPPZIzRsGHDIreRSaB///4yhrYKiYFKRUIzxvhN6enpatWqlc4991z9+c9/jvn2EACiZ+fOnbrnnnvUqVMnNWzYUHl5eTr//PP1u9/9zvWm4SivvPKKjDE69dRTdd9996msrEwffPCB680KqqysTMYYvfPOO0HfT5YAcNFFFyktLU3XXHONfv3rX6usrEwHDx6sdZna/l0hAARHAEAioVKR0LyNf1lZmcrKynT//ffrZz/7mTIyMmSM0S9/+cuYbg8BIDq+//57de7cWcYYnXLKKbr33nt18803q1evXjrhhBNcbx6Ocu2118oYoy+//NL1ptSprgCwbds2rV69WhUVFbHdsAg6fPiw0tPTNWDAgLCWIwCEjwCAREKlIqF5A8Cx5s+fr7S0NKWlpcX06B0BIDpmz54tY4zOPPNMVVZW+r2XCI1mKjn33HMTpgmqKwAkgy+++MKqWScAhI8AgERCpSKh1RQAJKlr164yxuh///d//V5fvHixrr76ah133HFq0KCB2rdvr5tvvjloI/nvf/9bd911l3r06KEWLVooOztbnTp10qhRo/T1118HzF9TAPj666911llnKS0tTY8++midP9fhw4f11FNP6dRTT1Xz5s3VqFEjFRQU6PLLL9e8efMC9kH//v21e/du3XTTTcrLy1NWVpa6deumP/zhD0E/+5lnntEll1yi448/XllZWWrRooXOP/98/eMf/wi6PQUFBSooKNC3336r22+/Xfn5+crOzlbXrl311FNPqaqqKuhy4ezr2vz973+XMUa33XZbWMuF4uWXX9Y555yj3NxcZWdn66STTtL48eN16NChgHm9+3r79u0aMWKE8vPzlZ6e7vu+vUNGNm7cqKefflo//vGP1bBhQ79GqrKyUs8995x69+6tJk2aqHHjxurdu7eeffbZgHATyjprYvM9L1++XIMHD1ZBQYGysrLUunVrnXrqqbr77rvrPArubaaDTVLdTWOw5umdd97xneFbtmyZfvrTnyo3N1eNGjXS2Wefrffffz/oZ3k8Hj333HPq16+fcnJy1LBhQxUVFWnEiBFat26dpOqarm17pdqHAP3lL3/RWWed5fv8k08+WY8++mjQuvH+/nz33XcqLS1Vhw4dlJWVpaKiIk2cOLHG35+arFu3TkOHDlV+fr4aNGigdu3aaejQob6f7ej1Bvv5amvcvf+GBZvKysok+X+Xn332mX7xi1+oVatWys7OVq9evfS3v/2txs8P5/etJmvXrtXYsWPVq1cvtW7dWllZWTr++ON10003acuWLQHz29bRtm3bNHz4cLVp00YNGzbUKaecoj/+8Y9+n3e02gLAnDlzdMkll6hVq1bKyspSYWGhSktL63UtBlAfBAAktNoCwEknnSRjjF599VXfazNmzFBGRoYaN26swYMHa/To0bryyiuVnp6udu3a6YsvvvD7jFtuuUVt27ZVSUmJRo0apXvuuUdnnXWWjDHq2rWr9u3b5zd/sADwxRdfqGvXrmrQoIFefPHFkH6uIUOGyBijk08+WXfddZfGjh2roUOHqmPHjrr33nsD9sEpp5yiE088USeffLLuuOMO3XTTTWrevLmMMfrjH//oN//27duVnp6uM888UyNGjNB9992nYcOGqWXLljLGBB1TX1BQoHbt2ql3796+AHTHHXeoXbt2NTbm4e7r2hw5ckSnn366cnNztWrVqpCXq8sNN9wgY4zat2+vG2+8UaNGjVK/fv1kjNE555yjI0eO+M1vjNGPf/xjFRQUqHv37rrjjjt01113+Rpqb8M4cOBA5ebm6pprrtHYsWN1//33+z7jmmuukTFGHTp00N1336177rnH16hdc801AdtY1zprEu73vHz5cjVs2FCNGjXSL37xC91333267bbbdOGFF6pBgwbav39/ret75513VFZW5vtZvMPygjWNwdQWAC699FI1atRI5513nu69916VlJQoPT1dDRs21Jo1a/yWOXz4sAYMGODbx7feeqvGjBmjn//852rZsqXvd3PKlCm+dQ4bNixge6WaA8C4ceNkjFHr1q116623qrS0VN27d/eFtcOHD/vNX1BQoPz8fJ1xxhnq2LGjbr75Zt12223Kz8+XMUYPPfRQrfv2aEuWLFFOTo7S0tJ0xRVXaNy4cbrqqquUlpamnJwcLVmyxDfvlClTdPfdd/v+jfD+fP/3f/9X4+cvW7bMF+YKCgr89ov3TIn3uzznnHPUpk0b9enTR/fcc4+uv/56ZWdnKz09Xf/85z8DPjvc37eaPPbYY8rNzdWVV16pO++8U/fee68uvvhipaWlKS8vT1u3bvWb36aOdu7c6avls88+W/fdd5+GDx+uxo0b68orrwwrADz00EMyxqhly5a6/vrrVVpaqgsvvFDGGHXr1k179+4N6ecGIokAgIRWUwCYN2+ebwjQ559/Lqn6qFGDBg1UVFQU8B/E/PnzlZ6eriuvvNLv9c8//1wejyfg83//+9/LGKOJEyf6vX5sAPj444/Vrl075eTkBBy5r8m3336rtLQ09erVK+i69+zZ4/d37z4YMWKE3/wrV65URkaGunbt6jf/oUOHgh4l+/bbb9W9e3e1aNFC33//vd973v8IzzjjDL8jdV999ZUKCwtljNG7777re91mX9dm9+7dvkbhuOOO0/Lly0Netibe7+qqq64K+Hm9DdCTTz7p97p3Xw8dOjRos+JtGPPz87Vp06aA919++WXfBbJHN9TfffedevXqJWNMwMXrda2zJuF+z6NGjZIxRrNmzQpY5uuvvw56diKYmpqg+gSAYGfVpk2bJmOMRo4c6fe6tzm/7LLLAo4qHzp0SLt27fL93eYi4EWLFvnCxfbt232vHzlyRAMHDpQxRhMmTPD7HO/vzyWXXOK3z3fu3Knc3Fzl5uaGdJ1BVVWV78DGSy+95Pfe//zP/8gYoy5duvh9V7bDdUIZAhQsvMyZM8f3sx7N5vetJlu3bg16xuCtt95Senq6br31Vr/XberoxhtvlDFGY8aM8Xv9448/VlZWVsgB4J///KeMMerbt2/A0X7vPrnnnntC+bGBiCIAIKEdfWraexHw1VdfHfQi4HvuuUfGGL3xxhtBP+vKK69URkZGwFH9YKqqqpSTk6Nzzz3X7/WjA8DcuXPVrFkz5efn6+OPPw75Z9q7d6+MMerXr19IQwOMMWrcuHHQo0hnn322jDF1Hr31+u///u+AZl76TwOzcOHCgGW8P/Pw4cN9r0VyXx84cEA9evRQ06ZN9de//lWdO3dW8+bN9d577wXM27lzZ+Xk5NT5mZLUs2dPZWZmBj0F7/F41KpVKxUXF/u9boxRVlaWdu7cGfQzvQ1jTY3MBRdcIGOM3nrrrYD35s+fL2NMQE3VtU4bwb5nbwAItm3hiEYAOOOMMwLmr6ioUGZmpnr16uV7zePx+IZ2hDLMzCYA/Nd//ZeMMZo+fXrA/GvXrlV6ero6duzo97r392f9+vUBy1x//fUyxujTTz+tc3v/9a9/+ZrJYM4888yA7zWaAaCgoCDoQYrjjz9erVq18nvN5vfNxo9//OOA/R9uHR0+fFiNGjVSbm5u0H+jvDUQSgDwni1YsWJF0O3t2bOn2rRpE+qPB0QMAQAJzRsAvFNaWppatGihc845J2C4TZ8+fWSM0ejRo/1Oa3sn7xHmf//7375lKioq9Mwzz+iMM85QixYtfPfQ9k4nnnii3zq8zfCll16qBg0aqFu3bmENdfG67LLLZIxRjx499PDDD+uf//ynDhw4UOM+OOWUU4K+570jy+bNm/1eX7FihYYNG6aOHTv67tV+9PTyyy/7zV9QUKDMzMyg/9l7m4Gjt8FmX9fkgQcekDFG06ZNk1R99K9Tp05q1KiR31jjQ4cOKTs7W+edd16dn3ngwAGlpaWpTZs2QbevrKxM+fn5atq0qd9ywb7zo3kbxkWLFgV9v2XLlkpPTw8YIiJVH0HOyMhQ8+bNw1pnbcL5nj/88ENlZGSoUaNGGjp0qF544QVt2LAh7HVGIwDcfffdQZf50Y9+pMLCQr+f1xijPn36hLStNgHgtNNOq7GZl6qbX2OMvv32W99rBQUFys3NDTq/t76DhetjPf300zLG6IEHHgj6/q9//euAABrNAHDFFVcEff+MM85Qenq67++2v281qaqq0osvvqjzzz9frVu39h3w8U5ZWVl+84dbR5988omMMTrrrLOCzv/HP/4x5ADgvf6ppp+7W7duMsYEnNkFoo0AgITm/Qc/FJ06dQpogIJNCxYs8C1z1VVXyRijwsJCDR8+3Hdf87KyMuXm5qqgoMBvHd4A4B1nfcMNN4R9gZ9UfdvLsrIy360vjTFq2LChrrvuOu3YsSNgH9T0H3WwBuaDDz5Qo0aN1KBBA1188cW6++679atf/UplZWW64oorgp4mLygoUF5eXtB1HDx4UMYYv9tx2uzrmpxwwgnKysryO+W/detWFRUVKTMzUy+88IIkadasWX5BoTZbt24NafuOrS1jqscD18S7v4MN/5GkjIwMtW7dusbljzvuOKWlpYW1zprYfM+LFi3yjZP2/vxdunQJCIS1iUYAOLbR8vJeXOvlPUL+s5/9LKRttQkARUVFMsbou+++C7qMN/x6hx4G285wtuFo48ePlzFGv/3tb4O+/9xzz8kY/2E50QwAoX6Xtr9vNfGeYWzXrp2uvfZajRkzxvfvsvdsy9HCraP33ntPxhgNGjQo6PxvvvlmyAEgMzMzpJ/76HoBYoEAgIQWzn8a3jHWoV5wtXTpUhljdMEFFwSMva6srPTdmedo3gAwbdo0XX755TKmemhMqOOng9m8ebNeeukl3/CRM8880+/9cAPApZdeWmPD8eijj9YYAMI5AxDuvq5NVlZWwHACSdqyZYsKCwuVlpamxx9/XMXFxcrLy6vzAUeStH//fhlTPRY/HLXta6nuB0d5zwAEG+/tPQNw7JHiutZZE5vv2evQoUN6//339atf/cp3MXmo17DUFAC8t6O89tprgy53yimn1Ltxi+UZgJrOjnjPABw91CVSAcB7BuDBBx8M+r73DMDRT16OhwBg+/sWzM6dO5Wenq6TTz456PCcE088sd51tHz5chkTmTMArVq1UosWLer+wYAYIwAgoYUTAG6//XYZU/O49GN5n2j69NNPB7z3wQcfyBhTYwCYOXOmKioqVFJSImOMhgwZEtYFnMFUVlb6jqwffbo43ADQpUsXtWzZMuj8F110UY0BwJjQrwEId1/XxvsferAx0ps3b/ZdhGyM0V/+8peQP7d79+7KysrSV199FfIy9Q0A559/vowxmj9/fsB7b7/9towJfg2ATQCw+Z6D+dOf/iRjjO64446Q1ltTANi3b1+NZzP27t3rO+twtHAbN4/H47ttbijXADzyyCM1fh9S8O9zxIgRMsbo97//fcD869evr/EagEgEAO+R6WMPAnh571AWiWsAvHeQCsbmbI7N71sw3n97R40aFfDeli1bfEfcjxZuHUXyGgBvEK/pGgDAFQIAElo4AWD16tVq0KCBOnfurLVr1wa8f/jwYb8G1/sfzbHDCXbu3Ok7ClhbAJCqG5LrrrvO9zmh3Olj165d+uSTTwJe37dvn/Ly8pSZmen3n1K4AcDb/B17Jx3vnY1qCwDB7gLkHRJxdNMR7r6uTXl5uYwx6tmzZ0BjffjwYd18882+7T76yGddZsyYIWOqxzEHuzDx66+/1kcffeT3Wn0DwJ///GcZY1RcXOx3TceBAwdUXFwsYwLv7mIbAML9nt9///2Au7NI0uTJk2VM4N1QalLbvdBPOukkZWRkaOXKlb7XPB6Pr6mub+MmSffff7+MCX4XoMOHD/vdBWjq1KkyxgR9XoYU/Pt8//33ZUz1kLejP8vj8fiGVv3mN7+pczu9wgkAVVVV6tKli4zxv72xJL366qsypvp6kUjcBahNmzY1brNNALD5fQtm+/btMsbo9NNP9zsjuX//fl188cURq6Phw4cHrftw7wLkvbi/b9++QUPpd999pw8++KCOnxqIPAIAElo4AUCSXnzxRTVo0ECZmZkaOHCgRo0apTvvvFNXXHGFWrZsqS5duvjm9Xg8OuOMM3z/eI8ePVrXX3+92rRpozPPPFP5+fl1BgCp+si994jRwIED63zgzbJly2RM9b3fr732Wt/92L1DC+66666AfRBOAPCOX23WrJlGjBihUaNG6eyzz1Z6eroGDRpUYwA49jkAd955Z63PAQhnX9fmyJEjvu1q1KiRSkpKdN999/keiuU9+5CXl6e0tLSA22jW5rbbbpMx1ddsDBkyRGPHjtVNN92kCy64QFlZWbrlllv85q9vAJCkn//8574G8p577tEvf/lLdezYUcYY/eIXvwiY3zYAhPs9X3HFFWrWrJl++tOf6vbbb9fYsWM1cOBAZWRkqEWLFiFfEFxbAPA2gc2bN9dNN92kO++8UyeffLK6dOkSkSFAUnWT7z3Tcvzxx+u2227T2LFjdc0116h169Z+P/OqVauUnp6u4447TqNGjdL48eM1fvx43/s1fZ9jxoyRMUZt27bVbbfdptGjR+vkk0/2HZ0P9hyASAQAqfrhes2aNVN6erquuuoqjRs3Tj/72c+Unp6uZs2aafHixX7z2waAwYMH+/7N+vWvf63x48f7Qr5NAJDC/32ra9tOPvlkjRo1SiNGjNDxxx+vE088UT179oxIHe3YscP3b27//v01bty4gOcAPPzwwyH93BMnTlRaWpoaN26sQYMGafTo0Ro5cqR++tOfqkmTJrroootC+rmBSCIAIKGFGwCk6js8DBs2zO/pqN27d9fNN9+st99+22/er776SiNHjlRBQYGys7NVWFiocePG6cCBA0H/06jpScBVVVW64447ZIzRhRdeGPRIq9c333yjhx9+WOeee67y8/OVlZWlvLw89e/fXy+//HLARcXhBgBJ+tvf/qY+ffqoadOmys3N1YABA/Tuu+/WuP3en/Xbb7/1PcAoKytLJ510Uq1PAg5nX9flpZde0rnnnqvc3FzfU4WHDBnie4rnhx9+6Lvo9c033wz5c//2t7/p0ksvVZs2bdSgQQMdd9xxKi4u1gMPPKDVq1f7zRuJAFBZWampU6eqV69eatSokRo1aqTTTjtNv/3tb2t9ErCNcL7nt956S8OHD1fXrl2Vk5Ojxo0b68QTT9Sdd94Z1gWKtQUAqfoMRLdu3ZSVlaXjjjtON998s/bs2RORi4C9jhw5omeeeUbFxcW+py136tRJN910U8Dde1588UWdcsopfndJ8qrt+3zllVd0xhlnqGnTpsrOzla3bt30m9/8Jug1KJEMAJK0Zs0aXXfddb4zgnl5ebr22msDHmYl2QeAnTt3asiQIWrbtq3v7mfe78E2AEjh/b7V5MCBA7r//vtVVFSk7OxstW/fXrfddlvE62jr1q26/vrr1bp1a78nAXvPthx7xrG2n/u9995TSUmJ2rVrpwYNGqh169Y65ZRT9Mtf/lJLly4N6ecGIokAAKBOtTUwAJBKvMPM5syZ43pTAGsEAAB1IgAASDXBxux/8sknatq0qVq2bBnSHceAeEUAAFAnAgCAVNOuXTudddZZGjlypEpLS3XFFVcoMzNT6enpYV1rBMQjAgCAOhEAAKSahx56SD179lTz5s2VkZGhVq1a6dJLLw3reg0gXhEAAAAAgBRCAAAAAABSCAEAAAAASCEEAAAAACCFEAAAAACAFEIAcOibb77RrFmz9NFHH2nFihVMTExMTExMTExhTB999JFmzZqlb775xnVbl1AIAA7NmjXL9+h5JiYmJiYmJiYmu2nWrFmu27qEQgBw6KOPPvIVresEzcTExMTExMSUaJP3YOpHH33kuq1LKAQAh1asWCFjjFasWOF6UwAAABIOvZQdAoBDFC0AAIA9eik7BACHKFoAAAB79FJ2CAAOUbQAAAD26KXsEAAcomgBAADs0UvZIQA4FErRVlVVaf/+/fryyy+1adMmbdy4kSkBpk2bNmnXrl06cuRIDCsKAIDUQgCwQwBwqK6iraqq0o4dO7Rq1SqtWrVK69evd97YMoU2rV27VqtWrdLnn3+uqqqqGFcWAACpgQBghwDgUF1Fu3//fl8Tefjw4RhvHeqjqqpKX375pVatWqW9e/e63hwAAJISAcAOAcChuorW20DS/CemI0eOaNWqVdqyZYvrTQEAICkRAOwQAByqq2g3bdqk9evXx3irEEnr1q3Tpk2bXG8GAABJiQBghwDgUF1F6x1PjsS1YcMGvkMAAKKEAGCHAOAQASD58R0CABA9BAA7BACHCADJj+8QAIDoIQDYIQA4RABIfnyHAABEDwHADgHAoVQPADNnzpQxJug0duxYde3aVT169AhY7rXXXpMxRmeffXbAezNmzJAxRm+99ZbfOpYuXRp0G/r376/u3bv7vVZQUCBjjM4///ygyzz//PO+7azpc72S/TsEAMAlAoAdAoBDLgNAhadSizbs0ZufbtOiDXtU4amMynpq423OH3nkEb344ot+07Jly3TTTTcpPT1d3377rd9y9957rzIzM9WoUSNVVFT4vXfjjTcqIyND+/bt81tHuAGgYcOGSk9P1/bt24Mu07BhQwIAAACOEQDsEAAcchEAKjyVemr+OvUaP1cFY9/wTb3Hz9NT89fFNAjU1Zy/8MILMsboH//4h9/rP/nJT3TNNdfIGKMPPvjA770TTzxRp556asjrqCkAnH/++crJydGTTz7p996WLVuUnp6uq6++mgAAAIBjBAA7BACHYh0AKjyVGv6HD1Uw9g2dcFTzf/Tfb5i5JGYhoK7mfOPGjTLG6IEH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lpamIUOGWG0zRQsAAGCPXspOUgSADz/8UMYYTZ482ffawYMHVVRUpL59+9a6bHl5uYwxWrJkie+11atXKyMjQ+PGjatz3XfccYeMMdq+fXvY203RAgAA2KOXspMUAWD06NHKyMjQ3r17/V5/9NFHZYzR5s2ba1y2uLhYxcXFAa9feOGFKioqqnPdjz/+uIwxWr16ddjbTdECAADYo5eykxQB4IILLlDXrl0DXp8/f76MMXr99deDLldZWans7GyNHDky4L0HH3xQxhjt27fP7/XDhw9r9+7d2rx5s1577TXl5eWpoKBAR44cCXu7KVoAAAB79FJ2kiIAdO/eXeedd17A6ytXrpQxRtOmTQu63O7du2WM0SOPPBLw3tSpU2WM0Zo1a/xef+WVV2SM8U29e/fWJ598Uuc27ty5UytWrPCbZs2aRdECAABYIgDYSYoAUFhYqEsuuSTg9Y0bN8oYoylTpgRdbvPmzTLGqLy8POC9GTNmyBijZcuW+b2+Y8cOzZs3T6+++qpuvfVW9e3bVx988EGd21hWVuYXHI6eKFoAAIDwEQDsJEUAiOUZgGNNmDBBTZs2rfMiYM4AAAAARBYBwE5SBIBYXgNwrLVr19YaMmpD0QIAANijl7KTFAGgtLQ06F2AJkyYUOddgHr37h30LkADBgxQYWFhnev++OOPaxxGVBeKFgAAwB69lJ2kCACLFy8OeA7AoUOH1KlTJ/Xp08f32hdffBFwu86JEyfKGKOlS5f6XluzZo0yMjI0duxY32u7d+9WVVVVwLq9zwF4++23w95uihYAAMAevZSdpAgAklRSUqLMzEyNHj1a06dPV79+/ZSZmal3333XN0///v1ljP+PvG/fPhUVFalt27aaNGmSpkyZog4dOig/P1+7du3yzTdlyhR16dJFY8eO1fTp0/X4449rwIABMsbosssus9pmihYAAMAevZSdpAkABw8eVGlpqfLy8pSdna3i4mLNmTPHb55gAUCStmzZokGDBiknJ0dNmzbVwIEDtX79er95li5dqpKSEh1//PHKzs5WkyZNdNppp+mJJ56wegaARNECAADUB72UnaQJAImIogUAALBHL2WHAOAQRQsAAGCPXsoOAcAhihYAAMAevZQdAoBDFC0AAIA9eik7BACHKFoAAAB79FJ2CAAOUbQAAAD26KXsEAAcomgBAADs0UvZ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XieddJKys7PVqVMnPf3009bbTNECAABrmxaGdvTfO21a6HqLI45eyk7SBIDBgwcrMzNTpaWlmj59uvr27avMzEy99957tS63f/9+de7cWW3btlV5ebmeeOIJdejQQe3bt9eePXv85p02bZqMMbr66qv1/PPPa+jQoTLGaOLEiVbbTNECAABrK2eHFwBWzna9xRFHL2UnKQLAhx9+KGOMJk+e7Hvt4MGDKioqUt++fWtdtry8XMYYLVmyxPfa6tWrlZGRoXHjxvle+/7779WqVStdeumlfstfe+21atKkib7++uuwt5uiBQAA1jgDQC9lKSkCwOjRo5WRkaG9e/f6vf7oo4/KGKPNmzfXuGxxcbGKi4sDXr/wwgtVVFTk+/vf//53GWP097//3W++RYsWyRijF198MeztpmgBAIA1rgGgl7KUFAHgggsuUNeuXQNenz9/vowxev3114MuV1lZqezsbI0cOTLgvQcffFDGGO3bt0+S9Jvf/EbGGO3cudNvvsOHDys9PV2jRo0Ke7spWgBRlYIPBQJSDncBopeykBQBoHv37jrvvPMCXl+5cqWMMZo2bVrQ5Xbv3i1jjB555JGA96ZOnSpjjNasWSNJuv3225WRkRH0c9q0aaPBgwfXuo07d+7UihUr/KZZs2ZRtAAiL4UfCgSkHE9F9X3+eQ6A601JKEkRAAoLC3XJJZcEvL5x40YZYzRlypSgy23evFnGGJWXlwe8N2PGDBljtGzZMknSjTfeqEaNGgX9nA4dOuiKK66odRvLyspkjAk6UbRADSJ1BDsSn+PyaHo4607xhwLVijMiSFaeiuoj/JM7BQn9k5K61gkAdpIiAHAGAKineGuMInUEOxKf4/Jous26E3E4gE39hRuKOCOCVBBv/5bHAAHATlIEAK4BQMqI9D/u8dgYReoIdiQ+x+XRdJt1J9oFgTb1F+4y9fkOU7CZAhINvZSdpAgApaWlQe8CNGHChDrvAtS7d++gdwEaMGCACgsLfX9/4403gt4F6P3335cxRn/605/C3m6KNglFq2GIRqMer0NFInUEOxKf4/Jous26E+mWgLYBJ9xlbPZjPAZjAEHRS9lJigCwePHigOcAHDp0SJ06dVKfPn18r33xxRdavXq137ITJ06UMUZLly71vbZmzRplZGRo7Nixvte+//57tWzZUgMHDvRb/rrrrlPj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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16876\n",
      "1336 54\n"
     ]
    }
   ],
   "source": [
    "add_module(ds_names[8],\n",
    "           264,\n",
    "           302,\n",
    "           322)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(goniometers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02 7.2310e-01 3.2054e-02 3.9849e-03 1.0948e-05 -8.2800e+01 9.9942e-01 1.7027e+01\n",
      "data_03 7.2068e-01 3.3678e-02 4.0580e-03 -4.4486e-05 -7.7200e+01 9.9897e-01 1.7027e+01\n",
      "data_04 7.2069e-01 3.4825e-02 4.0432e-03 -3.3769e-05 -7.1600e+01 9.9898e-01 1.7027e+01\n",
      "data_05 7.2048e-01 3.3410e-02 3.9779e-03 1.5910e-05 -6.5800e+01 9.9900e-01 1.7027e+01\n",
      "data_07 7.2065e-01 3.2237e-02 3.9757e-03 1.7542e-05 -6.0000e+01 9.9901e-01 1.7027e+01\n",
      "data_08 7.2053e-01 3.3395e-02 3.9730e-03 1.9484e-05 -5.4400e+01 9.9903e-01 1.7027e+01\n",
      "data_09 7.2061e-01 3.2247e-02 3.9689e-03 2.2376e-05 -4.8600e+01 9.9904e-01 1.7027e+01\n",
      "data_10 7.2071e-01 3.0863e-02 3.9652e-03 2.5070e-05 -4.2800e+01 9.9905e-01 1.7027e+01\n",
      "data_11 7.2081e-01 3.2082e-02 3.9596e-03 2.9091e-05 -3.7200e+01 9.9906e-01 1.7027e+01\n",
      "data_12 7.2081e-01 3.2082e-02 3.9596e-03 2.9091e-05 -3.7200e+01 9.9906e-01 1.7027e+01\n"
     ]
    }
   ],
   "source": [
    "# print all the parameters to be able to compare them visually\n",
    "goniometers[\"data_12\"] = goniometers[\"data_11\"]\n",
    "for name in ds_names:\n",
    "    print(name, *[\"%8.4e\"%i for i in goniometers[name].param])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Use the negative part of the spectum ...\n",
    "\n",
    "Until now, we used only the data where 2th >0 \n",
    "For the last modules, this thows away half of the data.\n",
    "\n",
    "We setup here a way to assign the peaks for the negative part of the spectrum."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "def complete_gonio(module_id=None, name=None):\n",
    "    \"Scan missing frames for un-indexed peaks\"\n",
    "    if name is None:\n",
    "        name = ds_names[module_id]\n",
    "    gonioref = goniometers[name]\n",
    "    ds = data[name]\n",
    "    print(\"Number of peaks previously found:\",\n",
    "           sum([len(sg.geometry_refinement.data) for sg in gonioref.single_geometries.values()]))\n",
    "\n",
    "    tths = LaB6.get_2th()\n",
    "\n",
    "    for i in range(ds.shape[0]):\n",
    "        frame_name = \"%s_%04i\"%(name, i)\n",
    "        if frame_name in gonioref.single_geometries:\n",
    "                continue\n",
    "        peak = peak_picking(name, i)\n",
    "        ai=gonioref.get_ai(get_position(i))\n",
    "        tth = ai.array_from_unit(unit=\"2th_rad\", scale=False)\n",
    "        tth_low = tth[20]\n",
    "        tth_hi = tth[-20]\n",
    "        ttmin, ttmax = min(tth_low, tth_hi), max(tth_low, tth_hi)\n",
    "        valid_peaks = numpy.logical_and(ttmin<=tths, tths<ttmax)\n",
    "        cnt = valid_peaks.sum()\n",
    "        if (len(peak) ==  cnt) and cnt>0:    \n",
    "            cp = ControlPoints(calibrant=LaB6, wavelength=wl)\n",
    "            #revert the order of assignment if needed !!\n",
    "            if tth_hi < tth_low:\n",
    "                peak = peak[-1::-1]\n",
    "            for p, r in zip(peak, numpy.where(valid_peaks)[0]):\n",
    "                cp.append([p], ring=r)\n",
    "            img = ds[i].reshape((-1,1))\n",
    "            sg = gonioref.new_geometry(frame_name, \n",
    "                                        image=img, \n",
    "                                        metadata=i, \n",
    "                                        control_points=cp, \n",
    "                                        calibrant=LaB6)\n",
    "            sg.geometry_refinement.data = numpy.array(cp.getList())\n",
    "            #print(frame_name, len(sg.geometry_refinement.data))\n",
    "\n",
    "    print(\"Number of peaks found after re-scan:\",\n",
    "            sum([len(sg.geometry_refinement.data) for sg in gonioref.single_geometries.values()]))\n",
    "    return gonioref"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 454\n",
      "Number of peaks found after re-scan: 1006\n",
      "Cost function before refinement: 4.70706125439368e-09\n",
      "[ 7.20810790e-01  3.20817605e-02  3.95963325e-03  2.90908690e-05\n",
      " -3.71999988e+01  9.99058845e-01  1.70270825e+01]\n",
      "     fun: 9.802737682604375e-10\n",
      "     jac: array([-8.29338917e-07,  1.79786978e-08, -2.22576465e-07,  1.63791395e-07,\n",
      "       -1.37361011e-10, -3.00380388e-08,  3.83178298e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20813440e-01,  3.20849228e-02,  3.96153953e-03,  2.77060750e-05,\n",
      "       -3.71999988e+01,  9.98991349e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.802737682604375e-10\n",
      "GonioParam(dist=0.7208134400755615, poni1=0.03208492277691861, poni2=0.003961539527372513, rot1=2.770607503862905e-05, offset=-37.19999878574453, scale=0.9989913487191389, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9990588449954669 --> 0.9989913487191389\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20813440e-01,  3.20849228e-02,  3.96153953e-03,  2.77060750e-05,\n",
       "       -3.71999988e+01,  9.98991349e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio8 = complete_gonio(module_id=8)\n",
    "gonio8.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 543\n",
      "Number of peaks found after re-scan: 1004\n"
     ]
    }
   ],
   "source": [
    "gonio7 = complete_gonio(module_id=7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 2.049750654664114e-09\n",
      "[ 7.20707163e-01  3.08633971e-02  3.96520588e-03  2.50699030e-05\n",
      " -4.27999030e+01  9.99050597e-01  1.70270825e+01]\n",
      "     fun: 6.982178014396509e-10\n",
      "     jac: array([-6.61610503e-07,  1.82061135e-08, -2.31096076e-07,  1.69227578e-07,\n",
      "       -1.05927128e-10, -2.98934004e-08,  2.67495021e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20709219e-01,  3.08662496e-02,  3.96669042e-03,  2.39916666e-05,\n",
      "       -4.27999029e+01,  9.99006679e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.982178014396509e-10\n",
      "GonioParam(dist=0.7207092190734912, poni1=0.030866249621701404, poni2=0.0039666904208374675, rot1=2.3991666571782472e-05, offset=-42.799902936952186, scale=0.9990066787571606, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.99905059684665 --> 0.9990066787571606\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20709219e-01,  3.08662496e-02,  3.96669042e-03,  2.39916666e-05,\n",
       "       -4.27999029e+01,  9.99006679e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio7.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 626\n",
      "Number of peaks found after re-scan: 990\n",
      "Cost function before refinement: 9.054048566564434e-10\n",
      "[ 7.20609298e-01  3.22472627e-02  3.96893520e-03  2.23757106e-05\n",
      " -4.85998857e+01  9.99040899e-01  1.70270825e+01]\n",
      "     fun: 6.093728642246349e-10\n",
      "     jac: array([-8.02155920e-07,  3.63691515e-08, -2.33166253e-07,  1.71261021e-07,\n",
      "        1.53140861e-10, -6.90587253e-08,  3.30203031e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20611756e-01,  3.22490408e-02,  3.97006720e-03,  2.15500507e-05,\n",
      "       -4.85998856e+01,  9.99018033e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.093728642246349e-10\n",
      "GonioParam(dist=0.7206117564391414, poni1=0.03224904075932756, poni2=0.003970067202282311, rot1=2.1550050733043843e-05, offset=-48.599885636781195, scale=0.9990180333619139, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9990408988314912 --> 0.9990180333619139\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20611756e-01,  3.22490408e-02,  3.97006720e-03,  2.15500507e-05,\n",
       "       -4.85998856e+01,  9.99018033e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio6 = complete_gonio(module_id=6)\n",
    "gonio6.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 754\n",
      "Number of peaks found after re-scan: 1038\n",
      "Cost function before refinement: 5.322312447273672e-10\n",
      "[ 7.20528271e-01  3.33948197e-02  3.97295090e-03  1.94838596e-05\n",
      " -5.43998157e+01  9.99025942e-01  1.70270825e+01]\n",
      "     fun: 5.247814297615004e-10\n",
      "     jac: array([-6.54781369e-07,  1.29256630e-07, -1.62656541e-07,  1.19840950e-07,\n",
      "        1.28911966e-09, -2.77499652e-07,  2.46511989e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20530687e-01,  3.33953448e-02,  3.97363667e-03,  1.89799990e-05,\n",
      "       -5.43998157e+01,  9.99021890e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 5.247814297615004e-10\n",
      "GonioParam(dist=0.7205306865337416, poni1=0.033395344810677706, poni2=0.0039736366657854355, rot1=1.8979998986411344e-05, offset=-54.39981565735447, scale=0.999021890228638, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.999025941539747 --> 0.999021890228638\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20530687e-01,  3.33953448e-02,  3.97363667e-03,  1.89799990e-05,\n",
       "       -5.43998157e+01,  9.99021890e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio5 = complete_gonio(module_id=5)\n",
    "gonio5.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 864\n",
      "Number of peaks found after re-scan: 1081\n",
      "Cost function before refinement: 4.522981580650044e-10\n",
      "[ 7.20645314e-01  3.22371238e-02  3.97565133e-03  1.75424155e-05\n",
      " -6.00000524e+01  9.99011856e-01  1.70270825e+01]\n",
      "     fun: 4.329968320302878e-10\n",
      "     jac: array([-3.23619143e-07, -1.33810126e-08, -8.07893403e-08,  5.95277891e-08,\n",
      "       -4.92710775e-10,  3.16598865e-08,  5.83323419e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20646423e-01,  3.22359951e-02,  3.97581932e-03,  1.74168753e-05,\n",
      "       -6.00000525e+01,  9.99019702e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 4.329968320302878e-10\n",
      "GonioParam(dist=0.7206464234341815, poni1=0.032235995133433754, poni2=0.0039758193176266145, rot1=1.7416875286579755e-05, offset=-60.00005245067518, scale=0.9990197021796172, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.999011855791219 --> 0.9990197021796172\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20646423e-01,  3.22359951e-02,  3.97581932e-03,  1.74168753e-05,\n",
       "       -6.00000525e+01,  9.99019702e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio4 = complete_gonio(module_id=4)\n",
    "gonio4.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 978\n",
      "Number of peaks found after re-scan: 1156\n",
      "Cost function before refinement: 7.053238687700532e-10\n",
      "[ 7.20482931e-01  3.34099564e-02  3.97791142e-03  1.59099880e-05\n",
      " -6.57999266e+01  9.98999110e-01  1.70270825e+01]\n",
      "     fun: 6.316819601296489e-10\n",
      "     jac: array([-4.99814708e-07, -1.63155748e-08,  9.67096626e-09, -4.95315009e-09,\n",
      "       -5.75364555e-10,  3.90058487e-08,  1.04654441e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20484799e-01,  3.34074959e-02,  3.97770054e-03,  1.60543912e-05,\n",
      "       -6.57999266e+01,  9.99015617e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.316819601296489e-10\n",
      "GonioParam(dist=0.7204847991260711, poni1=0.03340749593129299, poni2=0.003977700542249465, rot1=1.605439120863723e-05, offset=-65.79992658922357, scale=0.9990156171464057, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9989991098968561 --> 0.9990156171464057\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20484799e-01,  3.34074959e-02,  3.97770054e-03,  1.60543912e-05,\n",
       "       -6.57999266e+01,  9.99015617e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio3 = complete_gonio(module_id=3)\n",
    "gonio3.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 1093\n",
      "Number of peaks found after re-scan: 1229\n",
      "Cost function before refinement: 8.306533586355894e-10\n",
      "[ 7.20686437e-01  3.48247495e-02  4.04316666e-03 -3.37686772e-05\n",
      " -7.15999088e+01  9.98982863e-01  1.70270825e+01]\n",
      "     fun: 7.771891010372871e-10\n",
      "     jac: array([ 9.15257278e-08, -1.05189468e-09,  5.61627546e-08, -4.08345480e-08,\n",
      "       -4.25668376e-10,  2.85157377e-09,  1.17395008e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20686041e-01,  3.48226304e-02,  4.04289725e-03, -3.35729680e-05,\n",
      "       -7.15999088e+01,  9.98998235e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 7.771891010372871e-10\n",
      "GonioParam(dist=0.7206860412873665, poni1=0.0348226304357366, poni2=0.004042897251336869, rot1=-3.357296798617952e-05, offset=-71.59990883821092, scale=0.9989982349992665, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9989828627069963 --> 0.9989982349992665\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20686041e-01,  3.48226304e-02,  4.04289725e-03, -3.35729680e-05,\n",
       "       -7.15999088e+01,  9.98998235e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio2 = complete_gonio(module_id=2)\n",
    "gonio2.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 1183\n",
      "Number of peaks found after re-scan: 1285\n",
      "Cost function before refinement: 9.822658405373417e-10\n",
      "[ 7.20682081e-01  3.36782425e-02  4.05801126e-03 -4.44860018e-05\n",
      " -7.71999788e+01  9.98967223e-01  1.70270825e+01]\n",
      "     fun: 9.683803822381625e-10\n",
      "     jac: array([ 1.05204414e-07, -1.40910812e-09, -2.64455137e-09,  1.49411766e-09,\n",
      "       -3.43193224e-10,  4.36284460e-09,  1.50605559e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20681597e-01,  3.36766788e-02,  4.05808287e-03, -4.45357208e-05,\n",
      "       -7.71999788e+01,  9.98975895e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.683803822381625e-10\n",
      "GonioParam(dist=0.7206815966774245, poni1=0.03367667883450645, poni2=0.004058082874451283, rot1=-4.4535720801764846e-05, offset=-77.19997881123506, scale=0.9989758952763078, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9989672227193093 --> 0.9989758952763078\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20681597e-01,  3.36766788e-02,  4.05808287e-03, -4.45357208e-05,\n",
       "       -7.71999788e+01,  9.98975895e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio1 = complete_gonio(module_id=1)\n",
    "gonio1.refine2()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 1203\n",
      "Number of peaks found after re-scan: 1255\n",
      "Cost function before refinement: 2.580092692155849e-06\n",
      "[ 7.23096248e-01  3.20537111e-02  3.98485468e-03  1.09479202e-05\n",
      " -8.27999440e+01  9.99415047e-01  1.70270825e+01]\n",
      "     fun: 2.5799877551962334e-06\n",
      "     jac: array([-1.43881863e-07,  3.61314392e-08,  5.52834337e-07, -3.99174581e-07,\n",
      "        1.01925934e-09, -1.14581923e-07, -1.57262758e-06])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 37\n",
      "     nit: 4\n",
      "    njev: 4\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.23096999e-01,  3.20658547e-02,  3.98130190e-03,  1.35139061e-05,\n",
      "       -8.27999438e+01,  9.99396229e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 2.5799877551962334e-06\n",
      "GonioParam(dist=0.7230969991414224, poni1=0.03206585469442816, poni2=0.003981301898312368, rot1=1.351390607705048e-05, offset=-82.79994383949249, scale=0.9993962290572798, nrj=17.027082549190933)\n",
      "maxdelta on: scale (5) 0.9994150470263444 --> 0.9993962290572798\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.23096999e-01,  3.20658547e-02,  3.98130190e-03,  1.35139061e-05,\n",
       "       -8.27999438e+01,  9.99396229e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gonio0 = complete_gonio(module_id=0)\n",
    "gonio0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of peaks previously found: 0\n",
      "Number of peaks found after re-scan: 1250\n",
      "Cost function before refinement: 9.454138761636617e-07\n",
      "[ 7.23096999e-01  3.20658547e-02  3.98130190e-03  1.35139061e-05\n",
      " -8.27999438e+01  9.99396229e-01  1.70270825e+01]\n",
      "     fun: 9.315197221462237e-07\n",
      "     jac: array([-1.20646249e-08, -1.14537357e-08,  1.03723337e-07, -7.48339701e-08,\n",
      "        1.34221523e-10, -9.52891099e-09, -5.30292098e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 82\n",
      "     nit: 9\n",
      "    njev: 9\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.21973759e-01,  3.22003255e-02,  3.94381184e-03,  4.51413618e-05,\n",
      "       -8.27999423e+01,  9.99140776e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.315197221462237e-07\n",
      "GonioParam(dist=0.7219737589812981, poni1=0.03220032545666352, poni2=0.003943811844450548, rot1=4.5141361782464955e-05, offset=-82.79994226310926, scale=0.9991407764529461, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7230969991414224 --> 0.7219737589812981\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.21973759e-01,  3.22003255e-02,  3.94381184e-03,  4.51413618e-05,\n",
       "       -8.27999423e+01,  9.99140776e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Rescan module0 which looks much different:\n",
    "gonio0.single_geometries.clear()\n",
    "gonio0 = complete_gonio(module_id=0)\n",
    "gonio0.refine2()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Discard wronly assigned peaks\n",
    "\n",
    "We have seen previously that some modules have a much higher residual error, while all have almost the same number of peaks recorded and fitted.\n",
    "\n",
    "Some frames are contributing much more than all the other in those badly-fitted data. \n",
    "Let's spot them and re-assign them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_02_0455 6.313051349592421e-07\n",
      "data_02_0464 6.523630272471416e-07\n",
      "data_02_0465 6.891655641669719e-07\n",
      "data_02_0457 7.370430556294668e-07\n",
      "data_02_0456 7.376242032882277e-07\n",
      "data_02_0460 7.45857621330519e-07\n",
      "data_02_0466 7.67143438989774e-07\n",
      "data_02_0461 7.935716411266278e-07\n",
      "data_02_0462 7.971563845471846e-07\n",
      "data_02_0480 0.001130766003993148\n"
     ]
    }
   ],
   "source": [
    "#search for mis-assigned peaks in module #0\n",
    "labels = []\n",
    "errors = []\n",
    "\n",
    "for lbl,sg in gonio0.single_geometries.items():\n",
    "    labels.append(lbl)\n",
    "    errors.append(sg.geometry_refinement.chi2())\n",
    "\n",
    "s = numpy.argsort(errors)\n",
    "for i in s[-10:]:\n",
    "    print(labels[i], errors[i])\n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ControlPoints instance containing 4 group of point:\n",
      "LaB6 Calibrant with 109 reflections at wavelength 7.281587849134994e-11\n",
      "Containing 4 groups of points:\n",
      "#psg ring 52: 1 points\n",
      "#psh ring 53: 1 points\n",
      "#psi ring 54: 1 points\n",
      "#psj ring 55: 1 points\n",
      "Cost function before refinement: 8.041228082228945e-09\n",
      "[ 7.21973759e-01  3.22003255e-02  3.94381184e-03  4.51413618e-05\n",
      " -8.27999423e+01  9.99140776e-01  1.70270825e+01]\n",
      "     fun: 9.214430277838577e-10\n",
      "     jac: array([-3.08678332e-08, -3.82866689e-08, -1.82877549e-07,  1.31905635e-07,\n",
      "       -8.44315805e-10, -1.61540448e-08,  1.38174042e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 82\n",
      "     nit: 9\n",
      "    njev: 9\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20595797e-01,  3.22844186e-02,  4.04252687e-03, -2.05352660e-05,\n",
      "       -8.27999410e+01,  9.98975164e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.214430277838577e-10\n",
      "GonioParam(dist=0.720595797367119, poni1=0.03228441857336863, poni2=0.0040425268658778706, rot1=-2.0535266006967913e-05, offset=-82.79994103917592, scale=0.9989751641349021, nrj=17.027082549190933)\n",
      "maxdelta on: dist (0) 0.7219737589812981 --> 0.720595797367119\n",
      "Number of peaks previously found: 1246\n",
      "Number of peaks found after re-scan: 1263\n",
      "Cost function before refinement: 9.385263673786183e-10\n",
      "[ 7.20595797e-01  3.22844186e-02  4.04252687e-03 -2.05352660e-05\n",
      " -8.27999410e+01  9.98975164e-01  1.70270825e+01]\n",
      "     fun: 9.382286239666452e-10\n",
      "     jac: array([-2.66626459e-08, -1.46606972e-06, -1.81711541e-07,  1.31048747e-07,\n",
      "       -1.88137349e-08, -4.38931502e-08,  2.40047863e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 11\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20595804e-01,  3.22848040e-02,  4.04257464e-03, -2.05697223e-05,\n",
      "       -8.27999410e+01,  9.98975176e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.382286239666452e-10\n",
      "GonioParam(dist=0.7205958043774563, poni1=0.032284804043109315, poni2=0.00404257464280098, rot1=-2.0569722299120257e-05, offset=-82.79994103422928, scale=0.9989751756756091, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03228441857336863 --> 0.032284804043109315\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20595804e-01,  3.22848040e-02,  4.04257464e-03, -2.05697223e-05,\n",
       "       -8.27999410e+01,  9.98975176e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#remove wrongly assigned peak for frame 480\n",
    "print(gonio0.single_geometries.pop(\"data_02_0480\").control_points)\n",
    "gonio0.refine2()\n",
    "gonio0 = complete_gonio(module_id=0)\n",
    "\n",
    "gonio0.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data_11_0495 1.4653542984471542e-06 1.4653542984471542e-06 1.0\n",
      "data_11_0496 1.4360982661347142e-06 1.4653542984471542e-06 1.0203718874970744\n",
      "data_11_0499 1.4166548534532985e-06 1.4360982661347142e-06 1.0137248763409235\n",
      "data_11_0497 1.4084572221561037e-06 1.4166548534532985e-06 1.0058202912862668\n",
      "data_11_0498 1.3833016059917487e-06 1.4084572221561037e-06 1.0181851998547489\n",
      "data_11_0500 1.3709107012975464e-06 1.3833016059917487e-06 1.0090384477139718\n",
      "data_11_0492 1.3295890859461896e-06 1.3709107012975464e-06 1.0310784856675854\n",
      "data_11_0489 1.3287700089647162e-06 1.3295890859461896e-06 1.0006164174205825\n",
      "data_11_0491 1.3216144771699174e-06 1.3287700089647162e-06 1.0054142353298985\n",
      "data_11_0490 1.301822888645974e-06 1.3216144771699174e-06 1.015202980909737\n",
      "data_11_0494 1.2865582016523121e-06 1.301822888645974e-06 1.0118647465571768\n",
      "data_11_0493 1.2861450147452866e-06 1.2865582016523121e-06 1.0003212599685793\n",
      "data_11_0483 1.2244483499124188e-06 1.2861450147452866e-06 1.0503873151017604\n",
      "data_11_0486 1.207372827265345e-06 1.2244483499124188e-06 1.0141427090799693\n",
      "data_11_0485 1.201809830402108e-06 1.207372827265345e-06 1.0046288495255324\n",
      "data_11_0484 1.1994812838848202e-06 1.201809830402108e-06 1.0019412945817263\n",
      "data_11_0487 1.1764652443222126e-06 1.1994812838848202e-06 1.019563722493024\n",
      "data_11_0477 1.1389594650443204e-06 1.1764652443222126e-06 1.0329298631153943\n",
      "data_11_0478 1.1156745972945301e-06 1.1389594650443204e-06 1.0208706622936967\n",
      "data_11_0481 1.1104824081112956e-06 1.1156745972945301e-06 1.0046756158812686\n",
      "data_11_0479 1.1057757403752895e-06 1.1104824081112956e-06 1.0042564396777314\n",
      "data_11_0480 1.1002412230846842e-06 1.1057757403752895e-06 1.0050302762471384\n",
      "data_11_0482 8.673291356185134e-07 1.1002412230846842e-06 1.26853944817624\n",
      "Cost function before refinement: 1.059476333549205e-09\n",
      "[ 7.20813440e-01  3.20849228e-02  3.96153953e-03  2.77060750e-05\n",
      " -3.71999988e+01  9.98991349e-01  1.70270825e+01]\n",
      "     fun: 1.0589449037804424e-09\n",
      "     jac: array([-8.45058784e-07, -1.25301789e-06, -2.51805109e-07,  1.84923760e-07,\n",
      "       -1.61392479e-08,  9.17399903e-08,  8.34009091e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 11\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20813810e-01,  3.20854710e-02,  3.96164970e-03,  2.76251683e-05,\n",
      "       -3.71999988e+01,  9.98991309e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 1.0589449037804424e-09\n",
      "GonioParam(dist=0.7208138098008553, poni1=0.032085470990150605, poni2=0.00396164969570614, rot1=2.762516825116013e-05, offset=-37.19999877868338, scale=0.9989913085815821, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.03208492277691861 --> 0.032085470990150605\n",
      "Number of peaks previously found: 918\n",
      "Number of peaks found after re-scan: 1006\n",
      "Cost function before refinement: 9.804599649789273e-10\n",
      "[ 7.20813810e-01  3.20854710e-02  3.96164970e-03  2.76251683e-05\n",
      " -3.71999988e+01  9.98991309e-01  1.70270825e+01]\n",
      "     fun: 9.798014434813442e-10\n",
      "     jac: array([-8.28830624e-07,  2.04374424e-06, -2.22646167e-07,  1.63839575e-07,\n",
      "        2.53636863e-08,  1.00410517e-06,  4.36574660e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 11\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20813997e-01,  3.20850099e-02,  3.96169993e-03,  2.75882029e-05,\n",
      "       -3.71999988e+01,  9.98991082e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 9.798014434813442e-10\n",
      "GonioParam(dist=0.7208139968009581, poni1=0.032085009882209824, poni2=0.0039616999289563675, rot1=2.7588202897190342e-05, offset=-37.19999878440591, scale=0.9989910820361755, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.032085470990150605 --> 0.032085009882209824\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20813997e-01,  3.20850099e-02,  3.96169993e-03,  2.75882029e-05,\n",
       "       -3.71999988e+01,  9.98991082e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def search_outliers(module_id=None, name=None, threshold=1.2):\n",
    "    \"Search for wrongly assigned peaks\"\n",
    "    if name is None:\n",
    "        name = ds_names[module_id]\n",
    "    gonioref = goniometers[name]\n",
    "    labels = []\n",
    "    errors = []\n",
    "\n",
    "    for lbl,sg in gonioref.single_geometries.items():\n",
    "        labels.append(lbl)\n",
    "        errors.append(sg.geometry_refinement.chi2())\n",
    "    s = numpy.argsort(errors)\n",
    "    last = errors[s[-1]]\n",
    "    to_remove = []\n",
    "    for i in s[-1::-1]:\n",
    "        lbl = labels[i]\n",
    "        current = errors[i]\n",
    "        print(lbl , current, last, last/current)\n",
    "        if threshold*current<last:\n",
    "            break\n",
    "        last=current\n",
    "        to_remove.append(lbl)\n",
    "    return to_remove\n",
    "\n",
    "\n",
    "        \n",
    "for lbl in search_outliers(8):\n",
    "    gonio8.single_geometries.pop(lbl)\n",
    "gonio8.refine2()\n",
    "gonio8 = complete_gonio(module_id=8)\n",
    "gonio8.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.982178014396509e-10\n",
      "data_10_0292 4.478307386585731e-06 4.478307386585731e-06 1.0\n",
      "data_10_0291 4.441611877573707e-06 4.478307386585731e-06 1.0082617549717265\n",
      "data_10_0288 4.42110785615644e-06 4.441611877573707e-06 1.0046377564367075\n",
      "data_10_0285 4.41519072824658e-06 4.42110785615644e-06 1.0013401749265336\n",
      "data_10_0290 4.411402144902852e-06 4.41519072824658e-06 1.0008588161358412\n",
      "data_10_0289 4.40449960049467e-06 4.411402144902852e-06 1.001567157460386\n",
      "data_10_0284 4.3863439763980785e-06 4.40449960049467e-06 1.004139124563482\n",
      "data_10_0275 4.376867017048265e-06 4.3863439763980785e-06 1.0021652381287574\n",
      "data_10_0286 4.374938577698873e-06 4.376867017048265e-06 1.0004407923254561\n",
      "data_10_0283 4.360023596330053e-06 4.374938577698873e-06 1.0034208487727851\n",
      "data_10_0281 4.358112634515273e-06 4.360023596330053e-06 1.000438483805959\n",
      "data_10_0282 4.355265304875879e-06 4.358112634515273e-06 1.0006537672082128\n",
      "data_10_0278 4.352327511323348e-06 4.355265304875879e-06 1.0006749936774948\n",
      "data_10_0280 4.35154401569245e-06 4.352327511323348e-06 1.000180050030075\n",
      "data_10_0277 4.349860479592271e-06 4.35154401569245e-06 1.0003870322066828\n",
      "data_10_0276 4.339663932302855e-06 4.349860479592271e-06 1.0023496168017796\n",
      "data_10_0279 4.33808469320417e-06 4.339663932302855e-06 1.0003640406332222\n",
      "data_10_0274 4.337318248584353e-06 4.33808469320417e-06 1.000176709334176\n",
      "data_10_0287 4.319683506474051e-06 4.337318248584353e-06 1.0040824153167407\n",
      "data_10_0496 1.9508464721227965e-06 4.319683506474051e-06 2.2142611262349234\n",
      "Cost function before refinement: 6.590257595658292e-10\n",
      "[ 7.20709219e-01  3.08662496e-02  3.96669042e-03  2.39916666e-05\n",
      " -4.27999029e+01  9.99006679e-01  1.70270825e+01]\n",
      "     fun: 6.580251686582122e-10\n",
      "     jac: array([-6.41067336e-07,  7.99913209e-09, -1.44533165e-07,  1.06757288e-07,\n",
      "       -2.37724944e-10, -3.75138453e-07,  6.15574400e-09])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20709357e-01,  3.08656493e-02,  3.96672263e-03,  2.39678916e-05,\n",
      "       -4.27999029e+01,  9.99006434e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.580251686582122e-10\n",
      "GonioParam(dist=0.720709357471267, poni1=0.030865649336609666, poni2=0.003966722633045513, rot1=2.3967891595469488e-05, offset=-42.79990294443424, scale=0.999006433638064, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.030866249621701404 --> 0.030865649336609666\n",
      "Number of peaks previously found: 985\n",
      "Number of peaks found after re-scan: 1004\n",
      "Cost function before refinement: 6.991420234285395e-10\n",
      "[ 7.20709357e-01  3.08656493e-02  3.96672263e-03  2.39678916e-05\n",
      " -4.27999029e+01  9.99006434e-01  1.70270825e+01]\n",
      "     fun: 6.980031455333567e-10\n",
      "     jac: array([-6.60879262e-07,  1.52170131e-07, -2.32103327e-07,  1.69950571e-07,\n",
      "        1.58023172e-09,  9.61263490e-08,  3.00039453e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 19\n",
      "     nit: 2\n",
      "    njev: 2\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20709502e-01,  3.08662430e-02,  3.96677226e-03,  2.39315396e-05,\n",
      "       -4.27999029e+01,  9.99006765e-01,  1.70270825e+01])\n",
      "Cost function after refinement: 6.980031455333567e-10\n",
      "GonioParam(dist=0.7207095017700934, poni1=0.03086624296585714, poni2=0.003966772262865057, rot1=2.393153960923883e-05, offset=-42.79990293688988, scale=0.9990067647525397, nrj=17.027082549190933)\n",
      "maxdelta on: poni1 (1) 0.030865649336609666 --> 0.03086624296585714\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20709502e-01,  3.08662430e-02,  3.96677226e-03,  2.39315396e-05,\n",
       "       -4.27999029e+01,  9.99006765e-01,  1.70270825e+01])"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(gonio7.chi2())\n",
    "for lbl in search_outliers(7):\n",
    "    gonio7.single_geometries.pop(lbl)\n",
    "gonio7.refine2()\n",
    "gonio7 = complete_gonio(module_id=7)\n",
    "gonio7.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.382286239666452e-10\n",
      "data_02_0462 7.971563845471846e-07 7.971563845471846e-07 1.0\n",
      "data_02_0461 7.935716411266278e-07 7.971563845471846e-07 1.004517227222822\n",
      "data_02_0466 7.67143438989774e-07 7.935716411266278e-07 1.034450144254191\n",
      "data_02_0460 7.45857621330519e-07 7.67143438989774e-07 1.0285387144282092\n",
      "data_02_0456 7.376242032882277e-07 7.45857621330519e-07 1.0111620768483298\n",
      "data_02_0457 7.370430556294668e-07 7.376242032882277e-07 1.000788485359603\n",
      "data_02_0465 6.891655641669719e-07 7.370430556294668e-07 1.0694716827883974\n",
      "data_02_0464 6.523630272471416e-07 6.891655641669719e-07 1.056414197897037\n",
      "data_02_0455 6.313051349592421e-07 6.523630272471416e-07 1.0333561238801883\n",
      "data_02_0463 6.240813179531244e-07 6.313051349592421e-07 1.0115751213797115\n",
      "data_02_0459 6.163901121421231e-07 6.240813179531244e-07 1.0124778215281103\n",
      "data_02_0448 6.082027920092041e-07 6.163901121421231e-07 1.013461497119854\n",
      "data_02_0454 5.868929875551012e-07 6.082027920092041e-07 1.036309523040778\n",
      "data_02_0439 5.868112798407111e-07 5.868929875551012e-07 1.0001392401904958\n",
      "data_02_0435 5.859910233268107e-07 5.868112798407111e-07 1.0013997765857292\n",
      "data_02_0426 5.755884184129568e-07 5.859910233268107e-07 1.0180729920566098\n",
      "data_02_0458 5.724220421407079e-07 5.755884184129568e-07 1.0055315414836359\n",
      "data_02_0453 5.590340754134061e-07 5.724220421407079e-07 1.0239483911913623\n",
      "data_02_0434 5.570146124178882e-07 5.590340754134061e-07 1.0036255117020212\n",
      "data_02_0444 5.524804844432388e-07 5.570146124178882e-07 1.0082068563547881\n",
      "data_02_0430 5.489356696711307e-07 5.524804844432388e-07 1.0064576141940855\n",
      "data_02_0443 5.459478619353463e-07 5.489356696711307e-07 1.005472697933449\n",
      "data_02_0447 5.424219010224628e-07 5.459478619353463e-07 1.0065004029266464\n",
      "data_02_0468 5.360729258271283e-07 5.424219010224628e-07 1.0118434916024501\n",
      "data_02_0425 5.340453928849802e-07 5.360729258271283e-07 1.0037965554410928\n",
      "data_02_0467 5.066740382282769e-07 5.340453928849802e-07 1.0540216245387561\n",
      "data_02_0438 5.014377962589753e-07 5.066740382282769e-07 1.0104424556911487\n",
      "data_02_0429 4.994042990677361e-07 5.014377962589753e-07 1.0040718455869027\n",
      "data_02_0442 4.988918594371316e-07 4.994042990677361e-07 1.0010271557270602\n",
      "data_02_0421 4.887207364704953e-07 4.988918594371316e-07 1.020811727859332\n",
      "data_02_0452 4.818408313589759e-07 4.887207364704953e-07 1.0142783771398438\n",
      "data_02_0441 4.708090789077316e-07 4.818408313589759e-07 1.0234314777379352\n",
      "data_02_0433 4.6907543413049604e-07 4.708090789077316e-07 1.0036958762942876\n",
      "data_02_0437 4.6744164098782785e-07 4.6907543413049604e-07 1.0034951810010242\n",
      "data_02_0420 4.599765374239142e-07 4.6744164098782785e-07 1.0162293137943985\n",
      "data_02_0451 4.5329173383081183e-07 4.599765374239142e-07 1.0147472435391849\n",
      "data_02_0446 4.4537990827667195e-07 4.5329173383081183e-07 1.0177642174851431\n",
      "data_02_0428 4.424570034888956e-07 4.4537990827667195e-07 1.006606076442973\n",
      "data_02_0424 4.374993360555643e-07 4.424570034888956e-07 1.0113318284732244\n",
      "data_02_0432 4.3734600098152413e-07 4.374993360555643e-07 1.0003506035809087\n",
      "data_02_0436 4.331873497281146e-07 4.3734600098152413e-07 1.0096001216471804\n",
      "data_02_0450 4.2621140965589126e-07 4.331873497281146e-07 1.0163673236196455\n",
      "data_02_0445 4.1944505996655087e-07 4.2621140965589126e-07 1.016131670950851\n",
      "data_02_0427 4.184060457298792e-07 4.1944505996655087e-07 1.0024832677426043\n",
      "data_02_0423 4.1312003395546793e-07 4.184060457298792e-07 1.012795341159807\n",
      "data_02_0419 3.876880857648326e-07 4.1312003395546793e-07 1.06559899342912\n",
      "data_02_0408 3.542342460674882e-07 3.876880857648326e-07 1.0944398800193103\n",
      "data_02_0418 3.436569950091102e-07 3.542342460674882e-07 1.0307785123305802\n",
      "data_02_0412 3.4365083733233073e-07 3.436569950091102e-07 1.0000179184105218\n",
      "data_02_0398 3.357907683844476e-07 3.4365083733233073e-07 1.0234076385890518\n",
      "data_02_0389 3.271544614435567e-07 3.357907683844476e-07 1.0263982551324031\n",
      "data_02_0394 3.2138316313793743e-07 3.271544614435567e-07 1.0179576871708809\n",
      "data_02_0416 3.194683144152933e-07 3.2138316313793743e-07 1.0059938611631918\n",
      "data_02_0403 3.071333103624269e-07 3.194683144152933e-07 1.0401617266401704\n",
      "data_02_0411 3.0688042859822684e-07 3.071333103624269e-07 1.0008240400515445\n",
      "data_02_0407 3.0628793103577707e-07 3.0688042859822684e-07 1.0019344463245616\n",
      "data_02_0402 3.0490188744369036e-07 3.0628793103577707e-07 1.0045458675369554\n",
      "data_02_0393 2.980904108777663e-07 3.0490188744369036e-07 1.022850371287915\n",
      "data_02_0388 2.945092984652161e-07 2.980904108777663e-07 1.0121595903124707\n",
      "data_02_0397 2.920821886183787e-07 2.945092984652161e-07 1.0083096811151624\n",
      "data_02_0384 2.824639030221881e-07 2.920821886183787e-07 1.034051379639242\n",
      "data_02_0406 2.8172340654452183e-07 2.824639030221881e-07 1.0026284520933098\n",
      "data_02_0401 2.8153081654147476e-07 2.8172340654452183e-07 1.000684081428147\n",
      "data_02_0417 2.810860465158435e-07 2.8153081654147476e-07 1.0015823269463011\n",
      "data_02_0392 2.739808285543106e-07 2.810860465158435e-07 1.0259332669333994\n",
      "data_02_0410 2.7025873527903e-07 2.739808285543106e-07 1.0137723329143744\n",
      "data_02_0415 2.650180952687086e-07 2.7025873527903e-07 1.0197746497461155\n",
      "data_02_0405 2.6433948563352065e-07 2.650180952687086e-07 1.002567189814876\n",
      "data_02_0414 2.5775864796179354e-07 2.6433948563352065e-07 1.0255310063261294\n",
      "data_02_0396 2.5700799922953914e-07 2.5775864796179354e-07 1.0029207212791225\n",
      "data_02_0391 2.4851756352407427e-07 2.5700799922953914e-07 1.0341643286094844\n",
      "data_02_0387 2.4757346323797714e-07 2.4851756352407427e-07 1.0038134147083027\n",
      "data_02_0383 2.436319262841532e-07 2.4757346323797714e-07 1.016178244838186\n",
      "data_02_0400 2.411208711876606e-07 2.436319262841532e-07 1.0104140926669858\n",
      "data_02_0395 2.386282639357738e-07 2.411208711876606e-07 1.0104455658804845\n",
      "data_02_0399 2.307240689353976e-07 2.386282639357738e-07 1.0342582160450255\n",
      "data_02_0386 2.2832923413210657e-07 2.307240689353976e-07 1.0104885159028976\n",
      "data_02_0409 2.2099257445959475e-07 2.2832923413210657e-07 1.033198670545617\n",
      "data_02_0404 2.2006310772588735e-07 2.2099257445959475e-07 1.004223637225305\n",
      "data_02_0390 2.185528631262913e-07 2.2006310772588735e-07 1.0069102027673889\n",
      "data_02_0382 2.1738267272521252e-07 2.185528631262913e-07 1.0053830895830322\n",
      "data_02_0381 2.0686178374626022e-07 2.1738267272521252e-07 1.0508595100961586\n",
      "data_02_0413 2.0388171846465108e-07 2.0686178374626022e-07 1.014616638039206\n",
      "data_02_0385 2.014026959293881e-07 2.0388171846465108e-07 1.0123087852614054\n",
      "data_02_0360 1.9864831310383662e-07 2.014026959293881e-07 1.013865624039363\n",
      "data_02_0375 1.9263499624078313e-07 1.9864831310383662e-07 1.0312161184644622\n",
      "data_02_0370 1.9202965590739344e-07 1.9263499624078313e-07 1.003152327334699\n",
      "data_02_0365 1.9112544339834668e-07 1.9202965590739344e-07 1.0047309897257488\n",
      "data_02_0380 1.896068545228752e-07 1.9112544339834668e-07 1.0080091454462068\n",
      "data_02_0369 1.7565509702989891e-07 1.896068545228752e-07 1.0794270005760294\n",
      "data_02_0355 1.7104015084110744e-07 1.7565509702989891e-07 1.0269816541092662\n",
      "data_02_0374 1.699946080760567e-07 1.7104015084110744e-07 1.006150446634066\n",
      "data_02_0364 1.694066729270692e-07 1.699946080760567e-07 1.0034705548419607\n",
      "data_02_0350 1.6598878773796802e-07 1.694066729270692e-07 1.0205910606112547\n",
      "data_02_0363 1.5748085176203178e-07 1.6598878773796802e-07 1.0540252092920637\n",
      "data_02_0373 1.5391498398723758e-07 1.5748085176203178e-07 1.0231677753680557\n",
      "data_02_0354 1.5253285693309903e-07 1.5391498398723758e-07 1.0090611759454866\n",
      "data_02_0358 1.511161110628414e-07 1.5253285693309903e-07 1.0093752139351209\n",
      "data_02_0349 1.4524762167521378e-07 1.511161110628414e-07 1.0404033423745145\n",
      "data_02_0368 1.4209107029916782e-07 1.4524762167521378e-07 1.0222149876793802\n",
      "data_02_0359 1.3720480308760376e-07 1.4209107029916782e-07 1.0356129457687004\n",
      "data_02_0379 1.37066156653446e-07 1.3720480308760376e-07 1.0010115293048474\n",
      "data_02_0367 1.3261291173680126e-07 1.37066156653446e-07 1.033580779264414\n",
      "data_02_0378 1.3251823783043865e-07 1.3261291173680126e-07 1.000714421712155\n",
      "data_02_0362 1.282724946539807e-07 1.3251823783043865e-07 1.0330994044195598\n",
      "data_02_0372 1.2748563415571346e-07 1.282724946539807e-07 1.0061721503248449\n",
      "data_02_0344 1.2737953092948706e-07 1.2748563415571346e-07 1.000832969201976\n",
      "data_02_0353 1.2704886278297964e-07 1.2737953092948706e-07 1.0026026848195584\n",
      "data_02_0345 1.2601025966375946e-07 1.2704886278297964e-07 1.0082422107691196\n",
      "data_02_0343 1.2167382799218998e-07 1.2601025966375946e-07 1.0356398063834058\n",
      "data_02_0357 1.1836424233191197e-07 1.2167382799218998e-07 1.0279610260250507\n",
      "data_02_0348 1.1627425873642544e-07 1.1836424233191197e-07 1.0179746026179723\n",
      "data_02_0371 1.1505385901264026e-07 1.1627425873642544e-07 1.0106072037414329\n",
      "data_02_0366 1.1444835172079907e-07 1.1505385901264026e-07 1.0052906597844096\n",
      "data_02_0352 1.1166457889201498e-07 1.1444835172079907e-07 1.0249297750137591\n",
      "data_02_0356 1.1066756046305904e-07 1.1166457889201498e-07 1.0090091299092903\n",
      "data_02_0377 1.0535372743708623e-07 1.1066756046305904e-07 1.0504380163402007\n",
      "data_02_0351 1.0243849172311388e-07 1.0535372743708623e-07 1.0284584013776001\n",
      "data_02_0361 1.0153729138473774e-07 1.0243849172311388e-07 1.0088755601620432\n",
      "data_02_0347 1.0133967083838374e-07 1.0153729138473774e-07 1.001950080799741\n",
      "data_02_0376 9.832281368484997e-08 1.0133967083838374e-07 1.03068318572741\n",
      "data_02_0342 9.289884923302538e-08 9.832281368484997e-08 1.0583857011858053\n",
      "data_02_0329 9.160009106881351e-08 9.289884923302538e-08 1.014178568482385\n",
      "data_02_0346 9.116900169134509e-08 9.160009106881351e-08 1.0047284643845051\n",
      "data_02_0111 9.091539210337593e-08 9.116900169134509e-08 1.0027895121178247\n",
      "data_02_0074 9.069381193217852e-08 9.091539210337593e-08 1.0024431674717027\n",
      "data_02_0137 9.03293903149745e-08 9.069381193217852e-08 1.0040343637428892\n",
      "data_02_0095 8.74523334288432e-08 9.03293903149745e-08 1.0328985719800405\n",
      "data_02_0148 8.648891600653159e-08 8.74523334288432e-08 1.0111392010305558\n",
      "data_02_0125 8.424378155556433e-08 8.648891600653159e-08 1.026650447184478\n",
      "data_02_0334 8.326823915639806e-08 8.424378155556433e-08 1.011715660245126\n",
      "data_02_0112 8.320651139064705e-08 8.326823915639806e-08 1.00074186220188\n",
      "data_02_0075 8.138214185974406e-08 8.320651139064705e-08 1.022417320178758\n",
      "data_02_0126 8.103496124197184e-08 8.138214185974406e-08 1.0042843312621021\n",
      "data_02_0096 8.045245724801484e-08 8.103496124197184e-08 1.0072403505608447\n",
      "data_02_0076 8.031554364195923e-08 8.045245724801484e-08 1.0017046962499059\n",
      "data_02_0341 7.826151987085865e-08 8.031554364195923e-08 1.026245641210265\n",
      "data_02_0138 7.734375527363778e-08 7.826151987085865e-08 1.0118660465085239\n",
      "data_02_0313 7.682133122854972e-08 7.734375527363778e-08 1.00680050757691\n",
      "data_02_0097 7.680635206094798e-08 7.682133122854972e-08 1.0001950251144573\n",
      "data_02_0176 7.667712300125079e-08 7.680635206094798e-08 1.0016853665687884\n",
      "data_02_0328 7.592352186880232e-08 7.667712300125079e-08 1.0099257926120802\n",
      "data_02_0113 7.555625875837318e-08 7.592352186880232e-08 1.0048607900452515\n",
      "data_02_0327 7.544587994012269e-08 7.555625875837318e-08 1.0014630198274326\n",
      "data_02_0127 7.131617497589785e-08 7.544587994012269e-08 1.0579069890613246\n",
      "data_02_0312 6.911458700835583e-08 7.131617497589785e-08 1.0318541723656087\n",
      "data_02_0139 6.909281513713483e-08 6.911458700835583e-08 1.0003151104956105\n",
      "data_02_0340 6.902017219074813e-08 6.909281513713483e-08 1.0010524886287728\n",
      "data_02_0333 6.774003441754105e-08 6.902017219074813e-08 1.0188978022260289\n",
      "data_02_0307 6.766423353429927e-08 6.774003441754105e-08 1.001120250378708\n",
      "data_02_0185 6.763913389841048e-08 6.766423353429927e-08 1.0003710815683489\n",
      "data_02_0150 6.745605433758126e-08 6.763913389841048e-08 1.0027140567681738\n",
      "data_02_0177 6.735816862166664e-08 6.745605433758126e-08 1.0014532122520199\n",
      "data_02_0193 6.662196525645216e-08 6.735816862166664e-08 1.0110504600454304\n",
      "data_02_0208 6.626142349356137e-08 6.662196525645216e-08 1.0054412015903313\n",
      "data_02_0098 6.592232057059097e-08 6.626142349356137e-08 1.0051439773362845\n",
      "data_02_0302 6.58293955726229e-08 6.592232057059097e-08 1.0014116033902445\n",
      "data_02_0140 6.57617458135232e-08 6.58293955726229e-08 1.0010287099021296\n",
      "data_02_0077 6.529890651328317e-08 6.57617458135232e-08 1.0070880099676076\n",
      "data_02_0201 6.303178713082955e-08 6.529890651328317e-08 1.0359678740783276\n",
      "data_02_0114 6.24588267473577e-08 6.303178713082955e-08 1.0091734093211426\n",
      "data_02_0318 6.23915354946696e-08 6.24588267473577e-08 1.0010785317616337\n",
      "data_02_0178 6.168559077605915e-08 6.23915354946696e-08 1.0114442402144332\n",
      "data_02_0326 6.156183810355442e-08 6.168559077605915e-08 1.0020102173085956\n",
      "data_02_0215 6.154477086377611e-08 6.156183810355442e-08 1.0002773142143317\n",
      "data_02_0311 6.138443821108707e-08 6.154477086377611e-08 1.0026119429836222\n",
      "data_02_0099 6.072998722692139e-08 6.138443821108707e-08 1.0107764057601443\n",
      "data_02_0301 6.069678376201197e-08 6.072998722692139e-08 1.000547038291841\n",
      "data_02_0186 6.061842645466519e-08 6.069678376201197e-08 1.0012926318271456\n",
      "data_02_0078 6.05546756955427e-08 6.061842645466519e-08 1.0010527801262288\n",
      "data_02_0079 5.9490831431307015e-08 6.05546756955427e-08 1.0178824911106525\n",
      "data_02_0306 5.912412014746122e-08 5.9490831431307015e-08 1.0062023973114724\n",
      "data_02_0332 5.727287901213354e-08 5.912412014746122e-08 1.0323231722808188\n",
      "data_02_0141 5.719393063976436e-08 5.727287901213354e-08 1.001380362767274\n",
      "data_02_0115 5.7162314210649325e-08 5.719393063976436e-08 1.000553099179969\n",
      "data_02_0128 5.695517599620114e-08 5.7162314210649325e-08 1.0036368637410935\n",
      "data_02_0168 5.679691102721794e-08 5.695517599620114e-08 1.0027865066272241\n",
      "data_02_0100 5.6595898537117144e-08 5.679691102721794e-08 1.0035517147937667\n",
      "data_02_0216 5.525228959512556e-08 5.6595898537117144e-08 1.024317706140998\n",
      "data_02_0217 5.47644402484414e-08 5.525228959512556e-08 1.0089081408386722\n",
      "data_02_0278 5.440662246210061e-08 5.47644402484414e-08 1.0065767322092094\n",
      "data_02_0194 5.3362822837444934e-08 5.440662246210061e-08 1.0195604274503116\n",
      "data_02_0169 5.3331502269719944e-08 5.3362822837444934e-08 1.0005872808076282\n",
      "data_02_0325 5.306137939665337e-08 5.3331502269719944e-08 1.005090762361214\n",
      "data_02_0284 5.276534268889967e-08 5.306137939665337e-08 1.0056104384557703\n",
      "data_02_0151 5.236684455771947e-08 5.276534268889967e-08 1.007609741135748\n",
      "data_02_0116 5.2353104395197217e-08 5.236684455771947e-08 1.0002624517243244\n",
      "data_02_0129 5.1837121282096003e-08 5.2353104395197217e-08 1.009953930703313\n",
      "data_02_0209 5.183704252339118e-08 5.1837121282096003e-08 1.0000015193518186\n",
      "data_02_0101 5.166940982917213e-08 5.183704252339118e-08 1.0032443315062678\n",
      "data_02_0331 5.10784819468508e-08 5.166940982917213e-08 1.0115690181030872\n",
      "data_02_0117 5.101344618415161e-08 5.10784819468508e-08 1.001274874911693\n",
      "data_02_0170 4.9929536344196644e-08 5.101344618415161e-08 1.0217087904138118\n",
      "data_02_0202 4.9799913904246315e-08 4.9929536344196644e-08 1.0026028647398781\n",
      "data_02_0187 4.912196530061741e-08 4.9799913904246315e-08 1.0138013330590496\n",
      "data_02_0195 4.909538480270249e-08 4.912196530061741e-08 1.000541405226209\n",
      "data_02_0179 4.884846763021287e-08 4.909538480270249e-08 1.0050547577942222\n",
      "data_02_0152 4.873638547160228e-08 4.884846763021287e-08 1.0022997634626782\n",
      "data_02_0338 4.8632146045461504e-08 4.873638547160228e-08 1.0021434264086009\n",
      "data_02_0080 4.7763280379444634e-08 4.8632146045461504e-08 1.0181910802422773\n",
      "data_02_0300 4.730742686172498e-08 4.7763280379444634e-08 1.0096359820848442\n",
      "data_02_0289 4.716153229696035e-08 4.730742686172498e-08 1.0030935077309613\n",
      "data_02_0305 4.6948242098731506e-08 4.716153229696035e-08 1.0045430923223984\n",
      "data_02_0130 4.678355070538744e-08 4.6948242098731506e-08 1.003520284178112\n",
      "data_02_0317 4.676546738965695e-08 4.678355070538744e-08 1.0003866809579773\n",
      "data_02_0142 4.632745138531294e-08 4.676546738965695e-08 1.009454783098275\n",
      "data_02_0203 4.572488727574456e-08 4.632745138531294e-08 1.0131780337901022\n",
      "data_02_0180 4.515676608235293e-08 4.572488727574456e-08 1.0125810867934064\n",
      "data_02_0236 4.490529491814043e-08 4.515676608235293e-08 1.0056000336858029\n",
      "data_02_0210 4.4003898110153527e-08 4.490529491814043e-08 1.020484476300951\n",
      "data_02_0081 4.364487731859856e-08 4.4003898110153527e-08 1.0082259548797488\n",
      "data_02_0131 4.354469124643211e-08 4.364487731859856e-08 1.002300764325081\n",
      "data_02_0310 4.337805656983698e-08 4.354469124643211e-08 1.0038414509494415\n",
      "data_02_0153 4.3177978520711517e-08 4.337805656983698e-08 1.0046337984310565\n",
      "data_02_0339 4.314187273202065e-08 4.3177978520711517e-08 1.0008369082379696\n",
      "data_02_0196 4.237750464559882e-08 4.314187273202065e-08 1.0180371188160844\n",
      "data_02_0188 4.222868848388736e-08 4.237750464559882e-08 1.0035240536008654\n",
      "data_02_0229 4.208902026815251e-08 4.222868848388736e-08 1.0033184002584286\n",
      "data_02_0290 4.1538712914667085e-08 4.208902026815251e-08 1.0132480598187026\n",
      "data_02_0172 4.1159063517690975e-08 4.1538712914667085e-08 1.0092239561479073\n",
      "data_02_0102 4.110134448475783e-08 4.1159063517690975e-08 1.0014043100939083\n",
      "data_02_0330 4.090674876110997e-08 4.110134448475783e-08 1.0047570567092554\n",
      "data_02_0337 4.0521522816559524e-08 4.090674876110997e-08 1.0095066995950364\n",
      "data_02_0309 3.9743834361041264e-08 4.0521522816559524e-08 1.019567524573839\n",
      "data_02_0232 3.95881697490978e-08 3.9743834361041264e-08 1.0039320992339387\n",
      "data_02_0171 3.952375116045423e-08 3.95881697490978e-08 1.0016298703122093\n",
      "data_02_0230 3.9452258328963335e-08 3.952375116045423e-08 1.00181213533823\n",
      "data_02_0242 3.92165458923428e-08 3.9452258328963335e-08 1.0060105353813569\n",
      "data_02_0316 3.9097426632861917e-08 3.92165458923428e-08 1.0030467288959821\n",
      "data_02_0239 3.897250747507658e-08 3.9097426632861917e-08 1.003205314871393\n",
      "data_02_0237 3.875841552078056e-08 3.897250747507658e-08 1.005523754039461\n",
      "data_02_0299 3.8590389027237044e-08 3.875841552078056e-08 1.0043541020906765\n",
      "data_02_0324 3.826943275819106e-08 3.8590389027237044e-08 1.0083867527139474\n",
      "data_02_0249 3.810908415306902e-08 3.826943275819106e-08 1.0042076215864433\n",
      "data_02_0143 3.810734842935843e-08 3.810908415306902e-08 1.0000455482677786\n",
      "data_02_0118 3.8100868267354914e-08 3.810734842935843e-08 1.0001700791162564\n",
      "data_02_0189 3.800238507610693e-08 3.8100868267354914e-08 1.0025915002716475\n",
      "data_02_0082 3.7741970920329645e-08 3.800238507610693e-08 1.0068998557687143\n",
      "data_02_0238 3.7560067152157576e-08 3.7741970920329645e-08 1.0048430096632992\n",
      "data_02_0323 3.7514981288697336e-08 3.7560067152157576e-08 1.0012018095681103\n",
      "data_02_0181 3.706262245040685e-08 3.7514981288697336e-08 1.0122052571669957\n",
      "data_02_0231 3.682093806366573e-08 3.706262245040685e-08 1.0065637759234496\n",
      "data_02_0103 3.677818704763357e-08 3.682093806366573e-08 1.001162401397785\n",
      "data_02_0255 3.628478717876916e-08 3.677818704763357e-08 1.0135979816123355\n",
      "data_02_0204 3.6164805825293285e-08 3.628478717876916e-08 1.003317627476157\n",
      "data_02_0272 3.59921912272354e-08 3.6164805825293285e-08 1.0047958902243013\n",
      "data_02_0154 3.59388385340999e-08 3.59921912272354e-08 1.001484541385078\n",
      "data_02_0083 3.589470383774043e-08 3.59388385340999e-08 1.001229560120038\n",
      "data_02_0315 3.540817833102809e-08 3.589470383774043e-08 1.01374048396853\n",
      "data_02_0271 3.5405106755531584e-08 3.540817833102809e-08 1.0000867551542132\n",
      "data_02_0132 3.539125941837753e-08 3.5405106755531584e-08 1.0003912643229325\n",
      "data_02_0211 3.531821770801946e-08 3.539125941837753e-08 1.0020681029536063\n",
      "data_02_0283 3.508204848587925e-08 3.531821770801946e-08 1.0067319108299866\n",
      "data_02_0304 3.46937021763495e-08 3.508204848587925e-08 1.0111935678572375\n",
      "data_02_0266 3.438001280908393e-08 3.46937021763495e-08 1.009124178312775\n",
      "data_02_0282 3.424029328669515e-08 3.438001280908393e-08 1.0040805585752115\n",
      "data_02_0308 3.4026021582491746e-08 3.424029328669515e-08 1.0062972893755424\n",
      "data_02_0259 3.394370834991172e-08 3.4026021582491746e-08 1.002424992335295\n",
      "data_02_0119 3.39277719321542e-08 3.394370834991172e-08 1.0004697160128697\n",
      "data_02_0253 3.390653579404228e-08 3.39277719321542e-08 1.0006263140015517\n",
      "data_02_0197 3.38095060042918e-08 3.390653579404228e-08 1.002869896701187\n",
      "data_02_0251 3.3593072697069164e-08 3.38095060042918e-08 1.0064427957863324\n",
      "data_02_0144 3.3247539466691447e-08 3.3593072697069164e-08 1.0103927459270747\n",
      "data_02_0182 3.304665329402803e-08 3.3247539466691447e-08 1.0060788658650563\n",
      "data_02_0336 3.2916725727484065e-08 3.304665329402803e-08 1.0039471594963494\n",
      "data_02_0264 3.2731613308230714e-08 3.2916725727484065e-08 1.0056554627329293\n",
      "data_02_0104 3.252823750998902e-08 3.2731613308230714e-08 1.0062522845936317\n",
      "data_02_0298 3.2495750930895934e-08 3.252823750998902e-08 1.0009997177527046\n",
      "data_02_0250 3.242473482590026e-08 3.2495750930895934e-08 1.0021901830616962\n",
      "data_02_0256 3.2363258701190245e-08 3.242473482590026e-08 1.0018995653459257\n",
      "data_02_0173 3.2333215504007045e-08 3.2363258701190245e-08 1.000929174433006\n",
      "data_02_0258 3.22692930607046e-08 3.2333215504007045e-08 1.0019809062188687\n",
      "data_02_0243 3.217059036351489e-08 3.22692930607046e-08 1.0030681033849367\n",
      "data_02_0190 3.2140929821276446e-08 3.217059036351489e-08 1.0009228277589781\n",
      "data_02_0262 3.193213502090787e-08 3.2140929821276446e-08 1.0065387046695082\n",
      "data_02_0269 3.151811464075576e-08 3.193213502090787e-08 1.013135950067798\n",
      "data_02_0120 3.150485879015733e-08 3.151811464075576e-08 1.0004207557534768\n",
      "data_02_0191 3.141975700735102e-08 3.150485879015733e-08 1.0027085436334342\n",
      "data_02_0261 3.124494956345661e-08 3.141975700735102e-08 1.0055947423931468\n",
      "data_02_0218 3.055804122628002e-08 3.124494956345661e-08 1.0224788078558469\n",
      "data_02_0252 3.01864634170887e-08 3.055804122628002e-08 1.0123094184322687\n",
      "data_02_0322 3.011726260592752e-08 3.01864634170887e-08 1.0022977125134724\n",
      "data_02_0314 3.009776780454749e-08 3.011726260592752e-08 1.0006477158541\n",
      "data_02_0265 3.00514365542048e-08 3.009776780454749e-08 1.0015417316326667\n",
      "data_02_0268 2.9905581231323254e-08 3.00514365542048e-08 1.0048771940512822\n",
      "data_02_0155 2.9791563025984525e-08 2.9905581231323254e-08 1.0038271978291062\n",
      "data_02_0267 2.959671671172861e-08 2.9791563025984525e-08 1.0065833759924694\n",
      "data_02_0198 2.8804718503755165e-08 2.959671671172861e-08 1.027495433009359\n",
      "data_02_0084 2.854152152077937e-08 2.8804718503755165e-08 1.0092215470287447\n",
      "data_02_0257 2.84619388223748e-08 2.854152152077937e-08 1.0027961095307396\n",
      "data_02_0303 2.8461846228197857e-08 2.84619388223748e-08 1.0000032532737406\n",
      "data_02_0281 2.8445514310204485e-08 2.8461846228197857e-08 1.000574147396854\n",
      "data_02_0219 2.827617732882481e-08 2.8445514310204485e-08 1.0059886801320579\n",
      "data_02_0174 2.7830138583431962e-08 2.827617732882481e-08 1.01602718376898\n",
      "data_02_0212 2.7693009266450745e-08 2.7830138583431962e-08 1.0049517665509666\n",
      "data_02_0133 2.7647470492804285e-08 2.7693009266450745e-08 1.0016471226059653\n",
      "data_02_0297 2.7423848405637794e-08 2.7647470492804285e-08 1.0081542927111762\n",
      "data_02_0205 2.7191991306331825e-08 2.7423848405637794e-08 1.0085266686317298\n",
      "data_02_0321 2.696072330617148e-08 2.7191991306331825e-08 1.008577959780011\n",
      "data_02_0277 2.69174511955274e-08 2.696072330617148e-08 1.001607585737957\n",
      "data_02_0105 2.6823918307999324e-08 2.69174511955274e-08 1.0034869211296464\n",
      "data_02_0199 2.6596816541850855e-08 2.6823918307999324e-08 1.0085386822814346\n",
      "data_02_0145 2.6321883880191714e-08 2.6596816541850855e-08 1.0104450222070176\n",
      "data_02_0134 2.5886482512495037e-08 2.6321883880191714e-08 1.0168196419689897\n",
      "data_02_0244 2.5860887274560485e-08 2.5886482512495037e-08 1.00098972775616\n",
      "data_02_0288 2.5814184934311998e-08 2.5860887274560485e-08 1.0018091735364618\n",
      "data_02_0280 2.5567408398686068e-08 2.5814184934311998e-08 1.0096519964705775\n",
      "data_02_0200 2.5161825000061712e-08 2.5567408398686068e-08 1.0161189976729972\n",
      "data_02_0286 2.5066528318774607e-08 2.5161825000061712e-08 1.0038017502892784\n",
      "data_02_0085 2.5059766982601205e-08 2.5066528318774607e-08 1.0002698084215267\n",
      "data_02_0270 2.501467899802678e-08 2.5059766982601205e-08 1.001802461050089\n",
      "data_02_0263 2.4817500914856054e-08 2.501467899802678e-08 1.007945122429821\n",
      "data_02_0156 2.4613349978552404e-08 2.4817500914856054e-08 1.008294317371733\n",
      "data_02_0276 2.4560296850560702e-08 2.4613349978552404e-08 1.0021601175390715\n",
      "data_02_0285 2.4538500163829094e-08 2.4560296850560702e-08 1.0008882648322466\n",
      "data_02_0121 2.405843208864701e-08 2.4538500163829094e-08 1.0199542544340878\n",
      "data_02_0296 2.4058301360074324e-08 2.405843208864701e-08 1.00000543382389\n",
      "data_02_0207 2.3903461559909207e-08 2.4058301360074324e-08 1.0064777145258665\n",
      "data_02_0449 2.373280894028847e-08 2.3903461559909207e-08 1.007190578243397\n",
      "data_02_0275 2.351749156807309e-08 2.373280894028847e-08 1.0091556266361201\n",
      "data_02_0183 2.3500539027225123e-08 2.351749156807309e-08 1.000721368170676\n",
      "data_02_0206 2.3061812947513062e-08 2.3500539027225123e-08 1.0190239197894184\n",
      "data_02_0220 2.2994988953888147e-08 2.3061812947513062e-08 1.0029060241672183\n",
      "data_02_0146 2.2740881631130188e-08 2.2994988953888147e-08 1.011174031283383\n",
      "data_02_0221 2.2573026012461166e-08 2.2740881631130188e-08 1.007436115059468\n",
      "data_02_0295 2.222224858006809e-08 2.2573026012461166e-08 1.0157849657350924\n",
      "data_02_0106 2.2203112981640488e-08 2.222224858006809e-08 1.0008618430417133\n",
      "data_02_0287 2.1985254420659646e-08 2.2203112981640488e-08 1.0099093036092464\n",
      "data_02_0335 2.174038356223434e-08 2.1985254420659646e-08 1.011263410221091\n",
      "data_02_0157 2.1600786574131115e-08 2.174038356223434e-08 1.0064625881851175\n",
      "data_02_0086 2.1280953876238953e-08 2.1600786574131115e-08 1.0150290583660946\n",
      "data_02_0135 2.0605224158770496e-08 2.1280953876238953e-08 1.032794096888329\n",
      "data_02_0245 2.0214746920241275e-08 2.0605224158770496e-08 1.0193164544710789\n",
      "data_02_0147 2.012235348938875e-08 2.0214746920241275e-08 1.0045915817402395\n",
      "data_02_0122 2.0049202575832967e-08 2.012235348938875e-08 1.003648569726357\n",
      "data_02_0107 1.938714534962891e-08 2.0049202575832967e-08 1.0341492888336308\n",
      "data_02_0184 1.9329784881362546e-08 1.938714534962891e-08 1.002967465422839\n",
      "data_02_0233 1.9242219372987482e-08 1.9329784881362546e-08 1.004550696916905\n",
      "data_02_0175 1.9131945757118e-08 1.9242219372987482e-08 1.0057638474031558\n",
      "data_02_0192 1.9060909360862577e-08 1.9131945757118e-08 1.0037268104532977\n",
      "data_02_0214 1.8668523669383202e-08 1.9060909360862577e-08 1.0210185710679895\n",
      "data_02_0246 1.8085116798197382e-08 1.8668523669383202e-08 1.0322589495935117\n",
      "data_02_0224 1.7865119734937927e-08 1.8085116798197382e-08 1.012314334665735\n",
      "data_02_0123 1.7783980521679194e-08 1.7865119734937927e-08 1.0045624888736142\n",
      "data_02_0234 1.7743067624651617e-08 1.7783980521679194e-08 1.0023058525105735\n",
      "data_02_0087 1.7689307353746686e-08 1.7743067624651617e-08 1.00303913939816\n",
      "data_02_0136 1.685611853058975e-08 1.7689307353746686e-08 1.0494294591987414\n",
      "data_02_0222 1.685223127976849e-08 1.685611853058975e-08 1.0002306668331764\n",
      "data_02_0223 1.684111800097649e-08 1.685223127976849e-08 1.0006598896101409\n",
      "data_02_0108 1.6692689326756842e-08 1.684111800097649e-08 1.0088918370979163\n",
      "data_02_0124 1.649772171738971e-08 1.6692689326756842e-08 1.0118178505315447\n",
      "data_02_0274 1.646811134730673e-08 1.649772171738971e-08 1.0017980428634776\n",
      "data_02_0158 1.609217982956011e-08 1.646811134730673e-08 1.0233611307932355\n",
      "data_02_0240 1.5068640073540352e-08 1.609217982956011e-08 1.0679251578791795\n",
      "data_02_0320 1.503683121703211e-08 1.5068640073540352e-08 1.0021153962593006\n",
      "data_02_0247 1.4173933717675753e-08 1.503683121703211e-08 1.0608791826280568\n",
      "data_02_0248 1.4169011127970798e-08 1.4173933717675753e-08 1.0003474194254276\n",
      "data_02_0088 1.387514072593158e-08 1.4169011127970798e-08 1.0211796339830987\n",
      "data_02_0235 1.3468333617225374e-08 1.387514072593158e-08 1.030204709822893\n",
      "data_02_0160 1.3120004952502951e-08 1.3468333617225374e-08 1.026549430886912\n",
      "data_02_0161 1.2298582595302832e-08 1.3120004952502951e-08 1.0667900020864065\n",
      "data_02_0260 1.216723491447803e-08 1.2298582595302832e-08 1.010795195600975\n",
      "data_02_0159 1.199993752002408e-08 1.216723491447803e-08 1.0139415221266597\n",
      "data_02_0294 1.1975844891213482e-08 1.199993752002408e-08 1.002011768608349\n",
      "data_02_0273 1.1970496190147518e-08 1.1975844891213482e-08 1.0004468236722188\n",
      "data_02_0241 1.180009018680682e-08 1.1970496190147518e-08 1.0144410763513674\n",
      "data_02_0109 1.175617850876184e-08 1.180009018680682e-08 1.0037352000067243\n",
      "data_02_0254 1.1681359586635138e-08 1.175617850876184e-08 1.0064049840749962\n",
      "data_02_0089 1.0944685681180611e-08 1.1681359586635138e-08 1.0673088224654308\n",
      "data_02_0319 1.071026016339414e-08 1.0944685681180611e-08 1.0218879386877733\n",
      "data_02_0291 9.647626338630572e-09 1.071026016339414e-08 1.1101445876389946\n",
      "data_02_0110 9.297424836505559e-09 9.647626338630572e-09 1.0376665053262895\n",
      "data_02_0090 8.94600182435908e-09 9.297424836505559e-09 1.0392826895238931\n",
      "data_02_0440 8.921549332760699e-09 8.94600182435908e-09 1.002740834656217\n",
      "data_02_0292 8.845576776004658e-09 8.921549332760699e-09 1.008588762347542\n",
      "data_02_0293 8.013141726493833e-09 8.845576776004658e-09 1.103883729743422\n",
      "data_02_0091 5.400087708579987e-09 8.013141726493833e-09 1.4838910326886112\n",
      "376\n"
     ]
    }
   ],
   "source": [
    "print(gonio0.chi2())\n",
    "print(len(search_outliers(0)))\n",
    "# for lbl in search_outliers(7):\n",
    "#     gonio7.single_geometries.pop(lbl)\n",
    "# gonio7.refine2()\n",
    "# gonio7 = complete_gonio(module_id=7)\n",
    "# gonio7.refine2()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overlay of the differents results\n",
    "\n",
    "We are getting to an end. Here are the first actually integrated data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "area_pixel=0.05054585816712631 area_sum=0.05084240089824814, Error= -0.005866805745810646\n",
      "area_pixel=0.05448433978731071 area_sum=0.05460194376540826, Error= -0.002158491385903477\n",
      "area_pixel=0.05706893234299759 area_sum=0.057097754167008734, Error= -0.0005050352762500703\n",
      "area_pixel=0.04575136894640419 area_sum=0.046103520693760155, Error= -0.007697075638731046\n",
      "area_pixel=0.0503875602291064 area_sum=0.05041948354020665, Error= -0.0006335554044510445\n",
      "area_pixel=0.050887046288177196 area_sum=0.05090400923674137, Error= -0.0003333451202514585\n",
      "area_pixel=0.047764037615231736 area_sum=0.047787742717740125, Error= -0.0004962960355099896\n",
      "area_pixel=0.054600585079026764 area_sum=0.05461392295287675, Error= -0.00024428078619822223\n",
      "area_pixel=0.04398098576245957 area_sum=0.0451093409852144, Error= -0.025655523704017393\n",
      "area_pixel=0.05413585962925449 area_sum=0.054261047973434326, Error= -0.0023124846458000116\n",
      "area_pixel=0.05074179597564754 area_sum=0.051022305153632666, Error= -0.005528168102677118\n",
      "area_pixel=0.05670749981502521 area_sum=0.0567493721010123, Error= -0.0007383906207058524\n",
      "area_pixel=0.0522725582237884 area_sum=0.052599157191360185, Error= -0.006248000455105984\n",
      "area_pixel=0.04886833409786284 area_sum=0.05916004122953074, Error= -0.21060073607293242\n",
      "area_pixel=0.05605479751870135 area_sum=0.06334656311501353, Error= -0.13008281037639038\n",
      "area_pixel=0.07613865216960036 area_sum=0.07747175549456228, Error= -0.01750889051716343\n",
      "area_pixel=0.08243566371888811 area_sum=0.0829475211134128, Error= -0.006209174178182975\n",
      "area_pixel=0.05072162137920344 area_sum=0.060175244255315306, Error= -0.18638250550854787\n",
      "area_pixel=0.05147481897381212 area_sum=0.060582440472418876, Error= -0.17693353138823606\n",
      "area_pixel=0.07995593516658417 area_sum=0.08078232411070743, Error= -0.010335554732760278\n",
      "area_pixel=0.07870547782261994 area_sum=0.07967188659348057, Error= -0.012278799361826395\n",
      "area_pixel=0.05682851643920728 area_sum=0.06386061246732938, Error= -0.12374238267586556\n",
      "area_pixel=0.0400252869217077 area_sum=0.05503561919587382, Error= -0.3750212285430305\n",
      "area_pixel=0.06340122634469303 area_sum=0.06793436007101032, Error= -0.07149914895450184\n",
      "area_pixel=0.07356612496032433 area_sum=0.07505451304442162, Error= -0.020231976128958933\n",
      "area_pixel=0.08519548136319521 area_sum=0.08544563508127642, Error= -0.0029362322282655237\n",
      "area_pixel=0.053160030339890696 area_sum=0.06157431522706344, Error= -0.1582821686401251\n",
      "area_pixel=0.045930287163253425 area_sum=0.057201385537067204, Error= -0.2453957741163707\n",
      "area_pixel=0.06732209973204561 area_sum=0.07040744500060567, Error= -0.045829605446655645\n",
      "area_pixel=0.07017129920940413 area_sum=0.0721841810894871, Error= -0.02868525882748959\n",
      "area_pixel=0.048616431082022515 area_sum=0.058747282374172344, Error= -0.2083832783829341\n",
      "area_pixel=0.05084741072757204 area_sum=0.06014651274983808, Error= -0.1828825084543311\n",
      "area_pixel=0.08582264210207136 area_sum=0.08598966627233767, Error= -0.0019461550725468225\n",
      "area_pixel=0.07293769354366653 area_sum=0.07452580505574181, Error= -0.021773536218615323\n",
      "area_pixel=0.06333498912628421 area_sum=0.06785807669315522, Error= -0.07141530501966896\n",
      "area_pixel=0.03963769199827816 area_sum=0.054891531459535764, Error= -0.3848316764235472\n",
      "area_pixel=0.06112439445008455 area_sum=0.0664864916591485, Error= -0.08772434078578469\n",
      "area_pixel=0.07314430360340829 area_sum=0.07481382789893049, Error= -0.022825076093067092\n",
      "area_pixel=0.0854466193934389 area_sum=0.08560825287900438, Error= -0.0018916311343020336\n",
      "area_pixel=0.04673599374915405 area_sum=0.057774642096181, Error= -0.23619158300719262\n",
      "area_pixel=0.05583010601315941 area_sum=0.06324832936851839, Error= -0.13287138221823314\n",
      "area_pixel=0.07322943409217153 area_sum=0.07499526481604342, Error= -0.02411367431365501\n",
      "area_pixel=0.0852345027976682 area_sum=0.08533894045176349, Error= -0.0012252978625710697\n",
      "area_pixel=0.04599237073951734 area_sum=0.05746828088313036, Error= -0.24951769084938125\n",
      "area_pixel=0.06070260492291091 area_sum=0.061073736040080526, Error= -0.006113924067030317\n",
      "area_pixel=0.044319725410217004 area_sum=0.047768636124481664, Error= -0.07781886467801953\n",
      "area_pixel=0.044174329257337774 area_sum=0.047917627993498656, Error= -0.0847392320176335\n",
      "area_pixel=0.05696363265076698 area_sum=0.05803312066746481, Error= -0.018774926508894813\n",
      "area_pixel=0.058320415107782964 area_sum=0.059174815319163986, Error= -0.014650105109882882\n",
      "area_pixel=0.042924164383912 area_sum=0.04741622416589007, Error= -0.10465107117290089\n",
      "area_pixel=0.06337332199284873 area_sum=0.06344873015210023, Error= -0.0011899038409255117\n",
      "area_pixel=0.052121672519851 area_sum=0.05393823010119017, Error= -0.03485225038869034\n",
      "area_pixel=0.0479534333591225 area_sum=0.05044117779204517, Error= -0.05187833818471332\n",
      "area_pixel=0.04600451074681722 area_sum=0.048891635204346216, Error= -0.06275742118893726\n",
      "area_pixel=0.05666618800179535 area_sum=0.057795805715150514, Error= -0.01993459862377502\n",
      "area_pixel=0.053340349058393244 area_sum=0.055062805328933664, Error= -0.03229180725185726\n",
      "area_pixel=0.04918182529843129 area_sum=0.05170780411764328, Error= -0.051360005528151\n",
      "area_pixel=0.0542987243748243 area_sum=0.05587411994858145, Error= -0.029013491419838604\n",
      "area_pixel=0.048922568471164496 area_sum=0.05165291259833061, Error= -0.05580950086002555\n",
      "area_pixel=0.041726822421832566 area_sum=0.042106909997024614, Error= -0.00910895086497591\n",
      "area_pixel=0.039582151362063556 area_sum=0.04069836796135787, Error= -0.02819999825386246\n",
      "area_pixel=0.05048661327088855 area_sum=0.051104638944560715, Error= -0.012241377142018202\n",
      "area_pixel=0.05462653755615676 area_sum=0.054859630660605146, Error= -0.004267030547355515\n",
      "area_pixel=0.052955102565457324 area_sum=0.053292036127629394, Error= -0.006362626939596422\n",
      "area_pixel=0.05776491656818106 area_sum=0.05779778818874337, Error= -0.0005690585655657377\n",
      "area_pixel=0.04640522109095535 area_sum=0.0470074553630645, Error= -0.012977726599529699\n",
      "area_pixel=0.04660652023051526 area_sum=0.04708417266487089, Error= -0.010248618261847633\n",
      "area_pixel=0.055970272141323996 area_sum=0.05607648098314985, Error= -0.0018975938076141565\n",
      "area_pixel=0.04137995412261919 area_sum=0.04379345464441353, Error= -0.058325355186294676\n",
      "area_pixel=0.04876562355702152 area_sum=0.04919111397280354, Error= -0.008725212244738255\n",
      "area_pixel=0.052309101601506036 area_sum=0.05260266489758367, Error= -0.005612088280812288\n",
      "area_pixel=0.043221450987522836 area_sum=0.044503584967261894, Error= -0.029664297482960136\n",
      "area_pixel=0.042611371967804956 area_sum=0.04391185184599117, Error= -0.030519549550500034\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/mntdirect/_scisoft/users/kieffer/.jupy37/lib/python3.7/site-packages/ipykernel_launcher.py:22: RuntimeWarning: invalid value encountered in true_divide\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "summed, counted, radial = None, None, None\n",
    "\n",
    "for i in range(9):\n",
    "    name = ds_names[i]\n",
    "    ds = data[name]\n",
    "    gonioref = goniometers[name]\n",
    "    mg = gonioref.get_mg(position)\n",
    "    mg.radial_range = (0, 95)\n",
    "    images = [i.reshape(-1, 1) for i in ds]\n",
    "    res_mg = mg.integrate1d(images, 50000)\n",
    "    results[name] = res_mg    \n",
    "    if summed is None:\n",
    "        summed = res_mg.sum\n",
    "        counted = res_mg.count\n",
    "    else:\n",
    "        summed += res_mg.sum\n",
    "        counted += res_mg.count\n",
    "    radial = res_mg.radial\n",
    "    jupyter.plot1d(res_mg, label=\"%i %s\"%(i, name), calibrant=LaB6, ax=ax )\n",
    "    \n",
    "ax.plot(radial, summed/counted, label=\"Merged\")\n",
    "ax.legend()\n",
    "fig.show()    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Multi-Gonio fit\n",
    "\n",
    "Can we fit everything togeather ?\n",
    "Just assume energy and scale parameter of the goniometer are the same for all modules and fit everything."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.optimize import minimize\n",
    "class MultiGoniometer:\n",
    "    def __init__(self, list_of_goniometers,\n",
    "                param_name_split,\n",
    "                param_name_common):\n",
    "        self.nb_gonio = len(list_of_goniometers)\n",
    "        self.goniometers = list_of_goniometers\n",
    "        self.names_split = param_name_split\n",
    "        self.names_common = param_name_common\n",
    "        self.param = None\n",
    "        \n",
    "    def init_param(self):\n",
    "        param = []\n",
    "        for gonio in self.goniometers:\n",
    "            param += list(gonio.param[:len(self.names_split)])\n",
    "        param += list(gonio.param[len(self.names_split):])\n",
    "        self.param = numpy.array(param)\n",
    "    \n",
    "    def residu2(self, param):\n",
    "        \"Actually performs the calulation of the average of the error squared\"\n",
    "        sumsquare = 0.0\n",
    "        npt = 0\n",
    "        for idx, gonio in enumerate(self.goniometers):\n",
    "            gonio_param = numpy.concatenate((param[len(self.names_split)*idx:len(self.names_split)*(1+idx)],\n",
    "                                             param[len(self.names_split)*len(self.goniometers):]))\n",
    "            sumsquare += gonio.residu2(gonio_param)\n",
    "        return sumsquare\n",
    "\n",
    "    def chi2(self, param=None):\n",
    "        \"\"\"Calculate the average of the square of the error for a given parameter set\n",
    "        \"\"\"\n",
    "        if param is not None:\n",
    "            return self.residu2(param)\n",
    "        else:\n",
    "            if self.param is None:\n",
    "                self.init_param()\n",
    "            return self.residu2(self.param)\n",
    "    def refine2(self, method=\"slsqp\", **options):\n",
    "        \"\"\"Geometry refinement tool\n",
    "\n",
    "        See https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html\n",
    "\n",
    "        :param method: name of the minimizer\n",
    "        :param options: options for the minimizer\n",
    "        \"\"\"\n",
    "        if method.lower() in [\"simplex\", \"nelder-mead\"]:\n",
    "            method = \"Nelder-Mead\"\n",
    "\n",
    "        former_error = self.chi2()\n",
    "        print(\"Cost function before refinement: %s\" % former_error)\n",
    "        param = numpy.asarray(self.param, dtype=numpy.float64)\n",
    "        print(param)\n",
    "        res = minimize(self.residu2, param, method=method,\n",
    "                       tol=1e-12,\n",
    "                       options=options)\n",
    "        print(res)\n",
    "        newparam = res.x\n",
    "        new_error = res.fun\n",
    "        print(\"Cost function after refinement: %s\" % new_error)\n",
    "\n",
    "        if new_error < former_error:\n",
    "            self.param = newparam\n",
    "        return self.param\n",
    "    \n",
    "    def integrate(self, list_of_dataset, npt=50000, radial_range=(0,100)):\n",
    "        summed = None\n",
    "        counted = None\n",
    "        param = self.param\n",
    "        for idx, ds in enumerate(list_of_dataset):\n",
    "            gonio = self.goniometers[idx]\n",
    "            gonio_param = numpy.concatenate((param[len(self.names_split)*idx:len(self.names_split)*(1+idx)],\n",
    "                                             param[len(self.names_split)*len(self.goniometers):]))\n",
    "            print(gonio_param)\n",
    "            gonio.param = gonio_param\n",
    "            mg = gonio.get_mg(position)\n",
    "            mg.radial_range = radial_range\n",
    "            images = [i.reshape(-1, 1) for i in ds]\n",
    "            res_mg = mg.integrate1d(images, 50000)\n",
    "            if summed is None:\n",
    "                summed = res_mg.sum\n",
    "                counted = res_mg.count\n",
    "            else:\n",
    "                summed += res_mg.sum\n",
    "                counted += res_mg.count\n",
    "            radial = res_mg.radial\n",
    "        res = Integrate1dResult(radial, summed/numpy.maximum(counted, 1e-10))\n",
    "        res._set_unit(res_mg.unit)\n",
    "        res._set_count(counted)\n",
    "        res._set_sum(summed)\n",
    "        return res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "multigonio = MultiGoniometer([goniometers[ds_names[i]] for i in range(9)],\n",
    "                 [\"dist\", \"poni1\", \"poni2\", \"rot1\", \"offset\"], \n",
    "                [\"scale\", \"nrj\"])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8.603112017040267e-09\n",
      "CPU times: user 10.1 s, sys: 382 ms, total: 10.5 s\n",
      "Wall time: 663 ms\n",
      "6.1395983620232986e-09\n",
      "CPU times: user 9.9 s, sys: 392 ms, total: 10.3 s\n",
      "Wall time: 651 ms\n"
     ]
    }
   ],
   "source": [
    "%time print(multigonio.chi2())\n",
    "multigonio.param = numpy.array([ 7.20594053e-01,  3.22408604e-02,  4.05228023e-03, -2.75578440e-05,\n",
    "       -8.27999414e+01,  7.20612302e-01,  3.36369797e-02,  4.02094516e-03,\n",
    "       -1.74996556e-05, -7.71999791e+01,  7.20636130e-01,  3.47920978e-02,\n",
    "        4.01341931e-03, -1.21330600e-05, -7.15999090e+01,  7.20757808e-01,\n",
    "        3.33850817e-02,  3.95036100e-03,  3.46517345e-05, -6.57999267e+01,\n",
    "        7.20813915e-01,  3.22167822e-02,  3.97128822e-03,  2.00055269e-05,\n",
    "       -6.00000525e+01,  7.20881596e-01,  3.33801850e-02,  3.97760147e-03,\n",
    "        1.47074593e-05, -5.43998157e+01,  7.21048510e-01,  3.22346939e-02,\n",
    "        4.02104962e-03, -1.69519259e-05, -4.85998856e+01,  7.21074630e-01,\n",
    "        3.08484557e-02,  4.09385968e-03, -6.91378973e-05, -4.27999030e+01,\n",
    "        7.21154891e-01,  3.20619921e-02,  4.24950906e-03, -1.81328256e-04,\n",
    "       -3.71999987e+01,  9.99038595e-01,  1.70266104e+01])\n",
    "%time print(multigonio.chi2())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost function before refinement: 6.1395983620232986e-09\n",
      "[ 7.20594053e-01  3.22408604e-02  4.05228023e-03 -2.75578440e-05\n",
      " -8.27999414e+01  7.20612302e-01  3.36369797e-02  4.02094516e-03\n",
      " -1.74996556e-05 -7.71999791e+01  7.20636130e-01  3.47920978e-02\n",
      "  4.01341931e-03 -1.21330600e-05 -7.15999090e+01  7.20757808e-01\n",
      "  3.33850817e-02  3.95036100e-03  3.46517345e-05 -6.57999267e+01\n",
      "  7.20813915e-01  3.22167822e-02  3.97128822e-03  2.00055269e-05\n",
      " -6.00000525e+01  7.20881596e-01  3.33801850e-02  3.97760147e-03\n",
      "  1.47074593e-05 -5.43998157e+01  7.21048510e-01  3.22346939e-02\n",
      "  4.02104962e-03 -1.69519259e-05 -4.85998856e+01  7.21074630e-01\n",
      "  3.08484557e-02  4.09385968e-03 -6.91378973e-05 -4.27999030e+01\n",
      "  7.21154891e-01  3.20619921e-02  4.24950906e-03 -1.81328256e-04\n",
      " -3.71999987e+01  9.99038595e-01  1.70266104e+01]\n",
      "     fun: 6.1395983620232986e-09\n",
      "     jac: array([ 5.90883473e-08, -1.08561671e-07, -2.52646911e-08,  1.79747064e-08,\n",
      "       -1.72926662e-09,  1.79298213e-08,  9.69570013e-09,  4.03865801e-08,\n",
      "       -2.91714863e-08, -1.94683714e-10,  2.72323741e-08, -6.07769467e-08,\n",
      "        2.33525472e-08, -1.69337616e-08, -1.17130239e-09,  2.09023376e-07,\n",
      "       -5.80926751e-09,  1.58839289e-08, -1.22906173e-08, -4.71553241e-10,\n",
      "        1.47614749e-07, -1.33281402e-07, -1.82833877e-08,  1.25890469e-08,\n",
      "       -2.00339789e-09,  2.45125083e-07, -6.85051675e-08, -3.08888884e-08,\n",
      "        2.12864152e-08, -1.23765842e-09,  2.99788196e-07, -2.02647332e-08,\n",
      "       -7.85245061e-08,  5.54326079e-08, -5.67168867e-10,  2.54716680e-07,\n",
      "        1.39967174e-07, -1.44580129e-07,  1.03263413e-07,  1.46673401e-09,\n",
      "        1.30733052e-08,  8.84376917e-08, -1.94036564e-07,  1.39886310e-07,\n",
      "        7.47406914e-10, -3.89892417e-08,  6.53007231e-07])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 49\n",
      "     nit: 1\n",
      "    njev: 1\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([ 7.20594053e-01,  3.22408604e-02,  4.05228023e-03, -2.75578440e-05,\n",
      "       -8.27999414e+01,  7.20612302e-01,  3.36369797e-02,  4.02094516e-03,\n",
      "       -1.74996556e-05, -7.71999791e+01,  7.20636130e-01,  3.47920978e-02,\n",
      "        4.01341931e-03, -1.21330600e-05, -7.15999090e+01,  7.20757808e-01,\n",
      "        3.33850817e-02,  3.95036100e-03,  3.46517345e-05, -6.57999267e+01,\n",
      "        7.20813915e-01,  3.22167822e-02,  3.97128822e-03,  2.00055269e-05,\n",
      "       -6.00000525e+01,  7.20881596e-01,  3.33801850e-02,  3.97760147e-03,\n",
      "        1.47074593e-05, -5.43998157e+01,  7.21048510e-01,  3.22346939e-02,\n",
      "        4.02104962e-03, -1.69519259e-05, -4.85998856e+01,  7.21074630e-01,\n",
      "        3.08484557e-02,  4.09385968e-03, -6.91378973e-05, -4.27999030e+01,\n",
      "        7.21154891e-01,  3.20619921e-02,  4.24950906e-03, -1.81328256e-04,\n",
      "       -3.71999987e+01,  9.99038595e-01,  1.70266104e+01])\n",
      "Cost function after refinement: 6.1395983620232986e-09\n",
      "CPU times: user 7min 48s, sys: 17.8 s, total: 8min 6s\n",
      "Wall time: 30.6 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 7.20594053e-01,  3.22408604e-02,  4.05228023e-03, -2.75578440e-05,\n",
       "       -8.27999414e+01,  7.20612302e-01,  3.36369797e-02,  4.02094516e-03,\n",
       "       -1.74996556e-05, -7.71999791e+01,  7.20636130e-01,  3.47920978e-02,\n",
       "        4.01341931e-03, -1.21330600e-05, -7.15999090e+01,  7.20757808e-01,\n",
       "        3.33850817e-02,  3.95036100e-03,  3.46517345e-05, -6.57999267e+01,\n",
       "        7.20813915e-01,  3.22167822e-02,  3.97128822e-03,  2.00055269e-05,\n",
       "       -6.00000525e+01,  7.20881596e-01,  3.33801850e-02,  3.97760147e-03,\n",
       "        1.47074593e-05, -5.43998157e+01,  7.21048510e-01,  3.22346939e-02,\n",
       "        4.02104962e-03, -1.69519259e-05, -4.85998856e+01,  7.21074630e-01,\n",
       "        3.08484557e-02,  4.09385968e-03, -6.91378973e-05, -4.27999030e+01,\n",
       "        7.21154891e-01,  3.20619921e-02,  4.24950906e-03, -1.81328256e-04,\n",
       "       -3.71999987e+01,  9.99038595e-01,  1.70266104e+01])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time multigonio.refine2()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LaB6 Calibrant with 109 reflections at wavelength 7.281789761742598e-11 \n",
      " LaB6 Calibrant with 109 reflections at wavelength 7.281789768115395e-11\n"
     ]
    }
   ],
   "source": [
    "LaB6_new = get_calibrant(\"LaB6\")\n",
    "LaB6_new.wavelength = 1e-10*hc/multigonio.param[-1]\n",
    "print(LaB6,\"\\n\", LaB6_new)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 7.20594053e-01  3.22408604e-02  4.05228023e-03 -2.75578440e-05\n",
      " -8.27999414e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.053413862261281864 area_sum=0.055214882933248166, Error= -0.033718225863472326\n",
      "area_pixel=0.045333067243413794 area_sum=0.04986384765291535, Error= -0.09994427213966664\n",
      "area_pixel=0.03918749031126367 area_sum=0.04563241935519968, Error= -0.16446393970995232\n",
      "area_pixel=0.04641997394066166 area_sum=0.05056017758649528, Error= -0.0891901329183427\n",
      "area_pixel=0.04963019502342725 area_sum=0.052784706110374724, Error= -0.06356032019335069\n",
      "area_pixel=0.041808779534353135 area_sum=0.04729034242949584, Error= -0.13111033032281305\n",
      "area_pixel=0.053529818242976646 area_sum=0.05553764984245543, Error= -0.03750865714441734\n",
      "area_pixel=0.05746249488342414 area_sum=0.05828939512131753, Error= -0.014390259935127214\n",
      "area_pixel=0.03804626259786659 area_sum=0.04468957516491201, Error= -0.17461143653615904\n",
      "area_pixel=0.0579645518625469 area_sum=0.05860457337617547, Error= -0.011041602031984604\n",
      "area_pixel=0.0514530597536762 area_sum=0.05403218600224738, Error= -0.05012580905622247\n",
      "area_pixel=0.04708587038231293 area_sum=0.05104328125237842, Error= -0.08404667552990643\n",
      "area_pixel=0.0414210821500145 area_sum=0.04727614277194664, Error= -0.1413546029707022\n",
      "area_pixel=0.057188034039880264 area_sum=0.05760891916847055, Error= -0.0073596712259208176\n",
      "[ 7.20612302e-01  3.36369797e-02  4.02094516e-03 -1.74996556e-05\n",
      " -7.71999791e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.20636130e-01  3.47920978e-02  4.01341931e-03 -1.21330600e-05\n",
      " -7.15999090e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.20757808e-01  3.33850817e-02  3.95036100e-03  3.46517345e-05\n",
      " -6.57999267e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.06406776393820302 area_sum=0.06431614060731783, Error= -0.003876780674824036\n",
      "area_pixel=0.036519974544861 area_sum=0.045063743745274665, Error= -0.23394784106211602\n",
      "area_pixel=0.06022365655235262 area_sum=0.06045501049825683, Error= -0.0038415791924405825\n",
      "area_pixel=0.06470520384919531 area_sum=0.06480584410676266, Error= -0.0015553657446454841\n",
      "area_pixel=0.042761484590993604 area_sum=0.04894851144272455, Error= -0.14468690483758498\n",
      "area_pixel=0.05556804666999149 area_sum=0.0572738285392099, Error= -0.030697171692011003\n",
      "area_pixel=0.05157759645584292 area_sum=0.054703089692101546, Error= -0.06059788456669262\n",
      "area_pixel=0.04628344743831292 area_sum=0.051193164385785, Error= -0.1060793268266329\n",
      "area_pixel=0.04441767384784612 area_sum=0.04995426406033848, Error= -0.12464836027789516\n",
      "area_pixel=0.05377034832596905 area_sum=0.05619131504982555, Error= -0.04502419640616803\n",
      "area_pixel=0.05745532746690074 area_sum=0.0586344668434077, Error= -0.020522716143011228\n",
      "area_pixel=0.04107664840957703 area_sum=0.047752702889470366, Error= -0.16252675761970906\n",
      "area_pixel=0.05946818134114551 area_sum=0.05993335889343876, Error= -0.00782229322979813\n",
      "area_pixel=0.07058082407797173 area_sum=0.07058105681613237, Error= -3.2974701512325326e-06\n",
      "area_pixel=0.046987941054872806 area_sum=0.05167050922411581, Error= -0.09965467871372943\n",
      "area_pixel=0.051123579128637076 area_sum=0.05437612755835594, Error= -0.063621297357425\n",
      "area_pixel=0.05248017980128061 area_sum=0.055180053859511885, Error= -0.05144559466934963\n",
      "area_pixel=0.047912061925078575 area_sum=0.05226569446005236, Error= -0.09086715035937463\n",
      "area_pixel=0.04572012763952671 area_sum=0.05084193350468269, Error= -0.11202518736470006\n",
      "[ 7.20813915e-01  3.22167822e-02  3.97128822e-03  2.00055269e-05\n",
      " -6.00000525e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.20881596e-01  3.33801850e-02  3.97760147e-03  1.47074593e-05\n",
      " -5.43998157e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.21048510e-01  3.22346939e-02  4.02104962e-03 -1.69519259e-05\n",
      " -4.85998856e+01  9.99038595e-01  1.70266104e+01]\n",
      "[ 7.21074630e-01  3.08484557e-02  4.09385968e-03 -6.91378973e-05\n",
      " -4.27999030e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.0991017473223863 area_sum=0.10463027384689139, Error= -0.05578636778744499\n",
      "area_pixel=0.07069194828200054 area_sum=0.08784192624601114, Error= -0.24260157458946852\n",
      "area_pixel=0.07363944575302739 area_sum=0.08917599048958212, Error= -0.21098128289369983\n",
      "area_pixel=0.11866235123215318 area_sum=0.12004419996868715, Error= -0.011645216213780306\n",
      "area_pixel=0.042113113396123225 area_sum=0.07678977886848182, Error= -0.8234172844497124\n",
      "area_pixel=0.10206300321222628 area_sum=0.10662320384564644, Error= -0.044680251314355705\n",
      "area_pixel=0.09032959255696227 area_sum=0.09890206075850298, Error= -0.09490210194554875\n",
      "area_pixel=0.05405730719101953 area_sum=0.0803776405557316, Error= -0.4868968643167011\n",
      "area_pixel=0.06486418102965885 area_sum=0.08504369583806178, Error= -0.3111041330989122\n",
      "area_pixel=0.07961206312065627 area_sum=0.09217586427332167, Error= -0.15781278188487957\n",
      "area_pixel=0.11567416847953638 area_sum=0.11751408489279526, Error= -0.015906026707979987\n",
      "area_pixel=0.03899188493468486 area_sum=0.07583816249914746, Error= -0.9449729764586564\n",
      "area_pixel=0.10530031424726971 area_sum=0.10890885634782618, Error= -0.03426905348148129\n",
      "area_pixel=0.08974770209027838 area_sum=0.09849411368900213, Error= -0.09745554922315022\n",
      "area_pixel=0.05474040940657332 area_sum=0.08072049604999723, Error= -0.47460526738961833\n",
      "area_pixel=0.06644918714957981 area_sum=0.08579443366184009, Error= -0.29112841468945794\n",
      "area_pixel=0.07815101996878226 area_sum=0.09155079246491357, Error= -0.17145998224314793\n",
      "area_pixel=0.11811873530334793 area_sum=0.11959505854816217, Error= -0.012498637417872821\n",
      "area_pixel=0.0413972494959971 area_sum=0.07656418842293432, Error= -0.8494994076922351\n",
      "area_pixel=0.10302869305435536 area_sum=0.10744525208257137, Error= -0.04286727218684554\n",
      "area_pixel=0.09483751702327226 area_sum=0.10192184423145179, Error= -0.07469962764251938\n",
      "area_pixel=0.04968735428679949 area_sum=0.07918713886310795, Error= -0.5937080973567899\n",
      "area_pixel=0.12624685135862634 area_sum=0.12658534425443493, Error= -0.002681198716370686\n",
      "area_pixel=0.07292481749928825 area_sum=0.08901112957273391, Error= -0.22058762195191864\n",
      "area_pixel=0.07174377634256857 area_sum=0.08841385728354262, Error= -0.23235577761304713\n",
      "area_pixel=0.12450135731947398 area_sum=0.1250951579271622, Error= -0.004769430795557527\n",
      "area_pixel=0.04788770278107535 area_sum=0.07864101722504067, Error= -0.6421964859028207\n",
      "area_pixel=0.09665547391303164 area_sum=0.10315078444549604, Error= -0.0672006485458726\n",
      "area_pixel=0.10207284410790507 area_sum=0.10684959089949136, Error= -0.04679743014250308\n",
      "area_pixel=0.042451700156050265 area_sum=0.0768864287184544, Error= -0.8111507533461285\n",
      "area_pixel=0.11913084304184807 area_sum=0.12046110661371978, Error= -0.011166407774050775\n",
      "area_pixel=0.08064791594041765 area_sum=0.09288655545895187, Error= -0.1517539464699383\n",
      "area_pixel=0.06402646673778989 area_sum=0.08456843952285309, Error= -0.32083564550250054\n",
      "area_pixel=0.05908485149852538 area_sum=0.082224048127862, Error= -0.3916265513490226\n",
      "area_pixel=0.08552527294591528 area_sum=0.09559064428749622, Error= -0.11768885377245293\n",
      "area_pixel=0.1130597812463634 area_sum=0.1152323204339288, Error= -0.019215844605530538\n",
      "area_pixel=0.03630453556874613 area_sum=0.07491578714204401, Error= -1.0635379565780083\n",
      "area_pixel=0.10811519768928335 area_sum=0.11098173966156559, Error= -0.026513774506711926\n",
      "area_pixel=0.09033065463596301 area_sum=0.09884960024462953, Error= -0.09430846751856599\n",
      "area_pixel=0.054267862709590275 area_sum=0.08066441123732206, Error= -0.486412163843463\n",
      "area_pixel=0.0660267344673997 area_sum=0.08556065653189811, Error= -0.295848677389053\n",
      "area_pixel=0.07857345851699904 area_sum=0.09182668967701964, Error= -0.16867312970770298\n",
      "area_pixel=0.12006247452697849 area_sum=0.1212559689588405, Error= -0.009940611640432457\n",
      "area_pixel=0.043405378913874415 area_sum=0.07716694788085048, Error= -0.7778199341138401\n",
      "area_pixel=0.10101357172294456 area_sum=0.10609344882377486, Error= -0.0502890553634036\n",
      "area_pixel=0.09613856114754782 area_sum=0.10276910367737876, Error= -0.06896860584021826\n",
      "area_pixel=0.0483056484857336 area_sum=0.0787464207027933, Error= -0.6301700354162506\n",
      "area_pixel=0.12487824294881023 area_sum=0.1253883621026603, Error= -0.004084932185178019\n",
      "area_pixel=0.07046401268653213 area_sum=0.08773584962849086, Error= -0.2451157162847741\n",
      "area_pixel=0.07408554985093474 area_sum=0.08955623311268268, Error= -0.20882187272519442\n",
      "area_pixel=0.12263118597297762 area_sum=0.12342299996291214, Error= -0.006456872969564248\n",
      "area_pixel=0.04610184051389865 area_sum=0.077977834716309, Error= -0.6914256317554276\n",
      "area_pixel=0.09827120932201439 area_sum=0.10420386190981694, Error= -0.06037020027261983\n",
      "area_pixel=0.09671215194481775 area_sum=0.10311234681820346, Error= -0.06617777336851678\n",
      "area_pixel=0.04760569306460383 area_sum=0.07848600072570878, Error= -0.648668377103522\n",
      "area_pixel=0.12413022185356226 area_sum=0.12469829377225909, Error= -0.004576419104180694\n",
      "area_pixel=0.06980256509773852 area_sum=0.08738524192866963, Error= -0.25189155737058655\n",
      "area_pixel=0.0746069729825436 area_sum=0.08975411958430458, Error= -0.20302588345602884\n",
      "area_pixel=0.11830304345944853 area_sum=0.11971177541148283, Error= -0.011907825114551468\n",
      "area_pixel=0.04176754779718905 area_sum=0.07662006234205823, Error= -0.8344400469499132\n",
      "area_pixel=0.10237967149596372 area_sum=0.10685275736700003, Error= -0.04369115280090212\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 7.21154891e-01  3.20619921e-02  4.24950906e-03 -1.81328256e-04\n",
      " -3.71999987e+01  9.99038595e-01  1.70266104e+01]\n",
      "area_pixel=0.3162483597934198 area_sum=0.3174253016954389, Error= -0.003721574723068656\n",
      "area_pixel=0.24311057254745805 area_sum=0.2600497496702889, Error= -0.0696768427030219\n",
      "area_pixel=0.16860365236765773 area_sum=0.21967653369346593, Error= -0.3029168147226045\n",
      "area_pixel=0.09285566528839695 area_sum=0.19579635166280646, Error= -1.108609647614821\n",
      "area_pixel=0.01576774945500148 area_sum=0.18814793828945114, Error= -10.932453570903947\n",
      "area_pixel=0.06752863879084003 area_sum=0.19124575955043382, Error= -1.8320689262342347\n",
      "area_pixel=0.14373310781029858 area_sum=0.20978466196882295, Error= -0.4595430737203592\n",
      "area_pixel=0.2186034780352415 area_sum=0.24470325423963207, Error= -0.11939323399137768\n",
      "area_pixel=0.29216108377022465 area_sum=0.2964675523040342, Error= -0.014740048463115846\n",
      "area_pixel=0.2878799981328086 area_sum=0.29298295310643363, Error= -0.01772597959817564\n",
      "area_pixel=0.2141720790742454 area_sum=0.24241780051917625, Error= -0.13188330414973987\n",
      "area_pixel=0.13916339910938547 area_sum=0.20843974100945917, Error= -0.4978057617407073\n",
      "area_pixel=0.0628024143954562 area_sum=0.1908539162651179, Error= -2.0389582646193034\n",
      "area_pixel=0.02057417287076646 area_sum=0.18799678892623883, Error= -8.137513819248632\n",
      "area_pixel=0.09756650515308962 area_sum=0.1966136235495598, Error= -1.0151754256346208\n",
      "area_pixel=0.17331785333976057 area_sum=0.22152013322326974, Error= -0.2781149140418713\n",
      "area_pixel=0.24768782015379998 area_sum=0.26307840899106155, Error= -0.062137043427104736\n",
      "area_pixel=0.32077011484482654 area_sum=0.32158395824315333, Error= -0.002537154680761005\n",
      "area_pixel=0.3351439885154548 area_sum=0.33514501546596653, Error= -3.064206869080088e-06\n",
      "area_pixel=0.2622778760051361 area_sum=0.2734626246584369, Error= -0.04264465163307102\n",
      "area_pixel=0.18810753539353442 area_sum=0.22869440854779, Error= -0.21576420673071356\n",
      "area_pixel=0.112597089661854 area_sum=0.2004521249652375, Error= -0.780260267536447\n",
      "area_pixel=0.03576657783084869 area_sum=0.18854905950201395, Error= -4.271655018093185\n",
      "area_pixel=0.04773197420838926 area_sum=0.18923075728158525, Error= -2.964444388062342\n",
      "area_pixel=0.12433631227782627 area_sum=0.20352544620810403, Error= -0.6368946647969718\n",
      "area_pixel=0.1996043725727077 area_sum=0.23418135417408037, Error= -0.1732275759078259\n",
      "area_pixel=0.27356688770897364 area_sum=0.2817900736563061, Error= -0.030059142084770358\n",
      "area_pixel=0.30870886862268065 area_sum=0.31065734495751024, Error= -0.006311695363734788\n",
      "area_pixel=0.23532601277882037 area_sum=0.2552151726304691, Error= -0.08451747266181867\n",
      "area_pixel=0.1606497150495585 area_sum=0.21645063902789305, Error= -0.3473453031716903\n",
      "area_pixel=0.08461056606855522 area_sum=0.1941600618585331, Error= -1.2947495907451565\n",
      "area_pixel=0.007332538774193154 area_sum=0.1882600255178571, Error= -24.674603478462007\n",
      "area_pixel=0.07599244125652405 area_sum=0.19260768104550913, Error= -1.534563673186029\n",
      "area_pixel=0.15213168229737306 area_sum=0.21286801714864104, Error= -0.39923528047593765\n",
      "area_pixel=0.22694519825502368 area_sum=0.24981889990694206, Error= -0.1007895378610948\n",
      "area_pixel=0.30045187561808007 area_sum=0.30355525113576626, Error= -0.010329026940843773\n",
      "area_pixel=0.28385714726268674 area_sum=0.2899091102978157, Error= -0.021320453240264367\n",
      "area_pixel=0.2100425868147937 area_sum=0.24016681336221424, Error= -0.14341961315674875\n",
      "area_pixel=0.1348303695541304 area_sum=0.20700277247283105, Error= -0.5352829867437658\n",
      "area_pixel=0.0583768113827432 area_sum=0.19030045072148266, Error= -2.2598637406519515\n",
      "area_pixel=0.02517023462095125 area_sum=0.1882066162598655, Error= -6.477348506843306\n",
      "area_pixel=0.10217425061892982 area_sum=0.19774440981658253, Error= -0.9353644251729548\n",
      "area_pixel=0.17791520734201782 area_sum=0.22364028455116752, Error= -0.2570048839121967\n",
      "area_pixel=0.25227715387468663 area_sum=0.26636300595097906, Error= -0.05583483030448836\n",
      "area_pixel=0.32534669913203373 area_sum=0.32585733184571547, Error= -0.0015695032869367097\n",
      "area_pixel=0.3325208268647728 area_sum=0.332574505940386, Error= -0.00016143071734583676\n",
      "area_pixel=0.25955692012336584 area_sum=0.2715951569509286, Error= -0.046379949422427555\n",
      "area_pixel=0.1852598537926653 area_sum=0.22735970352347062, Error= -0.22724755994853388\n",
      "area_pixel=0.10962093428884856 area_sum=0.1996581937297021, Error= -0.8213509584182843\n",
      "area_pixel=0.03270177267216923 area_sum=0.18846476744745183, Error= -4.7631361252732445\n",
      "area_pixel=0.050905655057214005 area_sum=0.18960967509690219, Error= -2.72472714247161\n",
      "area_pixel=0.12750526999172962 area_sum=0.2045753610924949, Error= -0.6044463190091225\n",
      "area_pixel=0.20284220619853954 area_sum=0.23605078743082697, Error= -0.16371632834531125\n",
      "area_pixel=0.2767808299573389 area_sum=0.2843384019164127, Error= -0.027305257955323996\n",
      "area_pixel=0.3091107047459474 area_sum=0.311041079994932, Error= -0.0062449317326981335\n",
      "area_pixel=0.23571594882840685 area_sum=0.25550239591555235, Error= -0.08394191053041283\n",
      "area_pixel=0.16096577478506902 area_sum=0.2166355213576317, Error= -0.34584834351834237\n",
      "area_pixel=0.08487537174418236 area_sum=0.1942563498502238, Error= -1.2887245835661247\n",
      "area_pixel=0.007541255126128021 area_sum=0.1883390724048897, Error= -23.974499503717286\n",
      "area_pixel=0.07587563674286457 area_sum=0.1927295874102262, Error= -1.5400720927505192\n",
      "area_pixel=0.15205655202905177 area_sum=0.21297699584831323, Error= -0.40064333306480643\n",
      "area_pixel=0.22698276515797033 area_sum=0.24989298302707477, Error= -0.1009337332425213\n",
      "area_pixel=0.3005084896190553 area_sum=0.3036349158753642, Error= -0.01040378679574792\n",
      "area_pixel=0.28301025224994447 area_sum=0.28927039620193623, Error= -0.02211984867058111\n",
      "area_pixel=0.20910608233180739 area_sum=0.2396737877741661, Error= -0.14618276571149272\n",
      "area_pixel=0.1338366984023267 area_sum=0.20668548113632879, Error= -0.5443109670488975\n",
      "area_pixel=0.05732856593776603 area_sum=0.19028903236880437, Error= -2.319270755444603\n",
      "area_pixel=0.02633581865649859 area_sum=0.18833998696365073, Error= -6.151476451907305\n",
      "area_pixel=0.10334170301746326 area_sum=0.19810608231739957, Error= -0.9170003641600767\n",
      "area_pixel=0.17911164193798612 area_sum=0.2242924149012735, Error= -0.2522492255357155\n",
      "area_pixel=0.2535589826204898 area_sum=0.26731587383154576, Error= -0.05425519170680039\n",
      "area_pixel=0.3266280719613661 area_sum=0.32707163550693535, Error= -0.0013580080331298092\n",
      "area_pixel=0.2633131348180413 area_sum=0.27429164136797396, Error= -0.04169372924567242\n",
      "area_pixel=0.18902017801996607 area_sum=0.22923213673949794, Error= -0.2127389739061843\n",
      "area_pixel=0.11342920572148785 area_sum=0.20075891426654055, Error= -0.7699049639779775\n",
      "area_pixel=0.03652948116938859 area_sum=0.18868389615681366, Error= -4.165249823338012\n",
      "area_pixel=0.04716666270215342 area_sum=0.18943842789912257, Error= -3.0163627665451442\n",
      "area_pixel=0.12387038478473755 area_sum=0.2036488774743464, Error= -0.6440481542722922\n",
      "area_pixel=0.19928650128962033 area_sum=0.23423648635203115, Error= -0.17537557655055866\n",
      "area_pixel=0.2733680167453443 area_sum=0.28170080809666015, Error= -0.030481954145639048\n",
      "area_pixel=0.3151046330341387 area_sum=0.31633237117646545, Error= -0.003896287180879773\n",
      "area_pixel=0.24177139290826233 area_sum=0.25938686981480646, Error= -0.07286005467664303\n",
      "area_pixel=0.16712300479208864 area_sum=0.21924139304837004, Error= -0.31185645759014385\n",
      "area_pixel=0.0910896551757503 area_sum=0.195600147785569, Error= -1.1473365708561962\n",
      "area_pixel=0.013839860300606688 area_sum=0.18831736949485467, Error= -12.606883697128037\n",
      "area_pixel=0.06971547380450005 area_sum=0.1919289271858045, Error= -1.7530319556318605\n",
      "area_pixel=0.1460448710809601 area_sum=0.21093711727245834, Error= -0.4443308807162778\n",
      "area_pixel=0.2211077637641452 area_sum=0.2464380208952605, Error= -0.11456068615543955\n",
      "area_pixel=0.2947892935060068 area_sum=0.29874459478635623, Error= -0.01341738444197885\n",
      "area_pixel=0.2931110358344142 area_sum=0.29731957113173924, Error= -0.014358160501682777\n",
      "area_pixel=0.21932969808296576 area_sum=0.2454634010956124, Error= -0.1191525964840432\n",
      "area_pixel=0.14425529718059948 area_sum=0.2103559341545839, Error= -0.45821982461573074\n",
      "area_pixel=0.0678768532043108 area_sum=0.19170761485521115, Error= -1.8243444680348846\n",
      "area_pixel=0.015722368042034418 area_sum=0.18830140786212451, Error= -10.976656910631574\n",
      "area_pixel=0.09294335108705098 area_sum=0.19596483295523684, Error= -1.1084330472622583\n",
      "area_pixel=0.16891666467091682 area_sum=0.21997849216163964, Error= -0.3022900528506255\n",
      "area_pixel=0.24357351180874787 area_sum=0.2605144924477917, Error= -0.06955181831243516\n",
      "area_pixel=0.3168708228495447 area_sum=0.3179731509015596, Error= -0.003478793162784448\n",
      "area_pixel=0.2710631871144926 area_sum=0.27991283223707675, Error= -0.03264790478113202\n",
      "area_pixel=0.19696115396294545 area_sum=0.23316205130188028, Error= -0.18379714278961504\n",
      "area_pixel=0.1214387298301034 area_sum=0.20303492624664138, Error= -0.6719124659051822\n",
      "area_pixel=0.0446689612829303 area_sum=0.18930859299093517, Error= -3.238034365560167\n",
      "area_pixel=0.03903613195652156 area_sum=0.18885585878134378, Error= -3.8379757244311867\n",
      "area_pixel=0.11591426957792095 area_sum=0.20145300012799877, Error= -0.7379482341695316\n",
      "area_pixel=0.19150018698596227 area_sum=0.23045358088976126, Error= -0.20341177999295856\n",
      "area_pixel=0.2657337485833722 area_sum=0.2760045347974807, Error= -0.038650665445627994\n",
      "area_pixel=0.3222386194771545 area_sum=0.3229856609524451, Error= -0.002318286605443799\n",
      "area_pixel=0.2490296734347055 area_sum=0.26414082364545255, Error= -0.06068011896867032\n",
      "area_pixel=0.17448194563318253 area_sum=0.2223541778052593, Error= -0.2743678264152308\n",
      "area_pixel=0.09859402488583413 area_sum=0.1971960039311532, Error= -1.0000806758776117\n",
      "area_pixel=0.021441183690896537 area_sum=0.18837731126207918, Error= -7.785770131807607\n",
      "area_pixel=0.06218567341007741 area_sum=0.19086877457137236, Error= -2.0693367797548268\n",
      "area_pixel=0.13869416433347936 area_sum=0.20839072580829415, Error= -0.5025197837973544\n",
      "area_pixel=0.21387740728798832 area_sum=0.24236963199299888, Error= -0.1332175523646846\n",
      "area_pixel=0.2877265125863744 area_sum=0.29298711444407266, Error= -0.018283340698814\n",
      "area_pixel=0.3004402363939178 area_sum=0.303600641483933, Error= -0.010519247115328041\n",
      "area_pixel=0.2268235323436727 area_sum=0.24984623093141892, Error= -0.10150048520037716\n",
      "area_pixel=0.15189401551023707 area_sum=0.21303058804816452, Error= -0.40249493920191404\n",
      "area_pixel=0.07560254653373022 area_sum=0.19280996485282426, Error= -1.5503104550426978\n",
      "area_pixel=0.007855636670086596 area_sum=0.1883701121219128, Error= -22.978974592753957\n",
      "area_pixel=0.08524286926645885 area_sum=0.19435012991211917, Error= -1.2799576267734991\n",
      "area_pixel=0.16136464619074076 area_sum=0.21680879610280904, Error= -0.3435953985021641\n",
      "area_pixel=0.23612869121810576 area_sum=0.2557847081568589, Error= -0.08324281491315001\n",
      "area_pixel=0.3095662602127476 area_sum=0.31145228925042306, Error= -0.006092489008263765\n",
      "area_pixel=0.27737650871887354 area_sum=0.28484318767074285, Error= -0.02691893046875478\n",
      "area_pixel=0.20335720410827207 area_sum=0.2364081307812203, Error= -0.16252646085432584\n",
      "area_pixel=0.12796221102990302 area_sum=0.20484257754165658, Error= -0.6008052368975374\n",
      "area_pixel=0.05132761493532456 area_sum=0.18980200252948415, Error= -2.697853538853197\n",
      "area_pixel=0.032348638250020656 area_sum=0.18852647031578124, Error= -4.827956925378794\n",
      "area_pixel=0.10935502368892713 area_sum=0.19961445968068325, Error= -0.8253798769090792\n",
      "area_pixel=0.18502779705186612 area_sum=0.22726292353672958, Error= -0.2282636833914437\n",
      "area_pixel=0.25940934304914265 area_sum=0.2715159237570396, Error= -0.04666979440907595\n",
      "area_pixel=0.33239200799186364 area_sum=0.3324826590476647, Error= -0.0002727233315528516\n",
      "area_pixel=0.32806663025375826 area_sum=0.32842573916217543, Error= -0.0010946218703785946\n",
      "area_pixel=0.25501563476734646 area_sum=0.2683640057705975, Error= -0.05234334363627901\n",
      "area_pixel=0.1805523038249106 area_sum=0.22502046808368545, Error= -0.24628965300768216\n",
      "area_pixel=0.10484839677616975 area_sum=0.19849448753573104, Error= -0.8931571072038123\n",
      "area_pixel=0.027780706427876112 area_sum=0.18839753156619068, Error= -5.781596143183247\n",
      "area_pixel=0.055901844324466765 area_sum=0.19019891689204785, Error= -2.4023728410120233\n",
      "area_pixel=0.13245086773965653 area_sum=0.20621132104509224, Error= -0.5568891662561106\n",
      "area_pixel=0.2077403838853087 area_sum=0.23890216466206007, Error= -0.15000348123913876\n",
      "area_pixel=0.28168838271031404 area_sum=0.2882412679482228, Error= -0.023262887787061096\n",
      "area_pixel=0.3036679509148854 area_sum=0.3063570335937469, Error= -0.008855339099038458\n",
      "area_pixel=0.23013353029770656 area_sum=0.2519202767485691, Error= -0.09467002232433774\n",
      "area_pixel=0.15527976347109984 area_sum=0.21418418731666777, Error= -0.37934385349917815\n",
      "area_pixel=0.07912305701536582 area_sum=0.1932629017618802, Error= -1.442561107369098\n",
      "area_pixel=0.004270495138143815 area_sum=0.188569657946917, Error= -43.15639213884679\n",
      "area_pixel=0.08171443432242143 area_sum=0.19372282563559082, Error= -1.370729568673471\n",
      "area_pixel=0.15785913032920718 area_sum=0.21533079423596513, Error= -0.36406930525275116\n",
      "area_pixel=0.23267664257012655 area_sum=0.25358055258180084, Error= -0.08984103337907696\n",
      "area_pixel=0.30615817813110624 area_sum=0.30851641426865656, Error= -0.007702672363501097\n",
      "area_pixel=0.2827987436141157 area_sum=0.28907071497267317, Error= -0.022178215074094083\n",
      "area_pixel=0.20893762266676674 area_sum=0.23950680288442894, Error= -0.1463076866075804\n",
      "area_pixel=0.13369499035069055 area_sum=0.20655228590143038, Error= -0.5449515749216217\n",
      "area_pixel=0.05717610973642451 area_sum=0.19016647747794538, Error= -2.3259779015150146\n",
      "area_pixel=0.026447626860885975 area_sum=0.18843138062414674, Error= -6.124698999093276\n",
      "area_pixel=0.10350506590110342 area_sum=0.19822878807513072, Error= -0.9151602518135057\n",
      "area_pixel=0.17925718032221027 area_sum=0.2244265387471306, Error= -0.25198074823964944\n",
      "area_pixel=0.2537146360561806 area_sum=0.2674670217120998, Error= -0.054204147895015264\n",
      "area_pixel=0.32676999984669663 area_sum=0.32721468540180676, Error= -0.0013608518386594483\n",
      "area_pixel=0.33228527791060714 area_sum=0.33234618542055966, Error= -0.00018329885192478853\n",
      "area_pixel=0.2593125452043026 area_sum=0.27137676375823494, Error= -0.04652385230505303\n",
      "area_pixel=0.1850399926603572 area_sum=0.22717013127999455, Error= -0.22768125967756417\n",
      "area_pixel=0.10939551576598205 area_sum=0.19950410594224735, Error= -0.8236954645291387\n",
      "area_pixel=0.0324803256059738 area_sum=0.188350920570647, Error= -4.798923411531484\n",
      "area_pixel=0.05116354009351909 area_sum=0.1897881212412188, Error= -2.7094407637609765\n",
      "area_pixel=0.12777032001296362 area_sum=0.20477853245211183, Error= -0.6027081440457763\n",
      "area_pixel=0.20311429628934263 area_sum=0.2362889406485346, Error= -0.16332993277801403\n",
      "area_pixel=0.27710401884821323 area_sum=0.2846414590272934, Error= -0.02720076096481611\n",
      "area_pixel=0.3064926910713126 area_sum=0.3087457943571933, Error= -0.007351246380477145\n",
      "area_pixel=0.23304752811979768 area_sum=0.25371599247601223, Error= -0.08868776477899379\n",
      "area_pixel=0.15832508960892255 area_sum=0.2153977937851785, Error= -0.36047795278203065\n",
      "area_pixel=0.08224645176300527 area_sum=0.19358374996717953, Error= -1.3537033612707674\n",
      "area_pixel=0.0048831529783157634 area_sum=0.18833217194333302, Error= -37.567739487098805\n",
      "area_pixel=0.07843739213718948 area_sum=0.1931715652964236, Error= -1.4627484422042032\n",
      "area_pixel=0.15459365008597103 area_sum=0.21394863116266327, Error= -0.38394190863392097\n",
      "area_pixel=0.2294679376169313 area_sum=0.25152957536458437, Error= -0.09614257214653789\n",
      "area_pixel=0.30292545925210845 area_sum=0.3057232072472447, Error= -0.009235763814780104\n",
      "area_pixel=0.28499139748399926 area_sum=0.2907294346234526, Error= -0.020134071379384253\n",
      "area_pixel=0.2112129043374864 area_sum=0.2407098282028552, Error= -0.13965493234370352\n",
      "area_pixel=0.1360951441490741 area_sum=0.20730767684290902, Error= -0.5232554999598743\n",
      "area_pixel=0.05965767815867906 area_sum=0.1903207599058092, Error= -2.190213997259314\n",
      "area_pixel=0.023880824440844606 area_sum=0.1883405233019016, Error= -6.88668430474172\n",
      "area_pixel=0.10089743077433866 area_sum=0.1975985528551173, Error= -0.9584101531490405\n",
      "area_pixel=0.1766548864688673 area_sum=0.22318010267156244, Error= -0.2633678418564125\n",
      "area_pixel=0.25109088769037413 area_sum=0.2655975809287263, Error= -0.057774670247056986\n",
      "area_pixel=0.32417700640380787 area_sum=0.32478500869308446, Error= -0.0018755256457617078\n",
      "area_pixel=0.33145182584890165 area_sum=0.3315266847325048, Error= -0.00022585147452852428\n",
      "area_pixel=0.2585468538588884 area_sum=0.2707660793719313, Error= -0.0472611649713285\n",
      "area_pixel=0.18431353138899453 area_sum=0.22673224761704203, Error= -0.230144341049614\n",
      "area_pixel=0.10871529186361073 area_sum=0.19921525714434177, Error= -0.832449269365603\n",
      "area_pixel=0.031879361127160166 area_sum=0.18817886639838455, Error= -4.902843085461407\n",
      "area_pixel=0.0516786050759066 area_sum=0.18972920865569384, Error= -2.6713299125821153\n",
      "area_pixel=0.12821845710443824 area_sum=0.20480976716609148, Error= -0.5973501147285452\n",
      "area_pixel=0.20348000269607525 area_sum=0.23646917599420864, Error= -0.1621248911983118\n",
      "area_pixel=0.27742223519467046 area_sum=0.2848668964954997, Error= -0.026835128394107295\n",
      "area_pixel=0.30448904708695324 area_sum=0.3069801039112242, Error= -0.008181104864371699\n",
      "area_pixel=0.23109311817280087 area_sum=0.25240391903066006, Error= -0.09221737551666921\n",
      "area_pixel=0.1563911444396311 area_sum=0.21450563771866094, Error= -0.37159708426753507\n",
      "area_pixel=0.08034023396766088 area_sum=0.19312989938141578, Error= -1.403900136252476\n",
      "area_pixel=0.003030390955018447 area_sum=0.18826638002902615, Error= -61.12610281100846\n",
      "area_pixel=0.08016458138626348 area_sum=0.19330112071777367, Error= -1.411303313446811\n",
      "area_pixel=0.15625257357013567 area_sum=0.2146009744277408, Error= -0.3734236148847482\n",
      "area_pixel=0.23094086131234093 area_sum=0.25241853923906143, Error= -0.09300077000090755\n",
      "area_pixel=0.3043974758491643 area_sum=0.3069515382822804, Error= -0.008390550631180861\n",
      "area_pixel=0.2794759217164895 area_sum=0.2863588885133661, Error= -0.024628120929354843\n",
      "area_pixel=0.2056873359875837 area_sum=0.23752623815656224, Error= -0.15479271981479928\n",
      "area_pixel=0.1305269986732256 area_sum=0.20527723159311873, Error= -0.5726802399481381\n",
      "area_pixel=0.05410651131387567 area_sum=0.1895974495526617, Error= -2.5041521796294273\n",
      "area_pixel=0.029328670887437625 area_sum=0.18822537933908215, Error= -5.417794384937672\n",
      "area_pixel=0.10622409484210493 area_sum=0.19865334343013114, Error= -0.8701344899706244\n",
      "area_pixel=0.18179639942024295 area_sum=0.22559809131176356, Error= -0.2409381705644678\n",
      "area_pixel=0.25606986659449404 area_sum=0.26906495574232875, Error= -0.05074821696382342\n",
      "area_pixel=0.32897514851033804 area_sum=0.32921667662545373, Error= -0.0007341834670775917\n",
      "area_pixel=0.324203523021545 area_sum=0.32475121655333133, Error= -0.0016893509567135576\n",
      "area_pixel=0.2512669572231374 area_sum=0.26555627768050605, Error= -0.05686907906748367\n",
      "area_pixel=0.17697580562618498 area_sum=0.22307486174973945, Error= -0.26048225044346823\n",
      "area_pixel=0.10136939449070326 area_sum=0.19729598245497995, Error= -0.9463072009675886\n",
      "area_pixel=0.024478376357279785 area_sum=0.18793028725846134, Error= -6.6774000250458405\n",
      "area_pixel=0.05889322163771027 area_sum=0.19029184769810842, Error= -2.231133268081594\n",
      "area_pixel=0.13523648926715737 area_sum=0.20704031204379167, Error= -0.5309500650729485\n",
      "area_pixel=0.21030702373043653 area_sum=0.2402176739630025, Error= -0.14222373414833878\n",
      "area_pixel=0.28401961730821057 area_sum=0.28994393843399036, Error= -0.020858844828844585\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1min 59s, sys: 4.61 s, total: 2min 3s\n",
      "Wall time: 7.97 s\n"
     ]
    }
   ],
   "source": [
    "%time res = multigonio.integrate([data[ds_names[i]] for i in range(9)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/mntdirect/_scisoft/users/kieffer/.jupy37/lib/python3.7/site-packages/matplotlib/pyplot.py:514: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).\n",
      "  max_open_warning, RuntimeWarning)\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOy9eXQUVfr/X2ncwA1Rj8h8MTqjuKEiiM4MIo46KjgD+lEHUUf4iYrbGBQ14xoQwXHccUWMIIij40JUVkECqOwQhCzsO9khG0nI+vz+6Onq6k4nVV2p595bN+/XOXU4Yqh3Pc+tW6lX0nXLIAAAAAAAAECbwZB9AAAAAAAAAABxQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAAAAAABoQ0AAAAAAAAAAaENAAAAAAAAAAGhDQAAAAEAhhg4dSoZh0I4dO2Qfii/p168fGQa+tQEAQEvgKgkAAET05Zdf0sMPP0yXX345HXvssWQYBt1xxx3Nfn16ejoZhhGxtW/fnjp37kx9+/alxx9/nNauXRv3cXglAJMnTybDMGjy5Mmt2o9q2PUHAgAAAPbgKgkAAER00UUXkWEYdMwxx9A555zjWAASExMpJSWFUlJS6KmnnqJ77rmHevbsaUrB7bffThUVFY6PIzc3l3Jycqi2trZV9bRVAdi1axfl5OSIPSgAAPAZEAAAACCihQsX0ubNm6mxsdG8uXciAP369Yv5/zMyMuiCCy4gwzDo+uuvZzrq5mmrAgAAAMAeCAAAAEThhQAQERUUFNDJJ59MhmHQjBkzHGXHusHdsWMHGYZBQ4cOpR07dtDgwYPpxBNPpCOPPJJ69epF33//fcQ+Qh+DibVZ91tXV0fvvvsuXXbZZXTsscdS+/btqUePHvT2229TQ0NDk2NrbGykN998k84991w68sgjqUuXLvTQQw9RaWkpJSYmUmJiYsTXWyVkzpw51K9fPzruuOMiPqIzY8YMuuOOO+iss86iDh06UIcOHahnz5701ltvNTmG5mqy5jb3EaCGhgZ6//336ZJLLqGjjz6aOnToQJdccgm99957MWsNjW1RURHde++91LlzZzriiCPovPPOo48//jjW0AEAgG+AAAAAQBReCQAR0bPPPkuGYdAtt9ziKLslAbjyyivp5JNPpssuu4xGjhxJd911Fx155JEUCARo4cKF5tdPnjyZBg0aRIZh0KBBg8yPKKWkpFBJSQkREdXW1tJ1111HhmHQ2WefTSNGjKCkpCS68MILyTAMuvPOO5sc2wMPPECGYVCXLl3oH//4B40aNYrOOuss6t27N3Xp0qVZAbjhhhuoXbt29Je//IWefPJJGjx4sPk1Z599Np177rl05513UnJyMt1///3UrVu3mMeQkpJiflQrKSnJrOmNN94wv6Y5Abj99tvJMAzq2rUrJSUl0ciRIykxMdH8mFY0hmHQRRddRN26daPu3bvTww8/TPfeey917NiRDMOgKVOmtDyQAACgMBAAAACIwksBWLBgARmGQaeddpqj7JYEwDAMGj16dMTXz507lwzDoP79+0f8vd1HgFJSUsgwDHr44Yepvr7e/Pv6+nq6++67yTAMSktLM/9+yZIlZBgGdevWzZQIIqKamhrq27dvk5/EW48hISGB5syZE/M4tm7d2uTvGhoa6K677iLDMGj58uW2/bESSwA+++wzMgyDLr744ojnMQ4ePEi9evUiwzBo+vTpEf8m1O/hw4dH9CcrK4vatWtH5557bsx8AADwAxAARaioqKDnn3+errvuOjrhhBM8+ezuDz/8QH369KH27dtTx44d6eabb8bnZgFwgJcCkJOTY64Q5ISWBCAxMTHiZjTEaaedRieeeGLE37UkAA0NDdSpUyfq3Lkz1dXVNfn/JSUllJCQQLfeeqv5d8OHDyfDMOiTTz5p8vU///xziwJw44032lTdlDVr1pBhGDRmzJiIv3cjANdccw0ZhkHz5s1r8vUhQfvTn/4U8feGYVCHDh2orKysyb+54ooryDCMuB7uBgAAlYAAKELoG/xpp51GV155ZasF4Pvvv6dAIECXXHIJvfXWWzR27Fg66aST6De/+Q0VFhZ6d+AAaIiXApCdnW3eTDqhJQEYNGhQzH/Tp08fCgQCEX/XkgCEpOSss86K+HiQdevQoQN1797d/DehlY22bdvWZH/19fV02GGHNSsA48ePb7be4uJiSk5OpgsuuICOPvroJp/vv++++2z7YyWWAHTq1IkCgQDV1NQ0+fq6ujpq164ddezYMeLvQx8BisUdd9xBhmHQ7t27m60LAABUBgKgCIcOHaK8vDwiIlq1alWrBeC8886jM888M+Ib3rp16ygQCNBjjz3W2sMFQGs4PgIUfXPcHHYPAcci1k1vSwIQ+om93Xb66aeb/+Z3v/sdGYZBBw8ejHkMp5xySrMC0NxDsyUlJXTGGWeQYRh06aWX0gMPPEDPPPMMpaSkUFJSUsya3QhAu3bt6KSTTor59aFjT0hIiPi7lsYWKxEBAPwOBEBB7ARg9uzZdPnll1OHDh3omGOOoQEDBlBmZqb5//fv30+GYdATTzzR5N+ef/751KVLF65DB0ALvBSAZ555hgzDoL/97W+OskUIwIYNG8gwDLrpppscHRMR0cUXX+z6NwDNXcteeeUVMgyDUlJSmvy/pUuXeiYAod8AxHq3Qug3AMcff3zE30MAAAA6AwFQkJYEYOrUqZSQkEDXX389vf322/Tyyy/T6aefTh07djS/GeXm5pJhGPT88883+fe9e/cmwzDM3zYAAJri5TKgJ510EhmGQd9++62jbK8EYOrUqWQYBn300UdNvr6uro46duxIp556quMXjoUeDHbzDEBzAjBixAgyDIPWr1/f5P+99NJLMWsOHUesh4eJYvfi6quvJsMwaMGCBU2+/scff2z2GQAIAABAVyAACtKcAFRUVFDHjh3p3nvvjfj7/Px8Ov74482/b2hooI4dO9LVV18d8XXFxcXmZ2xXr17NWgMAfsYLAVi3bp25pOaAAQMcZ3slALNmzWr2BwFERM899xwZhkH3338/VVVVNfn/ubm5lJWVZf73okWLzFWASktLzb+vqakxH4qNVwBCN/kTJkyI+Pu1a9ea7wuIrvmJJ54gwzAilj21EqsX06dPJ8MwqHfv3lRZWWn+fWVlpflDkU8//TTi30AAAAA6AwFQkOYE4JtvvjG/8RUVFUVs1157LZ155pnm1yYnJ5NhGPTPf/6TNm/eTKtXr6arrrqKDj/8cDIMg3766SfBVQGgNjNmzKChQ4fS0KFDzfXxf/vb35p/N2rUqIivDwlAYmKi+eDs008/Tffdd5+5tKRhBNeyb+5z87HwSgAOHDhAHTp0oOOOO44eeughGjt2LI0dO9a8ea+traWBAweSYRj0m9/8hv7+97/TP//5T7r77rupb9++FAgE6KWXXorY53333Wd+/SOPPEKjRo2ibt26me8BOOOMMyK+3k4A9u3bZ34856abbqInn3ySbrrpJjr88MNp8ODBMWsOLXv6u9/9jp588kkaO3Ysvf322y32gojob3/7m/lcw8iRI+nRRx81nz+wvpcgBAQAAKAzEAAFaU4AXn755RYf2DvuuOPMr62pqaHhw4dTIBAw//+1115L999/PxmGQRkZGYKrAkBtQuviN7dF/3Q7JADW7aijjqLOnTtT37596fHHH3c1z7wSACKiOXPm0O9///uI1XWs+21sbKSpU6fSVVddRSeccAIdfvjh1KVLF+rTpw+NGzeuySo3DQ0N9Prrr9PZZ59NRxxxBJ166qn04IMPUmlpKR1zzDFNVs2xEwCi4Lr6f/3rX+nkk0823wI8adKkFmt+7bXX6JxzzqEjjjiiydi09Cbgd999l3r16kXt27en9u3bU8+ePemdd95p8U3AsYAAAAD8DgRAQZoTgNCvy6dNm0bz589vsqWnpzfZV35+Pi1ZsoQ2bdpERERDhgyhQCCA9asBAJ6xefNmMgyDbrvtNtmHAgAAwAEQAAVpTgD++9//kmHEfpmNE+rr6+nUU0+lP/zhDx4cJQCgrZGXl9fkp+WVlZU0YMAAMgyDvvjiC0lHBgAAIB4gAArSnACUlZXRcccdR/369Yu5cofdC77+9a9/kWEY9NVXX3l5uACANkJycjKddtppdNddd1FycjINHTqU/t//+39kGAb179+fGhsbZR8iAAAAB0AAFOLtt9+msWPH0gMPPECGYdD//d//NXlwb/r06RQIBKh79+704osv0sSJE+mZZ56hHj160EMPPWTua9q0aXTjjTfS66+/Th9++KH5ANw999wjqzwAgM9ZsGABXX/99dS5c2c64ogjqEOHDtSjRw/697//7Xg5UQAAAPKBAChEYmJisw8gWh82S09Pp+uuu46OP/54Ouqoo+h3v/sd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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = jupyter.plot1d(res, calibrant=LaB6_new)\n",
    "ax.figure.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzde3wU1f3/8ZNkSUIghLuBElMTQAGLKAQEL/EGSkXESirgBZQvKN6LCYhgg1CRYL+AFxT8itSittY+lHqpClirVBT48kOU+03lJgSqAiIBkrx/f/DdLcvObnZPNplN8no+HvPwwezM7szuAT/vmXPOGAEAAACoM4zbBwAAAACg+hAAAAAAgDqEAAAAAADUIQQAAAAAoA4hAAAAAAB1CAEAAAAAqEMIAAAAAEAdQgAAAAAA6hACAAAAAFCHEAAAAACAOoQAAAAAANQhBAAAAACgDiEAAAAAAHUIAQAAAACoQwgAAAAAQB1CAAAAAADqEAIAAAAAUIcQAAAAAIA6hAAAAAAA1CEEAAAAAKAOIQAAAAAAdQgBAAAAAKhDCAAAAABAHUIAAAAAAOoQAgAAAABQhxAAAAAAgDqEAAAAAADUIQQAAAAAoA4hAAAAAAB1CAEAAAAAqEMIAAAAAEAdQgAAAAAA6hACAAAAAFCHEAAAAACAOoQAAAAAANQhBAAAAACgDiEAAAAAAHUIAQAAAACoQwgAAAAAQB1CAAAAAADqEAIAAAAAUIcQAAAAAIA6hAAAAAAA1CEEACCK5s2bJ2OM5s2bV22faYxRbm5utX0eUJEnnnhCHTp0UHJysowxmjFjhtuHZGXo0KEyxuirr75y+1Aq5dtvv9Utt9yin/3sZ4qPj5cxRt9//731+3311Vcyxmjo0KHRO8haIDc3V8ZQVqFmoKWiRjPG+C3x8fFq1qyZLr30Ur388svVfjwEgKqzd+9e3X///Wrbtq2Sk5OVnp6uyy+/XP/zP//j9qHhJH/6059kjNG5556rBx98UIWFhfr000/dPixHhYWFMsboww8/dHy9tgSAK6+8UnFxcRoyZIh++9vfqrCwUEeOHAm5T6h/VwgAzggAqEloqajRvIV/YWGhCgsL9dBDD+lXv/qVEhISZIzRb37zm2o9HgJA1fjpp5/Url07GWN0zjnn6IEHHtDIkSPVtWtX/fznP3f78HCSG2+8UcYY7dq1y+1DqVBFAWD37t1av369jh07Vr0HFkVHjx5VfHy8evfuHdF+BIDIEQBQk9BSUaN5A8CpFi9erLi4OMXFxVXr1TsCQNX429/+JmOMLrzwQpWVlfm9VhMKzbrk0ksvrTFFUEUBoDb45ptvrIp1AkDkCACoSWipqNGCBQBJ6tChg4wx+stf/uK3/rPPPtP111+v0047TfXq1VObNm00cuRIx0Lyf//3f3Xvvfeqc+fOatKkiZKSktS2bVuNHj1a3333XcD2wQLAd999p4suukhxcXGaMmVKhed19OhRPfHEEzr33HPVuHFj1a9fX5mZmerfv78WLVoU8B3k5uZq3759GjFihNLT05WYmKiOHTvqhRdecHzvp556Sn379tXpp5+uxMRENWnSRJdffrn+/ve/Ox5PZmamMjMz9cMPP+iuu+5S69atlZSUpA4dOuiJJ55QeXm5436RfNehvPPOOzLG6M4774xov3C88soruuSSS5SWlqakpCSdddZZmjx5skpKSgK29X7X3377rYYPH67WrVsrPj7e93t7u4xs3bpVTz75pH7xi18oOTnZr5AqKyvTs88+q27duqlBgwZKSUlRt27d9MwzzwSEm3A+Mxib33n16tUaNGiQMjMzlZiYqObNm+vcc8/VfffdV+FVcG8x7bRIFReNTsXThx9+6LvDt2rVKv3yl79UWlqa6tevr4svvliffPKJ43uVlpbq2WefVa9evdSoUSMlJycrOztbw4cP16ZNmySdaNOhjlcK3QXo1Vdf1UUXXeR7/7PPPltTpkxxbDfevz8//vij8vPzlZGRocTERGVnZ2vq1KlB//4Es2nTJt18881q3bq16tWrp1atWunmm2/2ndvJn+t0fqEKd++/YU5LYWGhJP/f8quvvtINN9ygZs2aKSkpSV27dtVbb70V9P0j+fsWzMaNGzV27Fh17dpVzZs3V2Jiok4//XSNGDFCO3bsCNjeth3t3r1bw4YNU4sWLZScnKxzzjlHf/jDH/ze72ShAsB7772nvn37qlmzZkpMTFRWVpby8/MrNRYDqAwCAGq0UAHgrLPOkjFGr732mm/d3LlzlZCQoJSUFA0aNEgFBQUaMGCA4uPj1apVK33zzTd+73H77berZcuWysvL0+jRo3X//ffroosukjFGHTp00MGDB/22dwoA33zzjTp06KB69epp/vz5YZ3X4MGDZYzR2WefrXvvvVdjx47VzTffrDPOOEMPPPBAwHdwzjnnqH379jr77LN19913a8SIEWrcuLGMMfrDH/7gt/23336r+Ph4XXjhhRo+fLgefPBBDR06VE2b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/R+6Ux/p7du3+wYhG2P06quvhv2+nTp1UmJiov7973+HvU9lA8Dll18uY4wWL14c8NoHH3wgY5zHANgEAJvf2ckf//hHGWN09913h/W5wQLAwYMHg97NOHDggO+uw8kiLdxKS0t90+aGMwZg0qRJQX8Pyfn3HD58uIwxev755wO237x5c9AxANEIAN4r06deBPDyzlAWjTEA3hmknNjczbH5++bE+2/v6NGjA17bsWOH74r7ySJtR9EcA+AN4sHGAABuIQCgRoskAKxfv1716tVTu3bttHHjxoDXjx496lfgev9Hc2p3gr179/quAoYKANKJguSmm27yvU84M30UFxfriy++CFh/8OBBpaeny+Px+P1PKdIA4C3+Tp1JxzuzUagA4DQLkLdLxMlFR6TfdShFRUUyxqhLly4BhfXRo0c1cuRI33GffOWzInPnzpUxJ/oxOw1M/O6777Ry5Uq/dZUNAC+//LKMMcrJyfEb03H48GHl5OTImMDZXWwDQKS/8yeffBIwO4skPf744zImcDaUYELNhX7WWWcpISFBa9eu9a0rLS31FdWVLdwk6aGHHpIxzrMAHT161G8WoFmzZskY4/i8DMn59/zkk09kzIkubye/V2lpqa9r1e9+97sKj9MrkgBQXl6uM888U8b4T28sSa+99pqMOTFeJBqzALVo0SLoMdsEAJu/b06+/fZbGWPUvXt3vzuShw4d0lVXXRW1djRs2DDHdh/pLEDewf09e/Z0DKU//vijPv300wrOGog+AgBqtEgCgCTNnz9f9erVk8fjUb9+/TR69Gjdc889uvbaa9W0aVOdeeaZvm1LS0t1wQUX+P7xLigo0C233KIWLVrowgsvVOvWrSsMANKJK/feK0b9+vWr8IE3q1atkjEn5n6/8cYbffOxe7sW3HvvvQHfQSQBwNt/NTU1VcOHD9fo0aN18cUXKz4+XgMHDgwaAE59DsA999wT8jkAkXzXoRw/ftx3XPXr11deXp4efPBB30OxvHcf0tPTFRcXFzCNZih33nmnjDkxZmPw4MEaO3asRowYoSuuuEKJiYm6/fbb/bavbACQpF//+te+AvL+++/Xb37zG51xxhkyxuiGG24I2N42AET6O1977bVKTU3VL3/5S911110aO3as+vXrp4SEBDVp0iTsAcGhAoC3CGzcuLFGjBihe+65R2effbbOPPPMqHQBkk4U+d47LaeffrruvPNOjR07VkOGDFHz5s39znndunWKj4/XaaedptGjR2vy5MmaPHmy7/Vgv+eYMWNkjFHLli115513qqCgQGeffbbv6rzTcwCiEQCkEw/XS01NVXx8vK677jqNGzdOv/rVrxQfH6/U1FR99tlnftvbBoBBgwb5/s367W9/q8mTJ/tCvk0AkCL/+1bRsZ199tkaPXq0hg8frtNPP13t27dXly5dotKO9uzZ4/s3Nzc3V+PGjQt4DsAjjzwS1nlPnTpVcXFxSklJ0cCBA1VQUKBRo0bpl7/8pRo0aKArr7wyrPMGookAgBot0gAgnZjhYejQoX5PR+3UqZNGjhypDz74wG/bf//73xo1apQyMzOVlJSkrKwsjRs3TocPH3b8n0awJwGXl5fr7rvvljFGffr0cbzS6vX999/rkUce0aWXXqrWrVsrMTFR6enpys3N1SuvvBIwqDjSACBJb731lnr06KGGDRsqLS1NvXv31kcffRT0+L3n+sMPP/geYJSYmKizzjor5JOAI/muK/LSSy/p0ksvVVpamu+pwoMHD/Y9xXPZsmW+Qa/vvvtu2O/71ltv6eqrr1aLFi1Ur149nXbaacrJydH48eO1fv16v22jEQDKyso0a9Ysde3aVfXr11f9+vV13nnn6emnnw75JGAbkfzO77//voYNG6YOHTqoUaNGSklJUfv27XXPPfdENEAxVACQTtyB6NixoxITE3Xaaadp5MiR2r9/f1QGAXsdP35cTz31lHJycnxPW27btq1GjBgRMHvP/Pnzdc455/jNkuQV6vf805/+pAsuuEANGzZUUlKSOnbsqN/97neOY1CiGQAkacOGDbrpppt8dwTT09N14403BjzMSrIPAHv37tXgwYPVsmVL3+xn3t/BNgBIkf19C+bw4cN66KGHlJ2draSkJLVp00Z33nln1NvRzp07dcstt6h58+Z+TwL23m059Y5jqPNesmSJ8vLy1KpVK9WrV0/NmzfXOeeco9/85jdasWJFWOcNRBMBAECFQhUwAFCXeLuZvffee24fCmCNAACgQgQAAHWNU5/9L774Qg0bNlTTpk3DmnEMiFUEAAAVIgAAqGtatWqliy66SKNGjVJ+fr6uvfZaeTwexcfHRzTWCIhFBAAAFSIAAKhrJk6cqC5duqhx48ZKSEhQs2bNdPXV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vHnyeDzau3ev79zq1atljNGmTZvq/F0LFy5UZmamKioqfOeOHDmirKwsnT171ndu+vTpmj59ut/P+fn5Cfl9A4gtCgAADcqdd96pVq1aBW1xP378eFR+pxMFwDfffBPR12toIl0AbN++XZcvX/Y7d+DAAaWlpWn48OG+c2fPnlVmZqZ+/vOf+1176NAhGWP0/PPP1/m7brzxRo0YMcLv3OrVq9WvXz+/c+PGjdMLL7zg+/n3v/+9jDHavHmz5fcFAHZQAABoULp06aIf/vCHlq49evSoxowZo7Zt2yo1NVUdO3bUhAkTfIngn/70J02cOFGdO3dWkyZNlJOTo6FDh/olnbNmzZIxJuA4dOhQrY95f/8DDzyg1q1bKzU1VV27dtXLL78ccJ/e1ykvL9ewYcOUlZWl7t27B02Cvdd++umnGjVqlJo3b67MzEyNHj1aFy5cCHjt9957T9///veVlpamTp066aWXXvK9Rm2sfDZ27snq/QR771Y/z3D06NFDPXr08P28ZMkSNWrUSH/605/8rjt69KiMMZo1a1atr/f555/LGKNXXnnF7/zixYt17733+n6urKxUXl6etm/f7nddTk6OfvrTn9p8NwBgDQUAgAalb9++atasWcCwjWt9+eWXateunTwejx5++GG99NJLeuKJJ3T99df7eg/Wrl2rbt266cknn1RZWZl+/vOfKzs7W/n5+b7E9Y9//KOGDRsmY4wWLlyoVatWadWqVfrmm29qfezYsWPq0KGD8vLy9Mwzz2jp0qUaNGiQ79qavAlw165ddffdd+uXv/yllixZUmsBcNNNN+mee+7RL3/5S40bN07GGL/hJJL0hz/8QWlpaerYsaPmzZunkpIStWvXTt26dauzALDy2YR7T+Hcz7XvPZzP06qrV6+qffv26tu3r+9cnz59VFRUpJMnT/od//M//yNjjObPn1/ra7766qsyxmj37t1+57dv3662bdvq6NGjOnPmjB544AENHDgw4Pm33367vv/979t6PwBgFQUAgAblnXfeUXJyspKTk9WzZ09Nnz5db7/9tiorK/2uGzlypJKSkrRz586A1/COsb548WLAY95Eb+XKlb5zdoYAjR07Vm3bttWpU6f8zt93331q3ry53+/2JtDDhg3zu7a2AmDMmDF+1w4ePFgtWrTwOzdw4EB5PB59+eWXvnOffvqp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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "28457\n",
      "68 60\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(*calc_fwhm(res, LaB6_new, 10, 95), \"o\", label=\"FWHM\")\n",
    "ax.plot(*calc_peak_error(res, LaB6_new, 10, 95), \"o\", label=\"error\")\n",
    "ax.set_title(\"Peak shape & error as function of the angle\")\n",
    "ax.set_xlabel(res.unit.label)\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total run time:  1788.4090461730957\n"
     ]
    }
   ],
   "source": [
    "print(\"total run time: \", time.time()-start_time)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion\n",
    "The calibration works and the FWHM of every single peak is pretty small: 0.02°. \n",
    "The geometry has been refined with the wavelength: \n",
    "The goniometer scale parameter refines to 0.999 instead of 1 and the wavelength is fitted with a change at the 5th digit which is pretty precise."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.7 local venv",
   "language": "python",
   "name": "python3.7"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "00be1d22c3714f99b4998fbfa214c8a7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "013e6a7942fb40a6b72992b3f85f561a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0150e71008d34e71a80301d2a9d1e76b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0205d5daad574287a5e36dafcec7ecab": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_61007b90b4d04930a85fe7b55b9c65c1",
       "max": 9,
       "style": "IPY_MODEL_e87923908dee47598e73e14d161d2349"
      }
     },
     "03c04b2b16674d1691bb790f76a8b467": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "040f091b7afb4b5faedad29670cde2c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_a7e32f3234924ddaa85afa83a12f29de",
       "max": 9,
       "style": "IPY_MODEL_dcb97e7e3ff84fd1972570d86608ae86"
      }
     },
     "04a886f335d14bc08afd4308ce6472a5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0507af15cbd64bc3954c8955bbd5a1de": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_ce406a83f91a4492b820d715c0f66df2"
      }
     },
     "070af2d9d61f4e0ba8b84f45dd383ea5": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_e7dedbc092f0422e943528d878bc7b91"
      }
     },
     "08239fa193184ee28f28f29951ff2ab6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0cbd50d48b8a476ca67f7eff91ed942d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "0d938ccb67e74edea9aa8f55108d8943": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_1161c0efee034045b4716939c217f8b2"
      }
     },
     "0dd43bfdb5664d78a53630b07bf966e7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1161c0efee034045b4716939c217f8b2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1639c8b38d5e4c0091a402ac212117e3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1ab6a052f2cb4341b0e7bb59593027cc": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1bbcc83ae38a4b6dadc93d0049db98c5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1c514eb48a154c7688c4205f96328493": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_74c1ea6a280f41baa91ca8f9ef727774"
      }
     },
     "2179b3cb4dbb4dd98728e17d9070ccf9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "25942cb3e2494e15803c2b1d32b6d4ff": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2774ca85f5ed480d8593321207297a92": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "28357404eecc40c88018a9308d195bf2": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_0dd43bfdb5664d78a53630b07bf966e7"
      }
     },
     "2bf4b349fc094ce487b5efb81aa42380": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_5f991c83f92345fbab1c3b19535c123f"
      }
     },
     "307fd8cc829246458237712078718fdb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "394ca8987deb4b07a4c7a866e836c679": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3b863574b18f49b893cff8153211bf06": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3d199ff19a02415eae116528c5dc16f6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "41e0e4a35d294726b8fcda341f21e775": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_307fd8cc829246458237712078718fdb"
      }
     },
     "425b83359dde4380ac0a4e4cfeb0283e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_8559ac90ab924f8885feab7a2f46e293",
       "max": 500,
       "style": "IPY_MODEL_4343b6421068418db324226a69e2a33c",
       "value": 214
      }
     },
     "4343b6421068418db324226a69e2a33c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "44a238152860438585576e2a18626c93": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4bb61694d54843b6b13421e600465348": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "4e7a7469400d4b328755ece3a70e9953": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_856dd89d9a4445e1b11c285ebeb2de20"
      }
     },
     "5285e75b3f3b4edeb2f45474250f267d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "55033a5e8dd947e2886556cdb9d8e92d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "591b1e4e24ff4a6f8b1c44e2b64cecf0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5a453b3b96bc41d4a62affc50ba873d8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5b12719654274f1d842eeb2b60d298d2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5c339a2d07da4e2abe205b8f3282fdbf": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_1ab6a052f2cb4341b0e7bb59593027cc"
      }
     },
     "5f991c83f92345fbab1c3b19535c123f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "5fb082dca8264d6191ad7f07de0c4f9a": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_d18b801643a54baf97048a81b491e1c8"
      }
     },
     "61007b90b4d04930a85fe7b55b9c65c1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "62c60c6ad25d44a3aeeb64cd2280576f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "62ce0c23ef574f639f9de0920030a78e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "6416199483114ebf9d034232e8033fc4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "644063599cd94a41961de434b1923475": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "6563060642ab4ebe84e9c9c17d928752": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "65d46021945a4d2d833e8a988972ee28": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "694bb2d7e05b4500ab105b7afae0918c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_0205d5daad574287a5e36dafcec7ecab",
        "IPY_MODEL_809d081102924a8695397a137bb45d4d",
        "IPY_MODEL_effe69d56e374ee28668c85a8959bcec"
       ],
       "layout": "IPY_MODEL_08239fa193184ee28f28f29951ff2ab6"
      }
     },
     "6ce9a736558a4ab99c33f65e0cd932f3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "6f9689536e214a4190553796ba6bf091": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "709c2bb5cb9a47d58ad71ffaa9b14949": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_040f091b7afb4b5faedad29670cde2c5",
        "IPY_MODEL_908f72e622ba483194fa6e33551e491b",
        "IPY_MODEL_8bccbcf68c444b0fbab1bbc43e5df7af"
       ],
       "layout": "IPY_MODEL_591b1e4e24ff4a6f8b1c44e2b64cecf0"
      }
     },
     "709d08c580cb4bb7a1b3144179de759e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "73761ce121a94af293289bbd1e5bcf02": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "74c1ea6a280f41baa91ca8f9ef727774": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "74d599e1b8bf492a844975dcd563213b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_841889510bc64a6e9e17f3c76ab6327a",
       "max": 500,
       "style": "IPY_MODEL_73761ce121a94af293289bbd1e5bcf02",
       "value": 250
      }
     },
     "79e01aa171324ebfaa812305d8598e3a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_cca78b86c1d140d79ec5003709dffd15",
        "IPY_MODEL_425b83359dde4380ac0a4e4cfeb0283e",
        "IPY_MODEL_2bf4b349fc094ce487b5efb81aa42380"
       ],
       "layout": "IPY_MODEL_bf8985f8594c4bbe91d810b4780a4704"
      }
     },
     "7a549c9118e34ac0bb49bc543eeaa5b1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7dbf697ea64a4eb9be2fe116cac9d0f3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "7fd8c56dacd64c78879a1667e5804bd3": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_b941d34d7b8b426ebd8a63fbadbc598b"
      }
     },
     "80774e3ee4d5422a89f2803e0beb04a0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "809d081102924a8695397a137bb45d4d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_5b12719654274f1d842eeb2b60d298d2",
       "max": 500,
       "style": "IPY_MODEL_644063599cd94a41961de434b1923475",
       "value": 480
      }
     },
     "8330adbf332a4074b6a91b1d176d13ea": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_e6b238f1fb434d7e84fdbb96a4022d42"
      }
     },
     "841889510bc64a6e9e17f3c76ab6327a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "84634a8f7dce472abe79b0e24069754f": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_6416199483114ebf9d034232e8033fc4"
      }
     },
     "84f2c61385d543caaf09088fbed49402": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8559ac90ab924f8885feab7a2f46e293": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "856dd89d9a4445e1b11c285ebeb2de20": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "89f8a8891a414ef7b84886a9fa0eb873": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_0150e71008d34e71a80301d2a9d1e76b"
      }
     },
     "8ba0dc114726493fa636d40f818258a2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "8bccbcf68c444b0fbab1bbc43e5df7af": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_d25a2af2da9c4b2ab62016079e11fbb9"
      }
     },
     "8f28275fdbba43b5a17d6553abfdce23": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "908f72e622ba483194fa6e33551e491b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "frame_id",
       "layout": "IPY_MODEL_b15d4bf3f52f4f1da53233143ef0b5bd",
       "max": 500,
       "style": "IPY_MODEL_c3ab50d1c01649fdb62018d0abc10db8",
       "value": 495
      }
     },
     "90f5051569e9467891e502389a4b803b": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_d8fe52e2b5e048ffbc7495127f6c79d6"
      }
     },
     "934ad7f899ef41368b7f233e00506642": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [
        "widget-interact"
       ],
       "children": [
        "IPY_MODEL_fff31fb004ae4bf6b7ccc8b2ac205de8",
        "IPY_MODEL_74d599e1b8bf492a844975dcd563213b",
        "IPY_MODEL_8330adbf332a4074b6a91b1d176d13ea"
       ],
       "layout": "IPY_MODEL_03c04b2b16674d1691bb790f76a8b467"
      }
     },
     "96cb6816c0c94655ac5f1872cc7aee1f": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_f9492ba5e81e40fabeedf91cc29a812f"
      }
     },
     "9968edfd33d0425ab43cf581e4ef50c7": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_2179b3cb4dbb4dd98728e17d9070ccf9"
      }
     },
     "a60aa3bc8aa84668b11742bd9e7c495a": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_a927a844201b428b8140b5ee06629b77"
      }
     },
     "a61d1c1bdc924b2e965f5a59653698df": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a7e32f3234924ddaa85afa83a12f29de": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a927a844201b428b8140b5ee06629b77": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ac90715928094acba545a86e996c384c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b15d4bf3f52f4f1da53233143ef0b5bd": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b2306b33f90c4473bd7ec0198a32edfa": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b73f32f580914908ae1c03cf4bb05e3f": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_e74470112e0b4253a6995395971459bf"
      }
     },
     "b7f38bb28e44465e8cb468415685207e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "b941d34d7b8b426ebd8a63fbadbc598b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "ba8f82017a424118a591f055eab51c8b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "bebfe94de147496fa38f9f0954738683": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "bf8985f8594c4bbe91d810b4780a4704": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c084be3c23c648058c01b4712b75bae1": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_1639c8b38d5e4c0091a402ac212117e3"
      }
     },
     "c1c0ab3ef278440c83c1f6494b3eec33": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_62c60c6ad25d44a3aeeb64cd2280576f"
      }
     },
     "c3ab50d1c01649fdb62018d0abc10db8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "c422f02a19b24cf59ffa27e59e6cbe76": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_3b863574b18f49b893cff8153211bf06"
      }
     },
     "c474be73f07e4a6bbc12f49e07924ce1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c516afff7ba44410b69f48d37b46cfa2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c5576a2c1810481d879da75b01c08534": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c826fa00cb0447e8b03b01940c449536": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c9cb9135eace43da87b31436944104aa": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_7a549c9118e34ac0bb49bc543eeaa5b1"
      }
     },
     "cca78b86c1d140d79ec5003709dffd15": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_80774e3ee4d5422a89f2803e0beb04a0",
       "max": 9,
       "style": "IPY_MODEL_f3b61123c15f4320ba75cb4b5f40a68a"
      }
     },
     "ce406a83f91a4492b820d715c0f66df2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d18b801643a54baf97048a81b491e1c8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d1953c95a05140598de14c4222d5e471": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d25a2af2da9c4b2ab62016079e11fbb9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d8137862d3c5400dbfa0ad6e265b4ce3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "d8fe52e2b5e048ffbc7495127f6c79d6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "dcb882225ae9416aa0b9829d77dbd0cb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "dcb97e7e3ff84fd1972570d86608ae86": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "df5ecf54da984e68852e5c90bed11ad7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e126c84b89cd4731ade33684de68df8c": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_fcce55c2ae964623b8bd523832bea047"
      }
     },
     "e1e1012b18864633a1210945f8c320a5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e3a4e8a244524b34a312540188a1468e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e6b238f1fb434d7e84fdbb96a4022d42": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e74470112e0b4253a6995395971459bf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e7dedbc092f0422e943528d878bc7b91": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e87923908dee47598e73e14d161d2349": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "ef361c8bcf2e43cea87accf1f8a50258": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "efb9ab08375a43d89192229cbfece970": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "effe69d56e374ee28668c85a8959bcec": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_6563060642ab4ebe84e9c9c17d928752"
      }
     },
     "f3b61123c15f4320ba75cb4b5f40a68a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "f4a882a6889a40b99a1289e8c480f13b": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_00be1d22c3714f99b4998fbfa214c8a7"
      }
     },
     "f76dc12d5f8f4d2d9fa0ebe01319d9ae": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "f9492ba5e81e40fabeedf91cc29a812f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fa9b3a8e1a0a4870bd35b5ca0507f82d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "faced9f196f1415090e677c0d225fcbf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fcce55c2ae964623b8bd523832bea047": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fd28abe8abec4d0e8e265f2f34affd0a": {
      "model_module": "jupyter-matplotlib",
      "model_module_version": "^0.3.0",
      "model_name": "MPLCanvasModel",
      "state": {
       "_dom_classes": [],
       "_id": "",
       "_toolbar_items": [
        [
         "Home",
         "Reset original view",
         "fa fa-home icon-home",
         "home"
        ],
        [
         "Back",
         "Back to  previous view",
         "fa fa-arrow-left icon-arrow-left",
         "back"
        ],
        [
         "Forward",
         "Forward to next view",
         "fa fa-arrow-right icon-arrow-right",
         "forward"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Pan",
         "Pan axes with left mouse, zoom with right",
         "fa fa-arrows icon-move",
         "pan"
        ],
        [
         "Zoom",
         "Zoom to rectangle",
         "fa fa-square-o icon-check-empty",
         "zoom"
        ],
        [
         "",
         "",
         "",
         ""
        ],
        [
         "Download",
         "Download plot",
         "fa fa-floppy-o icon-save",
         "download"
        ]
       ],
       "layout": "IPY_MODEL_8ba0dc114726493fa636d40f818258a2"
      }
     },
     "fff31fb004ae4bf6b7ccc8b2ac205de8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.1.0",
      "model_name": "IntSliderModel",
      "state": {
       "description": "module_id",
       "layout": "IPY_MODEL_ac90715928094acba545a86e996c384c",
       "max": 9,
       "style": "IPY_MODEL_f76dc12d5f8f4d2d9fa0ebe01319d9ae",
       "value": 4
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
