{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib nbagg\n",
    "import time\n",
    "start_time = time.time()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Variance of SAXS data\n",
    "\n",
    "There has been a long discussion about the validity (or not) of pixel splitting regarding the propagation of errors [#520](https://github.com/silx-kit/pyFAI/issues/520) [#882](https://github.com/silx-kit/pyFAI/issues/882) [#883](https://github.com/silx-kit/pyFAI/issues/883).\n",
    "So we will develop a mathematical model for a SAXS experiment and validate it in the case of a SAXS approximation (i.e. no solid-angle correction, no polarisation effect, and of course small angled $\\theta = sin(\\theta) = tan(\\theta)$)\n",
    "\n",
    "## System under study\n",
    "\n",
    "Let's do a numerical experiment, simulating the following experiment:\n",
    "\n",
    "* Detector: 1024x1024 square pixels of 100µm each, assumed to be poissonian. \n",
    "* Geometry: The detector is placed at 1m from the sample, the beam center is in the corner of the detector\n",
    "* Intensity: the maximum signal on the detector is 10 000 photons per pixel, each pixel having a minimum count of a hundreed.\n",
    "* Wavelength: 1 Angstrom\n",
    "* During the first part of the studdy, the solid-angle correction will be discarded, same for solid angle corrections.\n",
    "* Pixel splitting is disables, for this we use one of the folloging rebinning engines:\n",
    "  - numpy: the slowest available in pyFAI\n",
    "  - histogram: implemented in cython\n",
    "  - nosplit_csr: using a look-up table\n",
    "  - nosplit_csr_ocl_gpu: which offloads the calculation on the GPU.\n",
    "  \n",
    "  We will check they all provide the same numerical result\n",
    "  \n",
    "Now we define some constants for the studdy. The dictionary *kwarg* contains the parameters used for azimuthal integration. This ensures the number of bins for the regrouping or correction like $\\Omega$ and polarization are always the same."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "pix = 100e-6\n",
    "shape = (1024, 1024)\n",
    "npt = 1000\n",
    "nimg = 1000\n",
    "wl = 1e-10\n",
    "I0 = 1e4\n",
    "Rg = 1.\n",
    "kwarg = {\"npt\":npt, \n",
    "         \"correctSolidAngle\":False, \n",
    "         \"polarization_factor\":None,\n",
    "         \"safe\":False}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pyFAI version 0.18.0\n",
      "Detector Detector\t Spline= None\t PixelSize= 1.000e-04, 1.000e-04 m\n"
     ]
    }
   ],
   "source": [
    "import numpy\n",
    "from scipy.stats import chi2 as chi2_dist\n",
    "from matplotlib.pyplot import subplots\n",
    "from matplotlib.colors import LogNorm\n",
    "import pyFAI\n",
    "print(\"pyFAI version\", pyFAI.version)\n",
    "from pyFAI.detectors import Detector\n",
    "from pyFAI.azimuthalIntegrator import AzimuthalIntegrator\n",
    "from pyFAI.method_registry import IntegrationMethod\n",
    "from pyFAI.gui import jupyter\n",
    "detector = Detector(pix, pix)\n",
    "detector.shape = detector.max_shape = shape\n",
    "print(detector)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define in *ai_init* the geometry, the detector and the wavelength. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detector Detector\t Spline= None\t PixelSize= 1.000e-04, 1.000e-04 m\n",
      "Wavelength= 1.000000e-10m\n",
      "SampleDetDist= 1.000000e+00m\tPONI= 0.000000e+00, 0.000000e+00m\trot1=0.000000  rot2= 0.000000  rot3= 0.000000 rad\n",
      "DirectBeamDist= 1000.000mm\tCenter: x=0.000, y=0.000 pix\tTilt=0.000 deg  tiltPlanRotation= 0.000 deg\n",
      "Solid angle: maxi= 9.999999925000007e-09 mini= 9.693768051738431e-09, ratio= 0.9693768124441685\n"
     ]
    }
   ],
   "source": [
    "ai_init = {\"dist\":1.0, \n",
    "           \"poni1\":0.0, \n",
    "           \"poni2\":0.0, \n",
    "           \"rot1\":0.0,\n",
    "           \"rot2\":0.0,\n",
    "           \"rot3\":0.0,\n",
    "           \"detector\":detector, \n",
    "           \"wavelength\":wl}\n",
    "ai = AzimuthalIntegrator(**ai_init)\n",
    "print(ai)          \n",
    "\n",
    "#Solid consideration:\n",
    "Ω  = ai.solidAngleArray(detector.shape, absolute=True)\n",
    "\n",
    "print(\"Solid angle: maxi= {} mini= {}, ratio= {}\".format(Ω.max(), Ω.min(), Ω.min()/Ω.max()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "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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XnrppbCf1a5dW0lJSSoqKgquOedUrVo1+Xw+OefUtGlTLV68OOS4oqIiJSYmasSIEWHnHD9+vJxzOnHiRLQvkaEFAAC4CmQpm3JbAJo3b66uXbuGrW/fvl3OOc2bNy/icUeOHJHP59OQIUNC1nfu3Bn8gO+lv7PfsWNHzZw5U2+++aaef/55tWjRQs45zZ07N+SczjlNnjw57Hp5eXlyzmnnzp2lvp5Dhw5p27ZtIVt+fj5DCwAAYEQBsCm3BeC6665Tz549w9Z3794t55yeffbZEo/t27ev4uPj9fTTT2v37t1au3atWrZsqSpVqsg5p08//bTEY8+ePasWLVooNTVVp0+fliTt379fzjlNnz49bP8XX3xRzjl98MEHpb6enJycEp84xNACAABEjwJgU24LgPUdAEk6duyYevXqFRKyBw4cqD59+sg5p4KCglKvPW/ePDnngk8b4h0AAACA8ocCYFNuC4D1MwCX2rdvn9asWaO9e/dKkjp06KDatWtf8bgVK1bIOac333xTEp8BAAAAKI/IUjbltgBkZ2dHfArQlClTSn0KUEkKCgqUkJCg/v37X3Hf2bNnyzmn9evXB9duueWWiE8BuvPOO3XddddFdS/FGFoAAAA7spRNuS0AGzZsCPsegMLCQjVq1Ejt2rULru3bt087duy44vkeeeQR+f3+kOf4Hz58OGy/EydOqGHDhkpLS9PZs2eD67/+9a/lnNPmzZuDazt37lRcXJzGjBkT9euTGFoAAICrQZayKbcFQJKysrIUHx+vUaNGaf78+erYsaPi4+O1Zs2a4D6dO3eWc6EvY9q0aRowYIBmzZqluXPnqnv37nLO6cknnwzZLycnRy1bttT48eP1wgsvaNKkScrIyJDP59Orr74asm9xMfjWt76lp556Ss8++6zq16+vevXqRSwSZcHQAgAA2JGlbMp1AThz5oyys7OVnp6uxMREZWZmauXKlSH7RCoAb7/9ttq2bauUlBQFAgG1b99er7/+etj53333Xd15551KT09XlSpVlJqaqu7du2v16tUR7+fTTz/V/fffr2uuuUbJycn6wQ9+oE8++cT8+hhaAAAAO7KUTbkuABUdQwsAAGBHlrKhAHiIoQUAALAjS9lQADzE0AIAANiRpWwoAB5iaAEAAOzIUjYUAA8xtAAAAHZkKRsKgIcYWgAAADuylA0F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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(0.9, 1.1)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Validation of the flatness of a flat image integrated\n",
    "flat = numpy.ones(detector.shape)\n",
    "res_flat = ai.integrate1d(flat, **kwarg)\n",
    "crv = jupyter.plot1d(res_flat)\n",
    "crv.axes.set_ylim(0.9,1.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "timeit for method= numpy max error: 0.0\n",
      "44.8 ms ± 69.9 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "timeit for method= histogram max error: 0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.ext.splitBBoxCSR:Pixel splitting desactivated !\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "42.4 ms ± 2.51 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "timeit for method= nosplit_csr max error: 0.0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.ext.splitBBoxCSR:Pixel splitting desactivated !\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "44.7 ms ± 2.97 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "timeit for method= nosplit_csr_ocl_gpu max error: 1.1920929e-07\n",
      "1.77 ms ± 844 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "#Equivalence of different rebinning engines:\n",
    "\n",
    "for method in \"numpy\", \"histogram\", \"nosplit_csr\", \"nosplit_csr_ocl_gpu\":\n",
    "    ai.reset()\n",
    "    new_method = IntegrationMethod.select_one_available(method, dim=1)\n",
    "    res_flat = ai.integrate1d(flat, method=new_method, **kwarg)\n",
    "    print(\"timeit for method=\", method, \"max error:\", abs(res_flat.intensity-1).max())\n",
    "    %timeit res_flat = ai.integrate1d(flat, method=new_method, **kwarg)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# so we chose the nosplit_csr_ocl_gpu, other methods may be faster depending on the computer\n",
    "kwarg[\"method\"] = IntegrationMethod.select_one_available(\"nosplit_csr_ocl_gpu\", 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdd3jV9d3/8ZOQClbr7LK3t2FZUajzFosTqRWxUqsWa7212KFWe9vhDwxDCBpBkClLKA6cVKwFIYuEHfYUCGEkJBAIEAIk5BCSkzNevz+QLxwSRj4k+ZzxfFzX9w+TQ/JOfHNdrxfnO1wCAAAAEDVctgcAAAAA0HgoAAAAAEAUoQAAAAAAUYQCAAAAAEQRCgAAAAAQRSgAAAAAQBShAAAAgLAUCATkdrtVVFSk/Px8bdu2jYMjKo/8/HwVFRXJ7XYrEAic8e8OBQAAAISdQCCgvXv3KicnRzk5OcrNzbUewjg4bB25ubnO34W9e/eesQRQAAAAQNhxu93KycnR9u3b5fF4bI8DWOfxeLR9+3bl5OTI7Xaf9rUUAAAAEHaKioqUk5ND+AdO4PF4lJOTo6KiotO+jgIAAADCTn5+vnJzc22PAYSc3Nxc5efnn/Y1FAAAABB2jp37DCBYXl7eGf9uUAAAAEDYoQAAtTubvxsUAAAAEHYoAEDtKAAAACAiUQCOi4+PV/fu3a1878TERLlcoRUnCwoK5HK59MEHH5zz1wq1n++ee+7RPffcc9rXUAAAAEBEioYCsH79ej322GO66qqr1LRpU/3oRz/Sfffdp9GjRwe9LlwLwLhx4+olpJ+MAkABAAAAESjSC8DixYt13nnnqXXr1kpKStKkSZPUv39/3X///WrVqlXQa6uqqlRdXW1lznMJyG3btj1jmDVRnwXA6/WqsrLy3IeqJxQAAAAQtSK9ADz44IP63ve+p9LS0hqfKy4utjBR7SK9AIQaCgAAAIhakV4ArrnmGnXs2PGsXnvyKUAffPCBXC6XsrKy9NJLL+m73/2uLr74Yj333HPyeDwqLS3V008/rUsuuUSXXHKJevbsqUAg4Pz5efPmyeVyad68eUHfp7ZgXVsBeP/993Xvvffqe9/7ns477zxde+21Gj9+fI2ZXS5X0HFisC0tLdXf/vY3XXnllTrvvPPUqlUrDR48WH6/P+jrlJaWqnv37rrooot08cUX63e/+53Wrl17VgWgurpaAwYMUOvWrdW0aVNddtlluuOOO5SRkXHan+/IkSN66aWXdPnll+vCCy9U165dtWvXLrlcLiUmJtb4s7m5uerevbsuvvhiXXTRRXrmmWdUUVFR59+ZRAEAAABRLNILwP3336/vfOc72rBhwxlfe6oCcOONN+qBBx7QuHHj9PTTT8vlcumVV17RnXfeqSeffFLjx4/XQw89JJfLpQ8//ND58+daAG699VY988wzGjlypMaMGaP7779fLpdLY8eOdV4zbdo0XXnllWrTpo0+/vhjffzxx07wrqio0PXXX6/LL79cffr00YQJE/S73/1OMTEx+tvf/uZ8jUAgoLvvvluxsbF68cUXNWbMGHXq1EnXX3/9WRWAPn36KCYmRs8++6wmTZqk4cOH67e//a0GDx582p/v8ccfl8vl0tNPP61x48bp8ccf1w033HDKAnDTTTfp0Ucf1fjx4/WnP/3J+f9Q19+ZRAEAAABRLNILQEZGhpo0aaImTZqoQ4cOeuWVVzRr1qxaz/U/VQHo3Llz0L/sd+jQQTExMfrzn//sfMzn8+nKK68MCpXnWgCOHDlSY8bOnTurZcuWQR871SlASUlJuuCCC7R169agj/fq1UtNmjRRYWGhJGn69OlyuVx66623gn6eu+6666wKwA033KBf/OIXp33NyT/f6tWr5XK59Pe//z3odc8888wpC8Af/vCHoNc+8sgjuvzyy4M+dra/MwoAAACIWqcLOQNmZOvxCUtC4hgwI9v4Z1yxYoUeeeQRffvb33ZOk/ne976nr776Kuh1pyoAU6dODXrd3//+d7lcLq1cuTLo47/61a/03//9385/n2sBOFFZWZlKSko0aNAguVwulZWVOZ87VQG4/vrr9cADD6ikpCTomD17tlwulz755BNJ0nPPPae4uDi53e6gPz916tSzKgD33HOPmjdvXqNonOjkn2/gwIFyuVw1/syxYlBbAVixYkXQa0eMGCGXy6VDhw7V+j1P9zujAAAAgKh1upDz+IQlik9IDonj8QlLzvln9Xg8WrFihXr37q1mzZrpW9/6ljZu3Oh8/lQFYNmyZUFf51gg3bt3b9DHu3fvrgsvvND573MtAIsWLdLPfvazoOJy7NixY4fzulMVgPPPP7/GnzvxGDFihKSj/0J+YnE5Zt26dWdVABYsWKBLLrlELpdL7dq1U48ePbRu3bqg15z88z333HOKjY2V1+sNet2hQ4dOWQBO/n0f+/+zffv2Ov/OKAAAACBqRcM7ALU5Fh4HDBjgfOxUBeDkf+k/FkhLSkqCPt69e3dd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Wl9bVVWlV155RVdccYWaNWum9u3bKyMjo9bXvvDCC2rWrJlcLpcefPBBBQKBOs3F0gKn9s78PKcEXNsvTQu37rM9EgAgxJClzIREAfjRj36kv/71r6f8/EsvvaQrrrjC+OsXFBTI5XLpqquuUseOHU9bAJ544gnFxcWpR48emjhxojp06KC4uDhlZWXV+nqfz6fZs2dr1KhRdZ6LpQVOb8ryHWrR62gJaN0nRSnrd9seCQAQQshSZkKiADRt2lTjxo075efHjRunpk2bGn/9qqoq7dmzR9LR03VOVQCWL18ul8uloUOHOh+rrKxUq1at1KFDh9N+j4ceekgpKSl1moulBc4sZf1ute6ToviEZLXolax/rdhheyQAQIggS5kJiQLQtm1bde7c+ZSf79y5s6677rp6+V6nKwA9e/ZUkyZNalxvMGjQILlcLhUWFp7y6z7wwAN6++236zQLSwucnYVb96nNq2nOKUET5ufZHgkAEALIUmZCogCMGzdOMTEx6tKli2bNmqWCggIVFBQoPT1dDz74oGJjYzV+/Ph6+V6nKwD33Xefrr322hofnz17tlwul3Orz7KyMn366adyu93yer2aOnWqmjZtqrVr19ZpFpYWOHurth/U9QNmOSVgcNqmOl93AwCILGQpMyFRACQpMTFRTZs2VWxsbNDRtGlTDRgwoN6+z+kKQNu2bdWpU6caH9+4caNcLpcmTJggSTp06JA6duyoiy++WBdddJFuvvlmffnll6f9vsXFxcrOzg46pk+fztICdbB5T7lufSPTKQG9vlwvn58SAADRigJgJmQKgCSVlJRoypQpGjx4sAYPHqwpU6aopKSkXr/H6QpAy5Yt1aVLlxof37Ztm1wul0aOHGn8fRMTE+VyuWo9WFrg7O3YX6G7hsx1SsCzH65UZXXoPSsEANDwKABmQqoANIb6eAfABO8AAPWn+FClOo9c4JSAR8cvVmmFx/ZYAIBGRgEwExIFIDMzU7179z7l5/v06aM5c+bUy/eqj2sA6gtLC5g7VFmtJyYudUpAp2HztPNghe2xAACNiCxlJiQKwN13362nnnrqlJ/v3r277r333nr5XqcrAD169Kj1LkADBw48412ATLC0wLmp8vr0f5+tcUrArW9kamNR6D41HABQv8hSZkKiAFx66aUaM2bMKT8/duxYXX755fXyvU5XAJYt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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8d67f9f518>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Generation of a \"SAXS-like\" curve with the shape of a lorentzian curve\n",
    "\n",
    "q = numpy.linspace(0, res_flat.radial.max(), npt)\n",
    "I = I0/(1+q**2)\n",
    "fig, ax = subplots()\n",
    "ax.semilogy(q, I, label=\"Simulated signal\")\n",
    "ax.set_xlabel(\"q ($nm^{-1}$)\")\n",
    "ax.set_ylabel(\"I (count)\")\n",
    "fig.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "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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vIbN6nkN+XT367KZ3a9Le7EGz+h+VTf0vAb9V9drwH29WPd2vy65p9s1seru7lfFXcWv8jt6XBP6Te9+lf1nN2tat+vGPrd3vy6a2v0yUzpdV5sJMsZo3759vv/sQoohAEA0/OAHP+jyZmYWi8VisdK0duzY4fvPLqQYAgBEw2uvvSZjjH784x9r//79rATXjh07cn9wfL+XNC2uK9c2xsW19Xtd9+3bpx07dujYsWO+/+xCiiEAQDTs33/+HoD9+5mLTBqurR24rvbg2tqDa2sHriuEBAEAooEPT3twbe3AdbUH19YeXFs7cF0hJAgAEA18eNqDa2sHrqs9uLb24NragesKIUEAgGjgw9MeXFs7cF3twbW1B9fWDlxXCAkCAETD0aNH9fTTT+vo0aO+30rq4NragetqD66tPbi2duC6QkgQAAAAAAAAMgQBAAAAAAAgQxAAAAAAAAAyBAEAAAAAACBDEAAAAAAAADIEAQCCp7W1VV/84hc1YsQI9e/fXzfccIN+8Ytf+H5bQfKb3/xGCxYs0Mc//nFVVlbqiiuuUENDg/7whz/knXvw4EHV19erqqpK1dXVmj17tt57772889ra2rRixQpdeeWVKi8v17hx47R161YXP07QfO1rX5MxRnV1dXn/7dVXX9VNN92kiooKDRs2TAsXLtTJkyfzzuN3+5/s27dPd955p6qrq1VRUaG6ujqtXLmywzlc18I5dOiQZsyYoZEjR6qiokIf+9jH9JWvfEWnTp3qcB7XtmtOnjypp556SvX19aqurpYxRs8880yn59r4XO3tawIUAgEAgmfmzJkqKyvT4sWLtX79ek2YMEFlZWXas2eP77cWHPfdd5+GDx+uhQsXauPGjWpsbNSwYcNUVVWl3/3ud7nzWlpadNlll2nMmDFauXKlli1bpurqal1zzTU6c+ZMh9dcunSpjDF66KGHtGHDBk2fPl3GGG3bts31jxcMLS0tqqysVFVVVV4AeOONN9S/f39de+21WrdunZ544gmVl5fr9ttvz3sdfrfP89JLL6lfv34aP368vvWtb2nDhg16/PHHtWTJktw5XNfCaW5u1qBBg1RTU6Ovf/3rWr9+vR544AEZY3TXXXflzuPadk9TU5OMMRo1apRuueWWLgOAjc/VQl4ToBAIABA0e/fulTFG3/jGN3LHTp8+rTFjxmjChAke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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f8d67f7dd68>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Reconstruction of diffusion image:\n",
    "\n",
    "img_theo = ai.calcfrom1d(q, I, dim1_unit=\"q_nm^-1\", \n",
    "                         correctSolidAngle=False, \n",
    "                         polarization_factor=None)\n",
    "fig, ax = subplots()\n",
    "ax.imshow(img_theo, norm=LogNorm())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXhU9fn//5NFgooJYVFQFBBUFAWBn1hQAdECol5WqX5tv2VpP1U/qNSlYNV+nZMQdlBUdq2golJ3xFoRcGULa1jDFkjYl4BJCNkzef3+UA4MSSA5Wd6zPB/X9f6DmTMz94y313W/cjZLAAAAAEKGZboAAAAAALWHAAAAAACEEAIAAAAAEEIIAAAAAEAIIQAAAAAAIYQAAAAAAIQQAgAAAPB7RUVFOnLkiHbt2qWdO3eyWKzT1q5du7R//35lZ2erpKTknP8/EQAAAIBfKykpUWpqqpKTk7Vt2zbjwxaL5W9rx44dSk5OVnJysg4dOnTOEEAAAAAAfi0rK0vJycnav39/hf66CYSigoICpaWlKTk5WdnZ2WfdlgAAAAD82t69e5WcnKyioiLTpQB+raCgwAnLZ0MAAAAAfm3Xrl3avn276TKAgLBjxw7t2rXrrNsQAAAAgF/buXOnUlJSTJcBBISUlBTt3LnzrNsQAAAAgF87eaIjgHOryP8vBAAAAODXCABAxREAAABAwCMA/KJ58+YaOHCgkc+2bVuW5V9jY2pqqizL0qxZs6r8Xv72/bp3767u3bu7ei0BAAAABLxgDwAbNmxQv379dMUVVygqKkqXXnqp7rzzTr3++us+2wVqAJgyZUq1DOlnIgCUjQAAAAACXjAHgKVLl6pOnTpq3bq1EhIS9Oabb8rj8ahXr15q1aqVz7b5+fkqLCw0UmdVBuS2bdu6HmbPpjoDQFFRkfLy8qpeVDUhAAAAgJAWzAGgb9++aty4sTIyMko9d/jwYQMVlS3YA4C/IQAAAICQFswB4JprrlGPHj0qtO2ZhwDNmjVLlmVp8eLFGjJkiBo1aqSYmBg9+uijKigoUEZGhvr376/69eurfv36GjZsmM+dlL///ntZlqXvv//e53PKGqzLCgAzZ87U7bffrsaNG6tOnTq69tprNXXq1FI1W5bls04fbDMyMvTUU0+pWbNmqlOnjlq1aqUxY8bI6/X6vE9GRoYGDhyo6OhoxcTEaMCAAUpKSqpQACgsLFRcXJxat26tqKgoNWjQQLfccosWLFhw1u+Xm5urIUOGqGHDhqpXr57uvfde7du3T5ZlybbtUq/dsWOHBg4cqJiYGEVHR2vQoEHKycmp9G8mEQAAAECIC+YA0KtXL1100UXauHHjObctLwDceOON6tOnj6ZMmaL+/fvLsiw999xzuvXWW/XHP/5RU6dO1T333CPLsvTOO+84r69qALjppps0aNAgTZw4UZMmTVKvXr1kWZYmT57sbPP555+rWbNmatOmjWbPnq3Zs2c7g3dOTo7atWunhg0b6sUXX9T06dM1YMAAhYWF6amnnnLeo6SkRN26dVN4eLgef/xxTZo0ST179lS7du0qFABefPFFhYWF6ZFHHtGbb76pl19+WX/4wx80ZsyYs36/hx56SJZlqX///poyZYoeeughtW/fvtwA0KFDBz3wwAOaOnWq/vrXvzr/HSr7m0kEAAAAEOKCOQAsWLBAERERioiIUJcuXfTcc8/pm2++KfNY//ICQO/evX3+st+lSxeFhYXpf//3f53HiouL1axZM5+hsqoBIDc3t1SNvXv31pVXXunzWHmHACUkJOjCCy8sdZfn559/XhEREdqzZ48kae7cubIsS+PGjfP5PrfddluFAkD79u119913n3WbM7/fmjVrZFmWnn76aZ/tBg0aVG4A+Mtf/uKz7f3336+GDRv6PFbR34wAAAAAQlp5A03cvE16aPoyv1lx8za5+n4rV67U/fffrwsuuMA5TKZx48b64osvfLYrLwB89NFHPts9/fTTsixLq1at8nn8d7/7nS6//HLn31UNAKfLzMxUenq6Ro0aJcuylJmZ6TxXXgBo166d+vTpo/T0dJ+1aNEiWZal9957T5L06KOPKjIyUtnZ2T6v/+ijjyoUALp3764WLVqUChqnO/P7jRw5UpZllXrNyWBQVgBYuXKlz7avvPKKLMtSVlZWmZ95tt+MAAAAAEJaeQPNQ9OXqfk//uM366Hpy6r0PQsKCrRy5Uq98MILqlu3rs477zxt3rzZeb68AJCYmOjzPicH0kOHDvk8PnDgQNWrV8/5d1UDwJIlS3THHXf4BJeTa/fu3c525QWA888/v9TrTl+vvPKKpF/+Qn56cDlp/fr1FQoAP/74o+rXry/LsnT99ddr6NChWr9+vc82Z36/Rx99VOHh4SoqKvLZLisrq9wAcObvffK/T1paWqV/MwIAAAAIacG+B6AsJ4fHuLg457HyAsCZf+k/OZCmp6f7PD5w4EBdeOGFzr9/+OGHMgNASkrKOQNASkqKoqKi1L59e02fPl1fffWVFi5cqGeeeUaWZSk1NdXZtrwAEBUVpd/+9rdauHBhmevkQFzVACBJx44d08yZM/Xwww+rfv36ioiI0Jtvvlnu93MTAM78vU/+9zn5W1TmNyMAAACAkBbM5wCUZ+PGjbIsS4899pjzWHUHgJMD9Oeff+6z3bfffnvOADBx4sRSf7WWfjnh9sxh9vrrry9zmL3uuuvUpUuXcn+Dk6p6CNCZsrOz1aFDB1122WXOY9VxCNC5AkBlfjMCAAAACGnBHAC+++47nxN4Txo7dqzPYTBS9QeAzMxMRURE6JlnnvHZrl+/fucMAK+//nqpw1syMzPVtGnTUsPszTffrPbt25f6jnFxcbIsS/Pnzy/1XEZGhvPX96qeBHz06NFSjz344INq1KhRud9v9erVlT4J+FwBoDK/GQEAAACEtGAOAG3btlXLli317LPP6o033tDkyZP1xz/+UREREWrRooXPDcKqOwBI0sMPP6zIyEg9++yzmjJliu666y516tTpnAFg69atqlOnjm644QZNnjxZY8aMUatWrZzLZJ4+zD7++OMKCwtTQkKC5syZo2+//VbSL5cB7dixoyIjI/XXv/5V06ZN04QJE5w6T9bv9Xp1yy23OJcBnTx5cqUuA3rxxRfroYce0tixY/Xmm2/qscceU1hYmIYMGVLu95NOBaHTLwN64403ljo0q6IBoDK/GQEAAACEtGAOAF9//bX+8pe/qE2bNqpXr57q1Kmj1q1ba8iQIaXuBFwTASA9PV39+vXTBRdcoNjYWD322GPatGlThU4Cnjdvntq1a6e6deuqRYsWGjt2rGbOnFlqmD106JDuvvtuXXTRRbIs3xuBZWdn64UXXlDr1q1Vp04dNWrUSF27dtWECRN8LoV67Ngx9e/f37kRWP/+/St8I7ARI0aoc+fOql+/vs4//3y1adNGI0eO9Hn/sr5fTk6OnnjiCTVo0ED16tXT7373O23btk2WZZV5D4FzBYDK/GYEAAAAENKCOQAgsJwMHScvUeqPCAAAACDgEQBgQlk37Ro4cKDCw8Odm5T5IwIAAAAIeAQAmBAXF6d7771Xr7zyil5//XXdddddsixLjz76qOnSzooAAAAAAh4BACYsWLBAt9xyi2JjY3XeeeepVatWiouLK3VvAH9DAAAAAAGPAABUHAEAAAAEPAIAUHEEAAAAEPAIAEDFEQAAAEDAIwAAFUcAAAAAAY8AAFQcAQAAAAQ8AgBQcQQAAAAQ8AgAQMURAAAAQMAjAAAVRwAAAAABjwCAc0lNTZVlWZo1a9ZZt/v+++9lWZa+//77WqnLBAIAAAAIeMEcAGbNmiXLsrRq1apKvzYnJ0e2bQfUMDtlypRzDuluEABOIQAAAICARwAoW3p6uizLkm3b1V9YDWnbtq26d+9e7e9b0QDg9XqVl5cnr9db7TX4CwIAAAAIeASAspkOACUlJcrNza3Ua0wHgFBAAAAAAAEv1ALAwIEDdeGFF2rfvn267777dOGFF6pRo0b6+9//ruLiYkmnBt4z1+lhYMuWLerXr59iY2MVFRWlTp066YsvvihVw/r169WtWzfVrVtXl112mRISEjRz5kxZlqXU1FRnu+bNm+vuu+/W/Pnz1alTJ0VFRWnixImSpJkzZ+r2229X48aNVadOHV177bWaOnWqz+c0b968VL2nh4GMjAw99dRTatasmerUqaNWrVppzJgxpf5an5GRoYEDByo6OloxMTEaMGCAkpKSXB8C1L17d7Vt29b5Hc4//3y1atVKH3/8sSTphx9+UOfOnVW3bl1dffXVWrhwoc97pqWlafDgwbr66qtVt25dNWjQQL///e99frvK/taS9N///le33nqrLrjgAtWrV099+/bVpk2bzvr9JAIAAAAIAqEYAOrWrau2bdvqL3/5i6ZNm6Z+/frJsixnqD5x4oSmTZsmy7J0//33a/bs2Zo9e7bWr18vSdq0aZNiYmJ03XXXaezYsZo8ebK6deumsLAwffbZZ85n7du3Tw0aNFDDhg0VHx+vCRMmqE2bNmrfvn2ZAaB169aKjY3V888/r+nTpzuD9E033aRBgwZp4sSJmjRpknr16iXLsjR58mTn9Z9//rmaNWumNm3aOPUuWLBA0i/nM7Rr104NGzbUiy++qOnTp2vAgAEKCwvTU0895bxHSUmJunXrpvDwcD3++OOaNGmSevbsqXbt2lUpAFx66aW6/PLLNWzYME2aNEnXXXedIiIi9O9//1tNmjRRXFycXn31VV122WWKiYnR8ePHndd//PHHat++vTwej9544w29+OKLio2NVfPmzZWTk+Pqt3733XcVFhamPn36aNKkSRo7dqxatGih+vXrlxksTkcAAAAAAS8UA4BlWRo+fLjPth06dFCnTp2c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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8d67f2a6d8>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fig, ax = subplots()\n",
    "ax.semilogy(q, I, label=\"Simulated signal\")\n",
    "ax.set_xlabel(\"q ($nm^{-1}$)\")\n",
    "ax.set_ylabel(\"I (count)\")\n",
    "res = ai.integrate1d(img_theo, **kwarg)\n",
    "ax.plot(*res, label=\"Integrated image\")\n",
    "\n",
    "#Display the error: commented as it makes the graph less readable\n",
    "#I_bins = I0/(1+res.radial**2)\n",
    "#ax.plot(res.radial, abs(res.intensity-I_bins), label=\"error\")\n",
    "fig.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Construction of a synthetic dataset\n",
    "\n",
    "We construct now a synthetic dataset of thousand images of this reference image with a statistical distribution which is common for photon-counting detectors (like Pilatus or Eiger): The Poisson distribution. The signal is between 100 and 10000, so every pixel should see photons and there is should be no \"rare-events\" bias (which sometimes occures in SAXS).\n",
    "\n",
    "### Poisson distribution:\n",
    "The Poisson distribution has the peculiarity of having its variance equal to the signal, hence the standard deviation equals to the square root of the signal. \n",
    "\n",
    "\n",
    "**Nota:** the generation of the images is slow and takes about 1Gbyte of memory !\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8000.0 MBytes (1000, 1024, 1024)\n",
      "CPU times: user 1min 21s, sys: 1.52 s, total: 1min 22s\n",
      "Wall time: 1min 22s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "if \"dataset\" not in dir():\n",
    "    dataset = numpy.random.poisson(img_theo, (nimg,) + img_theo.shape)\n",
    "# else avoid wasting time\n",
    "print(dataset.nbytes/(1<<20), \"MBytes\", dataset.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Validation of the Poisson distribution.\n",
    "\n",
    "We have now thousand images of one magapixel. It is interesting to validate if the distribution actually follows the Poisson distribution. For this we will check if the *signal* and its *variance* follow a $\\chi^2$ distribution. \n",
    "\n",
    "For every pair of images I and J we calculate the numerical value of $\\chi ^2$:\n",
    "\n",
    "$$\n",
    "\\chi^2 = \\frac{1}{nbpixel-1}\\sum_{pix}\\frac{(I_{pix} - J_{pix})^2}{\\sigma(I_{pix})^2 + \\sigma(J_{pix})^2)}\n",
    "$$\n",
    "\n",
    "The distibution is obtained by calculating the histogram of $\\chi^2$ values for every pair of images, here almost half a milion. \n",
    "\n",
    "The calculation of the $\\chi^2$ value is likely to be critical in time, so we will shortly investigate 3 implementation: *numpy* (fail-safe but not that fast), *numexp* and *numba*\n",
    "Do not worry if any of the two later method fail: they are faster but provide the same numerical result as numpy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of paires of images:  499500\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of paires of images: \", nimg*(nimg-1)//2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9975318853246916\n",
      "8.37 ms ± 13 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "#Numpy implementation of Chi^2 measurement for a pair of images. Fail-safe implementation\n",
    "\n",
    "def chi2_images_np(I, J):\n",
    "    \"\"\"Calculate the Chi2 value for a pair of images with poissonnian noise \n",
    "    Numpy implementation\"\"\"\n",
    "    return ((I-J)**2/(I+J)).sum()/(I.size - 1)\n",
    "\n",
    "img0 = dataset[0]\n",
    "img1 = dataset[1]\n",
    "print(chi2_images_np(img0, img1))\n",
    "%timeit chi2_images_np(img0, img1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9975318853246916\n",
      "1.92 ms ± 123 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "#Numexp implementation of Chi^2 measurement for a pair of images. \n",
    "from numexpr import NumExpr\n",
    "expr = NumExpr(\"((I-J)**2/(I+J))\", signature=[(\"I\", numpy.float64),(\"J\", numpy.float64)])\n",
    "\n",
    "def chi2_images_ne(I, J):\n",
    "    \"\"\"Calculate the Chi2 value for a pair of images with poissonnian noise\n",
    "    NumExpr implementation\"\"\"\n",
    "    return expr(I, J).sum()/(I.size-1)\n",
    "\n",
    "img0 = dataset[0]\n",
    "img1 = dataset[1]\n",
    "print(chi2_images_ne(img0, img1))\n",
    "%timeit chi2_images_ne(img0, img1)\n",
    "\n",
    "#May fail if numexpr is not installed, but gives the same numerical value, just faster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9975318853245224\n",
      "1.47 ms ± 428 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "#Numba implementation of Chi^2 measurement for a pair of images. \n",
    "from numba import jit\n",
    "\n",
    "@jit\n",
    "def chi2_images_nu(img1, img2):\n",
    "    \"\"\"Calculate the Chi2 value for a pair of images with poissonnian noise\n",
    "    Numba implementation\"\"\"\n",
    "    I = img1.ravel()\n",
    "    J = img2.ravel()\n",
    "    l = len(I)\n",
    "    assert len(J) == l\n",
    "    #version optimized for JIT\n",
    "    s = 0.0\n",
    "    for i in range(len(I)):\n",
    "        a = float(I[i])\n",
    "        b = float(J[i])\n",
    "        s+= (a-b)**2/(a+b)\n",
    "    return s/(l-1)\n",
    "\n",
    "img0 = dataset[0]\n",
    "img1 = dataset[1]\n",
    "print(chi2_images_nu(img0, img1))\n",
    "%timeit chi2_images_nu(img0, img1)\n",
    "\n",
    "#May fail if numba is not installed. \n",
    "# The numerical value, may differ due to reduction algorithm used, should be the fastest."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Select the prefered algorithm for calculating the numerical value of chi^2 for a pair of images.\n",
    "chi2_images = chi2_images_ne"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1h 17min 26s, sys: 2min 16s, total: 1h 19min 42s\n",
      "Wall time: 14min 59s\n"
     ]
    }
   ],
   "source": [
    "%%time \n",
    "\n",
    "#Calculate the numerical value for chi2 for every pair of images. This takes a while\n",
    "\n",
    "c2i = []\n",
    "for i in range(nimg):\n",
    "    img1 = dataset[i]\n",
    "    for j in range(i):\n",
    "        c2i.append(chi2_images(img1, dataset[j]))\n",
    "c2i = numpy.array(c2i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdd3xTVf8H8NMCSWfa0gIq0ELLtCwFREH2qLKHKEvKlKkMhXQmYlkVZVOWiAKCqI8goM9PwAEoKktRKCijLNlQNpSOz++PPLltmqRNQ9PTNJ/363X+4Ob2zlP6/dyce68AERERERG5DCF7A4iIiIiIqOgwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQER50uv1EELghx9+kL0pTm3v3r1o164dAgMDIYRA/fr185z/hx9+gBACer2+aDaQCiQyMhJCCKSkpMjelEe2cuVKCCGwcuVK2ZtCREWEAYDISQghIETh/8rm98e/pAaAoiywb968ifLly0Oj0WDMmDHQ6/VYvHhxsdm+kqhly5bK74yx+fj44Omnn8a0adNw7969R1o+A8Cjy8zMxBdffIHu3bvjscceg0qlQmhoKMaMGYNLly4V6bYQuRoGACInwQBQuIqywN62bRuEEJg2bZrNP3P37l0cOXIEV65cceCWlVzGABAZGQm9Xg+dTochQ4bA398fQgg888wzePjwod3LP3/+PI4cOfJIyygubty4gSNHjuDGjRtFut4ff/wRQgiEhYVh1KhRePPNN1G3bl0IIRAaGorbt28X6fYQuRIGACInwQBQuIoyAHz88cccYlHEjAEgd789f/48KlSoACEEPvroIzkbRwCAP//8E+vXr0dWVpYyLSMj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5RXExMSYvQdgx44dJj+zfft2+Pr6ws3NDe3atcO4ceMwfvx49OrVC0888QTUarUy75w5c1C6dGk0b94cQ4cORXR0NF599VVoNBq4u7vj888/t+n4FSQAAIanU5UpUwYqlQr9+/dHdHQ0OnToACEMN/XmfgGZpWNt6+/juHHj4OHhgXbt2mHEiBGIiopC79694eHhAbVajd27dyvLTEtLw/PPPw8hBMLDwzFp0iSMGTNGeZTp5MmTTbarsALAnTt3lEe+tm/fHpMnT0afPn3g4+Oj9A1HDAGy5RsVInp0DABETsJSAFi8eDG6d++OqlWrKm/cbNCgARITE21+XjpgeIrOs88+C29vb2U9lt4EnFtef9Rv3bqFadOm4emnn4a3tzc8PDxQpUoVdOzYEUuXLsWdO3fy3a7169ejT58+qFatGry9veHr64vw8HDExMRYHE+dlpaGBQsW4LnnnoNGo4FKpULlypXRpk0bzJkzx+wNq3v27EGbNm1MnnBia8H47bffon379vD394dKpUJYWBgmTZpk8mx+o+IaAADg559/RuvWreHv7w8fHx80a9YMGzZsyPMeiV9//RXt2rWDj48PfHx8lDcBG7+ZsfSSs5SUFIwZMwbVqlWDWq2Gr68vatasiQEDBpiMrU9OTsaECRPQsGFDBAUFQaVSISQkBL169TJ53n1+ChoAAEN/6N69O4KCglCmTBlUrlwZI0eOxL///ms2r6Vjbevv46+//oqRI0eiXr16CAgIgIeHB8LCwjBo0CCTl4AZ3b9/H9OmTUN4eDg8PDyU85T7DddA4QUAwDDsql+/fnjiiSfg4eGBJ598EomJiUhPT2cAIHJyDABERFQomjZtilKlStkU7oiISB4GACIistndu3fz/JYj91tmiYio+GEAICIimx05cgQeHh7o0qULJkyYgNdff10Zo+7v74/k5GTZm0hERPlgACAiIptdv34dQ4cORbVq1eDj46OMlR88eDCOHz8ue/OIiMgGDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAJEpNTcXGjRuxf/9+HDp0iI2NjY2NjY2NrQBt//792Lhxo8X3k5B1DAASbdy4EUIINjY2NjY2Nja2R2gbN26UXdY5FQYAifbv3690WtkJmo2NjY2NjY3N2ZrxYur+/ftll3VO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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8d3837eb00>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fig, ax = subplots()\n",
    "h,b,_ = ax.hist(c2i, 100, label=\"measured distibution\")\n",
    "ax.plot()\n",
    "size = numpy.prod(shape)\n",
    "y_sim = chi2_dist.pdf(b*(size-1), size)\n",
    "y_sim *= h.sum()/y_sim.sum()\n",
    "ax.plot(b, y_sim, label=r\"$\\chi^2$ distribution\")\n",
    "ax.set_title(\"Is the set of images Poissonian?\")\n",
    "ax.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This validates the fact that our set of image is actually a Poissonian distribution around the target image displayed in figure 3.\n",
    "\n",
    "# Integration of images in the SAXS appoximation:\n",
    "\n",
    "We can now integrate all images and check wheather all pairs of curves (with their associated error) fit or not the $\\chi^2$ distribution. \n",
    "\n",
    "It is important to remind that we stay in SAXS approximation, i.e. no solid angle correction or other position-dependent normalization. The pixel splitting is also disabled. So the azimuthal integration is simply:\n",
    "\n",
    "$$\n",
    "I_{bin} = \\frac{1}{count(pix\\in bin)} \\sum_{pix \\in bin} I_{pix}\n",
    "$$\n",
    "\n",
    "The number of bins in the curve being much smaller than the number of pixel in the input image, this calculation is less time-critical. So we simply define the same kind of $\\chi^2$ function using numpy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def chi2_curves(res1, res2):\n",
    "    \"\"\"Calculate the Chi2 value for a pair of integrated data\"\"\"\n",
    "    I = res1.intensity\n",
    "    J = res2.intensity\n",
    "    l = len(I)\n",
    "    assert len(J) == l\n",
    "    sigma_I = res1.sigma\n",
    "    sigma_J = res2.sigma\n",
    "    return ((I-J)**2/(sigma_I**2+sigma_J**2)).sum()/(l-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 4.49 s, sys: 108 ms, total: 4.6 s\n",
      "Wall time: 4.59 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "#Perform the azimuthal integration of every single image\n",
    "\n",
    "integrated = []\n",
    "for i in range(nimg):\n",
    "    data = dataset[i, :, :]\n",
    "    integrated.append(ai.integrate1d(data, variance=data, **kwarg))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.4 µs ± 20 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "#Check if chi^2 calculation is time-critical:\n",
    "%timeit chi2_curves(integrated[0], integrated[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "c2 = []\n",
    "for i in range(nimg):\n",
    "    res1 = integrated[i]\n",
    "    for j in range(i):\n",
    "        c2.append(chi2_curves(res1, integrated[j]))\n",
    "c2 = numpy.array(c2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdd3wT9f8H8E/TNumgaQMUaAukUChLKAiIWtmbgiwRlVFkFApi2ekOWEEB2VNAUKagAoILQVH4IfpFUJAhyJI9rGXT0vH6/VFzbZqkI5Be2ryej8fn8YDL5XLj0/b9unzuToCIiIiIiByGkHsFiIiIiIio+DAAEBERERE5EAYAIiIiIiIHwgBARERERORAGACIiIiIiBwIAwARERERkQNhACAiIiIiciAMAEREREREDoQBgIiIiIjIgTAAEBERERE5EAYAIiIiIiIHwgBARERERORAGACIiIiIiBwIAwARERERkQNhACAiIiIiciAMAEREREREDoQBgIiIiIjIgTAAEBERERE5EAYAIiIiIiIHwgBARERERORAGACIiIiIiBwIAwARERERkQNhACAiIiIiciAMAEREREREDoQBgIiIiIjIgTAAEBERERE5EAYAIiIiIiIHwgBARERERORAGACIiIiIiBwIAwARERERkQNhACAiIiIiciAMAEREREREDoQBgIiIiIjIgTAAEBERERE5EAYAIiIiIiIHwgBARERERORAGACIiIiIiBwIAwARERERkQNhACAiIiIiciAMAEREREREDoQBgIiIiIjIgTAAEBERERE5EAYAIiIiIiIHwgBARLI4d+4chBAIDw+Xe1VKDe5TKi5arRZarVbu1SgSvV4PIQR2794t96oQyY4BgByKEAJCPH63X7VqFYQQWLVq1eOvlB0JDw+HEALnzp2z+WexWH3yimufXr58GWPGjEGdOnXg7u4ONzc3VKlSBS1atEBsbCxOnz5t8b0XLlyAQqGAEAIxMTEW51uxYgWEEOjUqZPFebp06QIhBBYtWmQ0PSUlBQkJCQgJCYGnpyeUSiX8/f3RrFkzjBs3DocOHSr6RpMRewwABf1eZgAgysEAQA6FASB/DAAl26NHj3DixAlcuXLFZp/xxx9/oGzZshBCoH79+hgxYgRiY2MxdOhQNGjQAEIILF++3OL7ExMTIYSAk5MTKlWqhPT0dIvzvvjiixBCYOHChSavLV68GEIIdO7c2Wj65cuXERgYCCEEqlevjoiICMTGxiIyMhLPPPMMFAoF4uLirN8BBAA4ffp0vkFPDgX9Xr558yZOnDiB+/fvF++KEdkh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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8d5002d7f0>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fig, ax = subplots()\n",
    "h,b,_ = ax.hist(c2, 100, label=\"Measured distibution\")\n",
    "y_sim = chi2_dist.pdf(b*(nimg-1), nimg)\n",
    "y_sim *= h.sum()/y_sim.sum()\n",
    "ax.plot(b, y_sim, label=r\"Chi^2 distribution\")\n",
    "ax.set_title(\"Integrated curves in SAXS approximation\")\n",
    "ax.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.889452976157626 1.1200681344576493\n",
      "Expected outliers:  2497.5 got 1892 below and  2900 above\n"
     ]
    }
   ],
   "source": [
    "low_lim, up_lim = chi2_dist.ppf([0.005, 0.995], nimg) / (nimg - 1)\n",
    "print(low_lim, up_lim)\n",
    "print(\"Expected outliers: \", nimg*(nimg-1)*0.005/2, \"got\", \n",
    "(c2<low_lim).sum(),\"below and \",(c2>up_lim).sum(), \"above\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Integration of images with solid angle correction/polarization correction\n",
    "\n",
    "PyFAI applies by default solid-angle correction which is needed for powder diffraction. \n",
    "On synchrotron sources, the beam is highly polarized and one would like to correct for this effect as well. How does it influence the error propagation ? \n",
    "\n",
    "If we enable the solid angle normalisation (noted $\\Omega$) and the polarisation correction (noted $P$), this leads us to:\n",
    "\n",
    "$$\n",
    "I_{bin} = \\frac{1}{count(pix\\in bin)} \\sum_{pix \\in bin} \\frac{I_{pix}}{\\Omega_{pix} P_{pix}}\n",
    "$$\n",
    "\n",
    "Flatfield correction and any other normalization like pixel efficiency related to sensor thickness should be accounted in the same way.\n",
    "\n",
    "**Nota:** The pixel splitting remains disabled. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.ext.splitBBoxCSR:Pixel splitting desactivated !\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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXxM5/4H8CchiSRMEsSSIIilqK3o7a+utZbWUhRVLdJrSS1VS9Vkk6GxNFz72qCKotpegqraqsul7VVVGtpqiIp9C0GILJ/fH9M5kzEzyeTI5JnJfN6v1/N6/Zw5OfM9ydP7+35mnnOOABERERERuQwhuwAiIiIiIio+DABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARERERuRAGACIiIiIiF8IAQERERETkQhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwABARUZFJSUmBEAJhYWGySyEiIisYAIjI6QkhIMTj/8/ZmjVrIITAmjVrHr8oBxIWFgYhBFJSUuz+XgwARESOjwGAiJweA0D+GACIiCgvBgAicnoMAPljACAiorwYAIjI6VkKAHkb0ZSUFAwYMAAVKlSAl5cXWrRogR07dpjs365dO+U4j468jXNWVhaWLl2Kf/zjHyhXrhy8vb3RrFkzLF68GDk5OWa15ebmYsGCBWjQoAG8vLwQFBSEMWPG4NatWwgJCUFISIjJ/nlDyK5du9CuXTtoNBqT89u6dStee+011K1bFz4+PvDx8cFTTz2FhQsXmtVg7Zwefd8bN24gIiICTzzxBMqUKQONRoOOHTti9+7dFn/n6enpmDBhAoKDg+Hl5YX69etj7ty5OH36tKoAsHv3bvTo0QOBgYHw9PREtWrV8OKLL2Lv3r0WfzeWCCHQrl07k206nQ5CCBw4cAAbNmzA008/DV9fX4SEhOD7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TAn5/QtWqI+DWfoB0F6VSE9P11/VeuCBB5Ceno709HQcP34cADB48GAopbBv3z7954qKitCpUyfUqlULEydOxJw5c9C6dWtcfPHF+Oqrrzz+jpycHFSpUgU9evTAggUL9FPohg8fXpl3NaBQH4eXXnoJSUlJsFqtmD9/PjIyMvRPhgqnZ/aMHgcA+vX69+8PpRSGDBmiX3a+3bt3IzY21uNbX+Pi4tCzZ8/KuptBCfWx2LRpExISEjBmzBjMmTMH06dPR9euXaGU8vp4SElGj8N9992n3/cLv9n2wjfHm6EnQn0czNIP0YYLgMnl5+dj7NixSEhIQGxsLNq3b+/15jxfAx8ALF26FB06dECdOnVQo0YNdOzYEa+++qrHddavX48777wTCQkJqFatGurUqYOePXuG3dd3Gz0Or7/+uv4MRnx8PDp16oSVK1f6/XsWLFiAq6++GtWrV0dSUhJmzJjh8e250kJ9HMzSD4D22fTnv6n5/Jx7EPM35Pz2228YOnQo6tevj/j4eHTr1g27du3y+fe89tpruP766xEbG4smTZqE3Wdbh/o4fPzxx7jnnntw2WWXoXr16qhVqxZuvvnmgP+OJJTnOPj7OV+/V7du3YouXbogLi4ODRs2xKhRo4J+U2RlCfWx+O6775CcnIymTZsiLi4O8fHxuPHGGzF//vyw+n1p9DgE+rnExESvvyfceyLUx8Es/RBtuAAQEREREUURLgBERERERFGECwARERERURThAkBEREREFEW4ABARERERRREuAEREREREUYQLABERERFRFOECQEREREQURbgAEBERERFFES4ARERERERRhAsAEREREVEU4QJARERERBRFuAAQEREREUURLgBERERERFGECwARERERURThAkBEREREFEW4ABARERERRREuAEREREREUYQLABERERFRFPn/9utAAAAAAECQv/Ugl0UCAAAAIwIAAAAjAgAAACMCAAAAIwIAAAAjAgAAACMCAAAAIwIAAAAjAgAAACMCAAAAIwIAAAAjAgAAACMCAAAAIwIAAAAjAgAAACMCAAAAIwIAAAAjAgAAACMCAAAAIwEdHlJUpzlFzgAAAABJRU5ErkJggg==\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "kwarg = {\"npt\":npt, \n",
    "         \"method\": IntegrationMethod.select_one_available(\"nosplit_csr\", dim=1), \n",
    "         \"correctSolidAngle\":True, \n",
    "         \"polarization_factor\":0.95,\n",
    "         \"safe\":False}\n",
    "\n",
    "#As we use \"safe\"=False, we need to reset the integrator manually:\n",
    "ai.reset()\n",
    "\n",
    "def plot_distribution(ai, kwargs, nbins=100, integrate=None):\n",
    "    ai.reset()\n",
    "    results = []\n",
    "    c2 = []\n",
    "    if integrate is None:\n",
    "        integrate = ai._integrate1d_legacy\n",
    "    for i in range(nimg):\n",
    "        data = dataset[i, :, :]\n",
    "        r = integrate(data, variance=data, **kwarg)\n",
    "        results.append(r)    \n",
    "        for j in range(i):\n",
    "            c2.append(chi2_curves(r, results[j]))\n",
    "    c2 = numpy.array(c2)\n",
    "    fig, ax = subplots()\n",
    "    h,b,_ = ax.hist(c2, nbins, label=\"Measured distibution\")\n",
    "    y_sim = chi2_dist.pdf(b*(nimg-1), nimg)\n",
    "    y_sim *= h.sum()/y_sim.sum()\n",
    "    ax.plot(b, y_sim, label=r\"Chi^2 distribution\")\n",
    "    ax.set_title(\"Integrated curves\")\n",
    "    ax.legend()\n",
    "    return fig, ax\n",
    "\n",
    "f,a = plot_distribution(ai, kwarg)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The normalisation of the raw signal distorts the distribution of error, even at a level of a few percent correction ! (Thanks Daniel Franke for the demonstration)\n",
    "\n",
    "# Introducing the next generation azimuthal integrator ... pyFAI 0.16\n",
    "\n",
    "As any normalization introduces some distortion into the error propagation, the error propagation should properly account for this. Alessandro Mirone suggested to treat normalization within azimuthal integration like this :\n",
    "\n",
    "$$\n",
    "I_{bin} = \\frac{\\sum_{pix \\in bin} I_{pix}}{\\sum_{pix \\in bin} \\Omega_{pix}P_{pix}}\n",
    "$$\n",
    "\n",
    "This is under investigation since begining 2017 https://github.com/silx-kit/pyFAI/issues/520 and is now available as part of pyFAI_0.16 as the ```_integrate1d_ng``` method of any ```AzimuthalIntegrator``` object. This procedure has for now lower performances than the legacy version and we hope to get the performances back for version 0.17 and make it the default behaviour.\n",
    "\n",
    "**Nota:**\n",
    "This is a major issue as almost any commercial detector comes with flatfield correction already applied on raw images; making impossible to properly propagate the error (I am especially thinking at photon counting detectors manufactured by Dectris!). The detector should then provide the actual raw-signal and the flatfield normalization to allow proper signal and error propagation.\n",
    "\n",
    "This is a demonstration of how one can build an AzimuthalIntegrator-like class with proper error propagaton:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyFAI.containers import Integrate1dResult\n",
    "from pyFAI.azimuthalIntegrator import AzimuthalIntegrator\n",
    "from copy import copy\n",
    "\n",
    "class AzimuthalIntegratorNextGen(AzimuthalIntegrator):\n",
    "    def integrate1d_ng(self, data, variance, **kwargs):\n",
    "        \"\"\"Demonstrator for the new azimuthal integrator taking care of the normalization, \n",
    "        here implemented only on the solid-angle correction\"\"\"\n",
    "        kwargs = kwargs.copy()\n",
    "        if kwargs[\"correctSolidAngle\"]:\n",
    "            norm = self.solidAngleArray(self.detector.shape).copy()\n",
    "        else:\n",
    "            norm = numpy.ones(data.shape)\n",
    "        kwargs[\"correctSolidAngle\"] = False\n",
    "        polf = kwargs.get(\"polarization_factor\")\n",
    "        if polf:\n",
    "            norm *= self.polarization(self.detector.shape, factor=polf)\n",
    "        kwargs[\"polarization_factor\"] = None\n",
    "        flat = kwargs.get(\"flat\")\n",
    "        if flat is not None:\n",
    "            norm *= flat\n",
    "        kwargs[\"flat\"] = None\n",
    "        denom = self.integrate1d(norm, **kwargs)\n",
    "        signal = self.integrate1d(data, **kwargs)\n",
    "        sigma2 = self.integrate1d(variance, **kwargs)\n",
    "        result = Integrate1dResult(denom.radial, \n",
    "                                   signal.sum/denom.sum, \n",
    "                                   numpy.sqrt(sigma2.sum)/denom.sum)\n",
    "        result._set_method_called(\"integrate1d_ng\")\n",
    "        result._set_compute_engine(denom.compute_engine)\n",
    "        result._set_unit(signal.unit)\n",
    "        result._set_sum(signal.sum)\n",
    "        result._set_count(signal.count)\n",
    "        return result\n",
    "    \n",
    "\n",
    "ai2 = AzimuthalIntegratorNextGen(**ai_init)\n",
    "kwarg = {\"npt\":npt, \n",
    "         \"method\": IntegrationMethod.select_one_available(\"nosplit_csr\", dim=1),\n",
    "         \"correctSolidAngle\":True, \n",
    "         \"polarization_factor\":0.95,\n",
    "         \"safe\":False}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "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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NbXE93JycpSXl1ftNREAAiPkA8DhygsATz31lGrVqlXiZhMjR46UZVnasuXQx6Xjxo3T8ccfrxNPPFEnnnii6tatqwYNGujuu++udD00LQDgSASAwAjHAHDgwIFK7V9eADCFABAYBIA/XX755erQoUOJ7XPnzpVlWfriiy8kSVlZWUpLS3PWgAEDNGzYsFI/Ljua6mragwf+0MJxtyrhnX8r6eMxSvxPrJI+elHrlv0U0OcFAFReqAcA27ZlWZbWrVungQMHKjo6WlFRUbr77ruVlZXlt+/06dPVvXt31a1bV40aNdItt9zi/EJOklJSUlS3bl397W9/8/u5H3/8URERERo6dKikQ4evWJbltyoTBg4ePKh//vOfatKkiRo0aKDrrrtO27Ztk2VZsm3bb99t27bp73//u0444QTVqVNHZ511lt5++22/febPny/LsvTRRx/p+eef10knnaTIyEhdeumlWrduXYnnT0pKUp8+fRQVFaV69erp4osv1k8/+f8bXvS+rlq1SrfddptiYmLUtWtXSdLy5cs1cOBAnXbaaYqMjNSJJ56ov//978rIyCjx80euojBQ2iFAGzZs0M0336xGjRqpXr166tWrl2bNmnVMr/VIBIDAIAD8qWPHjrr00ktLbF+1apUsy9LkyZNLfcyKHgK0a9curVy50m/NnDmzWpp2w4okyY4qdW2NbafE90coNyc7oDUAAComXAJAt27ddOONN2rixIm67777ZFmWM7BL0vPPPy+Px6NbbrlFEydOVFxcnJo2barWrVv7/dKt6LfW//3vfyUd+q13mzZtdNZZZyknJ0eS9Pnnn+vkk09W+/btNX36dE2fPr3Ui3yUZcCAAbIsS3/729/0+uuva8CAAerSpUuJALBz506dfPLJOuWUUzR8+HBNmjRJ119/vSzL0rhx45z9iobibt266ZxzztG4ceMUGxur+vXrq2fPnn7PPW/ePNWpU0fnnXeeXn75ZY0bN06dO3dWnTp1tHDhwhLv61lnnaW+fftq4sSJev311yVJY8aM0UUXXaThw4frjTfe0ODBg1WvXj317NlThYWFkg6FhNtuu82pteh9KvoU4cgAsHPnTp144olq2LChnnnmGY0dO1ZdunRRRESEPvvsM1evtTQEgMAgAPzp9NNP11VXXVVi+4YNG0r8xXWjrGRdHU274qcv9Lv3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Rx55RPXq1VO/fv305ptvKi4uTnXr1lWVKlW0fv162+WhCO3du1fh4eGqUqUKASCALF68WBUrVlSbNm00duxYTZ8+XYMGDdKAAQNsl4bLtGfPHtWoUUONGzfWiBEjNG3aNPXo0UPGGN1///22ywMIAIEqKSlJxhiNHj06d11GRoaaNm2qtm3bWqwMRWXlypXKysryWbd161aFhYXpySeftFQVisPjjz+uu+++W3fccQcBIECcPHlSdevW1UMPPSSv12u7HBSxYcOG5Xnzr+7du8sYo+PHj1uqDPgZASBADRgwQCEhITp58qTP+uHDh8sYoz179liqDMXtpptu0k033WS7DBSR5cuXKyQkROvWrSMABJApU6bIGKNNmzZJktLT0wkCAWTQoEEyxig1NdVvffny5ZWenm6pMuBnBIAA1b59e7Vs2dJv/bJly2SM0eeff26hKhSf7qEpAAARwElEQVS38+fPq2HDhrrnnntsl4Ii4PF41KpVK/Xp00eSCAAB5JFHHlFERISWLl2q5s2byxijKlWqqG/fvsrIyLBdHi7TwoULcw/3+f7777Vnzx598MEHioiI0AsvvGC7PIAAEKiio6N19913+63fuHGjjDGaOnWqhapQ3GbNmiVjjN5++23bpaAIvP7666pevbqOHDkiiQAQSFq1aqXw8HCFh4erX79++vTTT9WvXz8ZY9S1a1fb5aEIxMXFqXLlyjLG5C6DBw+2XRYgiQAQsJo0aaJ7773Xb/327dtljNG4ceMsVIXitHnzZkVERKht27byeDy2y8FlOnr0qCIjIzVmzJjcdQSAwNGkSRMZY9S3b1+f9X369JExRlu3brVUGYrKrFmz1KFDB02fPl2ffvqpevXqpXLlymnSpEm2SwMIAIGKXwCCy8GDB9WkSRNFRUVp//79tstBEejbt6+aNWvmc6I3ASBwREdHyxij5cuX+6xfvny5jDF65513LFWGojB79mxVrlxZe/fu9Vnfo0cPhYeH6+jRo5YqA35GAAhQnAMQPNLS0nTjjTcqMjJSGzdutF0OisDWrVtVvnx5TZw4UTt37sxd2rRpo+bNm2vnzp06duyY7TJxGf70pz/JGKMff/zRZ/3mzZtljNH48eMtVYai0K5dO912221+6+fMmSNjjJYuXWqhKuAXBIAA1b9//zyvApRzaTKuAhQYMjIy1K5dO4WHhys+Pt52OSgi33zzjc9xw3ktzz//vO0ycRn+9a9/yRijr776ymf9V199JWOM3n//fUuVoSg0b95cbdq08Vv/4YcfyhijhQsXWqgK+AUBIEAlJib63QcgMzNTzZo1y/MfJZQ9Ho9H999/v0JDQzV//nzb5aAIpaamau7cuX5LdHS0GjVqpLlz52rdunW2y8RlWLNmjYwxeuKJJ3zWd+vWTaGhoRzKV8Z16tRJFStW9Lsz+4MPPqjy5cuzf2EdASCAdenSRaGhoRowYICmTZum2267TaGhoX7HnKJsev7552WMUefOnTVr1iy/BYGHcwACS69evWSM0WOPPabJkyerS5cuMsbopZdesl0aLlPO/Tvq1KmjoUOHavLkybr33ntljFHv3r1tlwcQAAJZRkaG+vfvr3r16iksLEy33HKLFi1aZLssFJE77rijwENEEHgIAIHl3Llzio2NVePGjVWhQgU1a9aMK7QFkKSkJN17772qV6+eKlSooObNm2vYsGHKzs62XRpAAAAAAACCCQEAAAAACCIEAAAAACCIEAAAAACAIEIAAAAAAIIIAQAAAAAIIgQAAAAAIIgQAAAAAIAgQgAAAAAAgggBAAAAAAgiBAAAAAAgiBAAAAAAgCBCAAAAoAx444031Lp1a4WGhsrtdtsuB0AZRgAAAKAMmDt3rj777DM9/vjjBAAAl4UAAADFYObMmTLGaOfOnbZLwUWMGjVKLVq0kNfrtV1KofTp0yfPADBlyhRFRUUpMzOz5IsCUKYQAACUqHXr1umRRx5Ro0aNFBYWpgYNGqh9+/aaOHFisbzeypUr5Xa7deLEiUt67HIFYwAozs+zuJw8eVKRkZGaMWOG7VIKLb8AkJGRobp162rChAklXxSAMoUAAKDErFy5UhUrVlSzZs0UFxenN998Uy6XS/fcc4+aNm1aLK85evTofAfxgh67XB6PRxkZGTp//nyRP3dpVZyfZ3EZN26cIiIilJGRYbuUQssvAEjSwIED1bhx46DqOwCXjgAAoMTcd999ql27dp7fEB8+fLhYXtNGAEhPTy/S5ysriuPzLO7PslWrVnrqqaeK9TUu5ve//72MMXkugwcP9tu+oACwevVqGWP01VdfFXPVAMoyAgCAEtOiRQvdeeedhdp237596tWrl+rXr6+KFSvqqquuUt++fZWVlSVJ2rVrl5599lk1b95clSpVUmRkpB599FGf4dPtduc5VO3cubPAx3Jev2fPnqpTp44qVqyoa6+9Vm+//bZfnTnPs3HjRnXr1k01atTQjTfemOchQDnbbtu2TU8//bSqV6+uiIgI9ejRQ2fOnPF77m+++UY333yzwsLC1KRJE02dOjX3OfLz8ccfyxijb7/91u+xqVOnyhij9evX+3zOhXmfF9snF/s816xZo44dO6patWqqUqWK7r77biUkJBTqs7yY2bNn64YbblBYWJiaN2+uuXPnqmvXrrr22msL/LsdO3bIGKP//Oc/eT5+5513ql27dkpJSVHHjh1VtWpVNWjQQOPHj/fZrn379vrd736n+Ph43XHHHQoPD1fTpk01f/58SdL8+fPVpk0bhYeH64YbbtDq1asv+p4KUlAAkKTIyEj9/e9/v6zXABDYCAAASsw999yjatWq+Qygedm/f78aNGig8PBwvfDCC5o6dapiYmLUsmXL3F8PPv74Y91www1yuVyaPn26/v3vf6tmzZpq3Lhx7jC9du1adevWTcYYjRs3TrNmzdKsWbOUnp5e4GOHDh3SlVdeqaioKA0dOlRTpkzR/fffn7vthXKG1muvvVYPPPCA3njjDU2ePLnAANC6dWs9/PDDeuONN9S7d28ZYzRw4ECf512zZo3CwsJ01VVXaeTIkRo2bJgaNGigG264ocAAcPbsWVWtWlV/+9vf/B676667FB0dnfv/l/I+L7ZPCvo8N2zYoCpVqqh+/fqKi4vTyJEjdfXVVyssLEyJiYkX/SwLMnbsWBlj9PDDD2v69Onq16+fqlatqquvvlqPPfZYgX/73nvvyRijdevW5fl4rVq1dP3116tBgwYaPHiwpk6dqptvvlnlypXz+Zs6deqoZcuWioqKUmxsrMaPH686deqoevXqmjp1qpo2baqRI0dq+PDhqlq1qlq1alVgXfnJzs5WRkaGevfurcGDBysjI0Mej8dvu/bt2+vmm2929BoAggMBAECJWbJkiUJCQhQSEqK2bdtq4MCBWrx4sc6dO+ezXffu3VW+fHmtWrXK7zlyjm0+e/as32MJCQkyxujdd9/NXefkEKC//OUvql+/vo4ePeqzvmvXrqpevbrPa+cMrd26dfPZtqAA0KtXL59tH3roIdWqVctnXefOnRUeHq79+/fnrtu2bZtCQ0MLDACS1K1bN9WpU8dn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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.ext.splitBBoxCSR:Pixel splitting desactivated !\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f8d380b4e10>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#The new implementation provides almost the same result as the former one:\n",
    "ai.reset()\n",
    "fig, ax = subplots()\n",
    "data = dataset[0]\n",
    "res_ng = ai._integrate1d_ng(data, variance=data, **kwarg)\n",
    "jupyter.plot1d(res_ng, ax=ax, label=\"next_generation\")\n",
    "ax.set_yscale(\"log\")\n",
    "jupyter.plot1d(ai._integrate1d_legacy(data, variance=data, **kwarg), ax=ax, label=\"legacy\")\n",
    "#jupyter.plot1d(ai._integrate1d_ng(data, variance=data, **kwarg), ax=ax, label=\"next2\")\n",
    "ax.legend()\n",
    "\n",
    "# If you zoom in enough, you will see the difference !"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.ext.splitBBoxCSR:Pixel splitting desactivated !\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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeVhU9f4H8C8oIKAjCLiAhopo7lpaXv2ZS6m55Z5WKl0X3CqXzGGd0RBNzR21MDP3NFPcrpl27dZV65qVZVimYuJuhoIiyPL+/THNgXGG7cjwnWHer+f5PM/lzOFwZs7H2+c9c84ZASIiIiIichhC9g4QEREREVHZYQAgIiIiInIgDABERERERA6EAYCIiIiIyIEwABARERERORAGACIiIiIiB8IAQERERETkQBgAiIiIiIgcCAMAEREREZEDYQAgIiIiInIgDABERERERA6EAYCIiIiIyIEwABARERERORAGACIiIiIiB8IAQERERETkQBgAiIiIiIgcCAMAEREREZEDYQAgIiIiInIgDABERERERA6EAYCIiIiIyIEwABARERERORAGACIiIiIiB8IAQERERETkQBgAiIiIiIgcCAMAEREREZEDYQAgIiIiInIgDABERERERA6EAYCIiIiIyIEwABARERERORAGACIiIiIiB8IAQERERETkQBgAiIiIiIgcCAMAEREREZEDYQAgIiIiInIgDABERERERA6EAYCIiIiIyIEwABARERERORAGACIiIiIiB8IAQERERETkQBgAiIiIiIgcCAMAEREREZEDYQAgIiIiInIgDABERERERA6EAYCIiEpNUlIShBAICQmRvStERFQABgAisntCCAjx6P93tnbtWgghsHbt2kffKRsSEhICIQSSkpKs/rcYAIiIbB8DABHZPQaAwjEAEBFRfgwARGT3GAAKxwBARET5MQAQkd2zFADyD6JJSUkYOnQofHx84ObmhieffBJ79uwxWb9Tp07Kdh6u/INzVlYWVqxYgaeffhpVqlSBu7s7WrVqheXLlyMnJ8ds33Jzc7FkyRI0btwYbm5u8Pf3x6RJk3D79m0EBgYiMDDQZP38IWT//v3o1KkTNBqNyfPbuXMnXnnlFQQHB8PDwwMeHh544oknsHTpUrN9KOg5Pfx3b926hbCwMDz++OOoVKkSNBoNunbtigMHDlh8zVNTUzF16lQEBATAzc0NjRo1wsKFC3Hu3DlVAeDAgQPo06cP/Pz84Orqitq1a+OFF17AwYMHLb42lggh0KlTJ5Nler0eQggcPnwYmzZtwlNPPQVPT08EBgbi2LFj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w12ALl++bPb43bt3cezYMeXnI0eOWOwV4yc5+U87IiIqKwwARGT3SisA/PXXX/Dw8IBGo8GkSZMQExODmJgYZXh/8OCBcp/7gIAAjBgxAmFhYRg1apQyRM+dO9dkm6Ghocr6b7zxBt588000bNhQ+R6AevXqmaxfVAC4fPkyqlWrBmdnZwwYMAAzZszAgAED4OLigqFDh1p8zsbbngYFBWHGjBmIiYkxue1lcnIygoODIYThvv6hoaGYMWMGXn75ZTRr1gxCCJOhtrS/ByAqKgpCCFSpUgUjRoxAREQERo8ejUaNGpltZ8SIERDCcDH2lClTMGrUKNSsWRMvvvjiIwUAwPDJhouLC4QQ6Nu3b4HrvfPOO3BycoKHhwcGDx6Mt956CxMmTECvXr3g6emJHj16KOv269cPVapUQa9evTBp0iRotVr06dMHFSpUgLe3Ny8IJiIpGACIyO6VVgAAgP3796Ndu3Ymd9fJf+58bm4u1q9fj65du8Lb2xsuLi7w9/dHhw4dEBsbi4sXL5psLycnB4sWLVK+cKpWrVqYOHEibt++jcqVK5udZ15UAACAX375BX379oWfn5/yLcCrV68u9DkvXLhQ+VZbS588pKamIjY2Fk888QQ8PT1RqVIl1K1bF7169cL7779vdiHznTt3MHXqVPj7+yvfBPzuu++q/ibgffv2oUePHvD29la+Cbh///744osvTNbLyMjA9OnTERAQABcXFwQFBWHOnDnIysp65AAQExOjHPPt27cXuu7XX3+NIUOGoFatWnBxcYGvry9atmyJqVOn4vjx48p6Bw4cwKuvvorGjRtDo9HAw8MDDRs2xOuvv25yoTARUVliACAikuDMmTMQQmDYsGGyd4WIiBwMAwARkRVdvXrV7Nte7927h169ekEIga1bt0raMyIiclQMAEREVqTVavHYY49h5MiR0Gq1CAkJQe3atSGEQM+ePZGbmyt7F4mIyMEwABARWdGhQ4fw/PPPo2bNmnB1dYWHhwdatWqF+fPnF/t2okRERKWJAYCIiIiIyIEwABARERERORAGACIiIiIiB8IAQERERETkQBgAiIiIiIgcCAOARCkpKUhISMCJEydw6tQpFovFYrFYLFYJ6sSJE0hISEBKSorssc6uMABIlJCQoHztPIvFYrFYLBZLXSUkJMge6+wKA4BEJ06cUJpWdoJm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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Validation of the error propagation without pixel splitting but with normalization:\n",
    "f,a = plot_distribution(ai, kwarg, integrate = ai._integrate1d_ng)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Azimuthal integration with pixel splitting\n",
    "\n",
    "Pixels splitting is implemented in pyFAI in calculating the fraction of area every pixel spends in any bin. This is noted $c^{pix}_{bin}$. The calculation of those coeficient is done with some simple geometry but it is rather tedious, this is why two implementation exists: a simple one which assues pixels boundary are paralle to the radial and azimuthal axes called ```BBox``` for bounding box and a more precise one calculating the intersection of polygons (called ```splitpixel```. The calculation of those coefficient is what lasts during the initialization of the integrator as this piece of code is not (yet) parallelized. The total number of (complete) pixel in a bin is then simply the sum of all those coeficients: $\\sum_{pix \\in bin} c^{pix}_{bin}$.\n",
    "\n",
    "The azimuthal integration used to be implemented as (pyFAI <=0.15):\n",
    "\n",
    "$$\n",
    "I_{bin} = \\frac{ \\sum_{pix \\in bin} c^{pix}_{bin} \\frac{I_{pix}}{\\Omega_{pix} P_{pix}}}{\\sum_{pix \\in bin}c^{pix}_{bin}}\n",
    "$$\n",
    "\n",
    "With the associated error propagation (this is what is implemented in pyFAI, there is an error in it!):\n",
    "\n",
    "$$\n",
    "\\sigma_{bin} = \\frac{\\sqrt{\\sum_{pix \\in bin} c^{pix}_{bin} \\sigma^2_{pix}}}{\\sum_{pix \\in bin}c^{pix}_{bin}}\n",
    "$$\n",
    "\n",
    "We have now tools to validate the error propagation for every single rebinning engine. Let's see if pixel splitting induces some error, with coarse or fine pixel splitting:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdd3hUddrG8V9CSKWFIoSAURAQWAVULLCIsgoiICgiFoqLSpUFlOZaAkZQ5KUJiBRFQVRsRNSlWhEQFQsCCtIEQYoaOkSS3O8fY2YYZpIMRzK/GfL9XNe5rs2Zk3OeCc+4zz1z5hwjAAAAAEWGsV0AAAAAgOAhAAAAAABFCAEAAAAAKEIIAAAAAEARQgAAAAAAihACAAAAAFCEEAAAAACAIoQAAAAAABQhBAAAAACgCCEAAAAAAEUIAQAAAAAoQggAAAAAQBFCAAAAAACKEAIAAAAAUIQQAAAAAIAihAAAAAAAFCEEAAAAAKAIIQAAAAAARQgBAAAAAChCCAAAAABAEUIAAAAAAIoQAgAAAABQhBAAAAAAgCKEAAAAAAAUIQQAAAAAoAghAAAAAABFCAEAAAAAKEIIAAAAAEARQgAAAAAAihACAAAAAFCEEAAAAACAIoQAAAAAABQhBAAAAACgCCEAAAAAAEUIAQAAAAAoQggAAAAAQBFCAAAAAACKEAIAAAAAUIQQAAAAAIAihAAAAAAAFCEEAAAAAKAIIQAAAAAARQgBAAAAAChCCAAAgDNm69atMsaoa9eutksBAOSBAAAg7BljZMzf/8/ZzJkzZYzRzJkz/35RIaRr164yxmjr1q2FfiwCAACEPgIAgLBHAMgfAQAAcDICAICwRwDIHwEAAHAyAgCAsOcvAJw8iG7dulUdO3ZUuXLlFBMTo0svvVTvvvuu1/ZNmzZ17+fU5eTB+cSJE5o8ebKuuOIKlSxZUnFxcapfv74mTpyo7Oxsn9pycnI0fvx41a5dWzExMapcubL69Omj/fv3KyUlRSkpKV7bnxxCFixYoKZNm6pUqVJez2/evHm66667VKNGDcXHxys+Pl6XXHKJJkyY4FNDXs/p1OP+/vvvGjp0qC688ELFxsaqVKlSatasmRYtWuT3b37w4EENGDBAycnJiomJUa1atTRmzBht3rzZUQBYtGiRWrdurQoVKig6OlpVqlTRTTfdpCVLlvj92/hjjFHTpk291qWmpsoYo48++khz5szR5ZdfroSEBKWkpGjlypUyxqhdu3Z51nXhhRcqOjpav//+u9f6hQsXqmXLlipXrpyio6NVrVo1DRw4UBkZGT77+O6773T77bcrJSVF0dHRKl++vBo0aKB+/frpzz//DPyPBABnCAEAQNjLLwBcc801qlChgq644gr1799fXbp0UUxMjCIjI/Xhhx+6t585c6batm0rY4zatm2r1NRU95I71P35559q0aKFjDGqVauWevTooX79+uniiy+WMUadOnXyqa1Xr14yxqhy5crq27evHnzwQdWoUUMNGzZU5cqV8wwArVq1UrFixdS6dWsNHjxYHTt2dG9Tq1Yt1a5dW506ddKQIUPUs2dP1axZ028Nqampqlevnowx6tevn/s5jRs3zr3Ntm3bdN5558kYoyZNmqh///667777lJSUpIiICE2bNs1rn8ePH1fDhg1ljFG9evU0ePBgde/eXWXKlNFNN9102gHgsccekzFGJUqUUKdOnfTQQw+pa9euqlGjhtd+/k4AaN26tWJiYnTrrbe6/2a5f8vo6Gj99ttvPvtbtWqVjDFq37691/phw4bJGKOyZcuqS5cuGjhwoJo3by5jjOrUqaMDBw64t/3uu+8UGxuruLg4dezYUUOHDlXv3r3VvHlzFS9eXIcOHQr47wQAZwoBAEDYyy8AGGM0bNgwr8cWLlwoY4xatmzptb6gATN3mLz//vuVlZXlXp+VlaVu3brJGKP09HT3+k8//VTGGNWsWdPrneHMzEw1adLE7zvxuTVERERowYIFfuvYtGmTz7rs7Gx16dJFxhh9/vnnXo8VdApQ06ZNFRERoVdffdVrfUZGhurVq6fY2Fjt3r3bvX7EiBEyxuiWW27x+sRhy5YtSkxMPK0AsGjRIhljdP755+uXX37xeXzHjh3u//13AkB8fLy+/vprn98ZOXKkjDGaOHGiz2O9e/eWMUbz5893r/vwww9ljNFVV13l825/bn39+/d3r3vggQd8+iLXH3/84fdTIwAobAQAAGEvvwCQkpLiNaznOvfcc1WuXDmvdfkNmNnZ2SpbtqwqVaqkEydO+DyekZGhiIgIdejQwb3unnvukTFGL730ks/2n332Wb4BIL/TUvKyevVqGWM0fPhwr/X5BYBvv/1WxhjdeuutfveZnp4uY4wmT57sXnfBBRcoMjLSbxDJHbgDDQCtW7eWMUZvv/12gdv+nQBw8lB+sh07digyMlKXXXaZ1/rMzEyVLVtW55xzjte/d7t27WSM0dq1a/3ur379+qpQoYL759wAkNepVABgAwEAQNjLLwC0bdvW7+80btxYkZGRXuvyGzB/+OEHGWNUo0YNr9ODTl7i4+P1j3/8w/07l1xyiYwx2rx5s8/+srKyFBUVlWcAGDlyZJ7P97ffftOQIUN00UUXKSEhwef8/u7du3ttn18AmDJliowxuv766/0+p9x3we+//35JrnP/jTGqWrWq39o++uij0woA5cuXV0REhI4ePVrgtn8nALzyyit57vf666+XMUbr1q1zr3vzzTdljNGAAQO8tq1YsaKKFy+eZw/UqVNHxhj3KUWrVq1SsWLFFBcXp86dO+ull17yG5wAIJgIAADCXkFfAvYn90u/J8tvwMx9x76g5bzzznP/TvXq1WWM0eHDh/3WULFixTwDwAsvvOD3dzIyMnT++efLGKPLL79cvXr10sMPP6zU1FT169fP73POLwA88cQTAT2vu+++W5LrHXNjjM875rlyg1KgASAqKkply5YNaNu/EwBO/r7HqebMmSNjjAYPHuxe16ZNGxlj9O233/rUG8jfa9u2be7fWbFihVq1aqW4uDj347Vq1co3lABAYSIAAAh7wQgA33//vYwxuvnmmwOuq0GDBo4/AchryB09erSMMUpNTfV5bMWKFacdACZOnChjjCZMmBDQc7L5CcBLL70kY4ymT5/u81hGRka+AeCjjz7Kc79Hjx5VqVKlVLlyZWVlZWnPnj2KiopSvXr1fLYtV66cEhMTC6zVn+PHj2v58uV69NFHVaZMGRljvK5yBADBQgAAEPbOVACYNWuWjDGaMWOGz/YnTpxQmTJllJSUFPClG3O/GOzkOwB5BYAePXrIGKM1a9b4PPbkk0/6fc65dfg79eTLL7/M9zsA/tj6DsD8+fNljNFjjz3m89iSJUscBwBJuvfee2WM0cKFCzVu3DgZYzR27Fif7Vq1apXvdwACldtruadWAUAwEQAAhL0zFQDef//9PAdMSXr00UdljFHPnj39vmO9a9cur/PIP/74YxnjugrQ/v373eszMzN19dVXOwoAuUP+M88847X+66+/dt8v4NTnPGjQoHxPg2nSpIkiIyP1/PPP+318zZo12rNnj/vn3KsAtW/fvtCvAnTyul27dikyMlIXXHCBjhw54l7/+++/uz9tcRoAcgPZnXfeqQYNGigqKsrrOedaunSpjHFdBWjnzp0+jx8+fFgrV650/7x8+XK/vZL7Sc7Jpx0BQLAQAACEvTMVAP744w/Fx8erVKlS6tOnj9LS0pSWluYe3v/880/3de6Tk5PVuXNnDR06VN26dXMP0U8++aTXPrt37+7e/j//+Y8efPBB1axZ030fgPPPP99r+4ICwM6dO1W2bFlFRkbq5ptv1uDBg3XzzTerePHi6tixo9/nnHvZ0+rVq2vw4MFKS0vzuuzljh07VKNGDRnjuq5/9+7dNXjwYN155536xz/+IWOM11B7pu8D8Mgjj8gYo5IlS6pz587673//q3vuuUe1atXy2U/nzp1ljOvL2P3791e3bt1UqVIl3XbbbX8rAEiuTzaKFy8uY4zatGmT53ZPPfWUIiIiFB8fr1tvvVWDBg1Sr169dOONNyohIUEtWrRwb9u2bVuVLFlSN954o/r06aMhQ4aodevWKlasmBITE/lCMAArCAAAwt6ZCgCStGDBAl155ZVeV9c5+dz5nJwczZo1S82aNVNiYqKKFy+uypUrq3HjxhoxYoS2b9/utb/s7GyNHTvWfcOppKQk9e7dW/v371eJEiV8zjMvKABI0rp169SmTRtVqFDBfRfg6dOn5/ucx4wZ476rrb9PHg4ePKgRI0bokksuUUJCgmJjY3Xeeefpxhtv1NSpU32+yHzgwAENGDBAlStXdt8J+P/+7/8c3wn4/fffV4sWLZSYmOi+E3C7du30wQcfeG13/PhxDRw4UMnJySpevLiqV6+ukSNH6sSJE387AKSlpbn/zd988818t122bJk6dOigpKQkFS9eXOXLl1e9evU0YMAAffnll+7tFi1apLvvvlu1a9dWqVKlFB8fr5o1a6pv375eXxQGgGAiAACABRs3bpQxRrfffrvtUgAARQwBAAAK0a+//upzt9cjR47oxhtvlDFGc+fOtVQZAKCoIgAAQCEaMmSIzj33XHXp0kVDhgxR165dVaVKFRlj1LJlS+Xk5NguEQBQxBAAAKAQLV26VDfccIMqVaqk6OhoxcfHq379+nr66acDvpwoAABnEgEAAAAAKEIIAAAAAEARQgAAAAAAihACAAAAAFCEEAAAAACAIoQAYFFGRobS09O1evVqrV27loWFhYWFhYWF5TSW1atXKz09XRkZGbbHurBCALAoPT3dfdt5FhYWFhYWFhYWZ0t6errtsS6sEAAsWr16tbtpbSdoFhYWFhYWFpZwW3LfTF29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SpcurZIlS+qmm27K8/+kC2OfBflbAeCFGz0vMNvLC74DWUGcfgLg78u6KSkpuvvuu90/F1YAePrpp2WMUVpaWkDbt2jRQlWrVvVZn/uOdX4B4OjRo2rcuLGMMSpfvrw6duyouXPneoWBggJAXqdX5RUAXnjhBZ9tmzRpolq1arl/LowAkNffaf/+/TLGaODAge51gfZAsBEAAOAv21Z45oNNHxT64QgAzhRqAMi92sm5556ra665xu9AcOjQIRljdOWVV+qJJ57QtGnT9O9//1uRkZG65pprfL4E+Nxzz8kYo/bt22vatGnq3LmzjDF66qmnfPZbo0YNnXPOORo1apTGjh2rqlWrqkqVKj7nChfGPgNRlD8BkKTKlSurevXqAW+f11WATh1KCyMAzJw5UxEREX6Hz7z8nQAgucLx0qVLNWDAANWuXVvGGDVr1sx9ydKCAkDdunX91vV3AsB5553nNwD885//DFoACKQHgo0AAAB/2bDIEwB2fFnohyMAOFOoAeD48eP69ddfJeU9EGRmZvq9Cszw4cNljNGSJUvc644ePapy5cqpVatWXtveddddSkhI0B9//OFeN2rUKBlj9MUXX7jX/fDDDz5XgSmMfQaqKH8HQHKd+hHIl2lz2QoA6enpKlasmNq3b5/n6Tj+/J1TgPwZMWKE12viq6++OqMBIJBTgBo0aOD3U5uqVat67TO/2gI9Bejzzz/3ewoQAQAAQtiaNzwBYO+PhX44AoAzQfsOwOleF3zNmjUyxnidivP+++/7Pf96xYoVMsZ4XcGlYcOGatiwoc9+mzdv7vWuc2HsM1BFPQBs2rRJCQkJqlOnjnbv3u338UDuA1CYAeCTTz5RbGysrr322tO+edXf+RLw77//7rO/3F597733JLnCpzFG48aN89nWSQDI60vAJ/8b3HrrrapYsaLXdwveffddGWO89plfbXl9CfjUy7B27NjR75eACQAAEMK+fN4TAA743uPnTCMAOBOyAWDx4sUyxuiVV15xr3viiSdkjNGePXu8ts3MzFRkZKQeeOABSa5TJ2JiYtSrVy+f/T7yyCMyxrgHncLYZ6CKegCQpHfeeUexsbFKTExUv379NH36dE2ePFl33XWXoqOj1b17d/e2wQ4A27ZtU+nSpRUXF6fJkye7L2eZu3z33Xf5/n52drYaN27svgzopEmTAr4M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u3dvvn9rAgAASFr+jCcAHDsQlEMSAJwhAFhEAHANXF9++aUaNWqkzp07ux9LT09XZGSkdu7c6TcA3HvvvYqKitJ9992n5557TkOGDFFCQoIaNmyoP//8071du3btdNttt2n06NGaMmWKOnToIGOMBg4c6N4mMzNT559/vipXrqwnnnhCMze4ezwAACAASURBVGbM0PDhw9WwYUNt27ZNkrMAUKdOHbVt21bPPvusJk+eLMn1b166dGnVqVNHo0aN0qRJk3T11VcrIiJCb7/9tnsfv/76qypUqKDExEQNGzZMo0ePVo0aNXTxxRcHFAAWLVqkyMhI/eMf/9DYsWP18MMPq3Tp0qpbt26BAeDOO+9UdHS0HnjgAc2YMUOjRo1SmzZt9PLLL0uSFi9erPr166t8+fKaPXu2Zs+erXnz5uX5d+ratatiY2NVo0YNde7cWZMmTVLr1q1ljNGjjz7q3i7QALBixQpdf/31Msa4jz979uw8n8/atWuVkJCgpKQkpaWl6amnntL555+vmJgYff755+7tcvuxQYMGatasmSZOnKgHH3xQxYoV02233Zbv35sAAACSPnjirwBQWsrODsohCQDOEAAsIgB4AsCkSZNUsmRJHT16VJLUoUMHXXvtta7neUoAWLZsmYwxmjNnjtf+Fi5c6LM+d38n69Gjh+Lj43X8+HFJ0jfffOP+JCIvTgLAHXfc4bPtv/71L1100UXuY0uu8+YbNWqkGjVquNf1799fxhitWrXKvW7v3r0qXbp0QAGgfv36SkpKcn+CIbkG95Pfrc+r/tKlS6tPnz757j+vU4DyCgDGGPXt29frObdq1UrR0dHat2+fpMADgJT/KUCnPp927dopOjra67W0a9culSxZUldffbV7XW4/XnfddV6fTAwYMEDFihXz+lueigAAAJL+N8QVAEZWCdohCQDOEAAsIgB4AsDevXsVFRWl119/XQcPHlRcXJymT5/uep6nBID//Oc/Kl26tPbu3at9+/Z5LSVKlNC9997r93gHDx7Uvn379PLLL8sYo2+//VaStGXLFhljdO+99+rIkSN+f9dJAPjkk0+8tvv9998VERGhtLQ0n7qHDx8uY4x++cV1zmTNmjV15ZVX+hyrd+/eBQaAXbt2yRijoUOH+jxWp06dAgNASkqKLrvsMu3cuTPPYzgJABs2bPDadsGCBTLG6NVXX5VUOAEgKytL8fHxft/B79GjhyIjI3XggOtj6tx+fP311722e/vtt2WM0Xfffef3eBIBAAAkSfN6uwLAmNpBOyQBwBkCgEUEAE8AkKQbbrhB7dq104svvqjo6GhlZGS4nucpAaBly5Z+zwHPXW666Savv3G7du1UqlQpn+1OHtAfeOABGWMUFxen5s2ba9KkSV7v+DoJANu3b/fabtWqVfnWbYzR119/LUmKiYnxOiUq14QJEwoMACtXrpQxRs8//7zPYzfffHOBAWDu3LmKjY1VZGSkGjZsqNTUVJ8+PN0AEBkZ6fMl782bN8sYoyeffFJS4QSAX3/91edUo1zjx4/3ev3l9uPJpwWdXNfHH3/s93i5z4UAAKDIe62TKwBMujxohyQAOEMAsIgA4B0AZs2apZiYGF155ZVq27at53meEgBatGihc845R0uWLPG75L6zn5GRoXLlyun888/X+PHj9e6772rJkiUaNWqU30FzzZo1SktLU5MmTRQZGank5GTt2LFDkrRt2za/ASArKyvPAJB7akuu3MF84MCBedZ+8OBBSXYDgOT6FGHy5Mlq27at4uPjFRsb6/Ul7cIIAB9//LHff5dNmzYFNQDk9mOuvILJqc+FAACgyHuprSsATP9X0A5JAHCGAGARAcB74Dp06JDi4uJkjNHcuXM9z/OUANC7d28VK1bM7/n9J5s3b57fU3GmTZtW4EC3fPlyGWP08MMPS5IOHDggY4zPza9yh9hAAsCePXtkjNFDDz2Ub92S3VOATrVnzx4lJyercePG7nWtW7c+46cAfffddzLGuL9QnOuDDz7w2ef999//t08B6tmzp99TgAgAAODQtGauADCrXdAOSQBwhgBgEQHAd+B68cUXNWzYMK/h/tQAkPtOsb9B+sSJE+5Th+bPn+9z6kZmZqbq16/vNdAdOHDA593pgwcPKjIy0utqQeXLl9fNN9/std2DDz4YcACQpGuuuUZly5bVrl27fB47+VKTtr4EnJWV5ffLrg0bNtRll13m/rljx44qU6aMz3an+yXg4sWLu5/3/v37VaxYMQ0YMMBrn+3bt/fZ55AhQ2SMcf9b5/V8JNeXgGNiYrz+Zrt371apUqX8fgmYAAAADk1s6AoAc7sE7ZAEAGcIABYRAPwPXD7P089lQHv06CFjjFq2bKlx48Zp0qRJ6tevnypX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lH+6AsCc22xXwizlEAHAIpoWAACEnbH/cAWAt3vYroRZyiECgEU0LQAACDsjkl0BYMFQ25UwSzlEALCIpgUAAGEl60/PPQA+HmW7GmYphwgAFtG0AAAgrBza4wkAq6bZroZZyiECgEU0LQAACCt7f/QEgDVv2K6GWcohAoBFNC0AAAgrP6/0BICfltiuhlnKIQKARTQtAAAIKz/+zxMAfvnKdjXMUg4RACyiaQEAQFj5Zo4nAPy+2XY1zFIOEQAsomkBAEBYWTHJEwCOZtiuhlnKoZAJABs3blTHjh2VnJysuLg41apVS8OHD9eRI0e8tlu+fLkaN26suLg4VaxYUX379tWhQ4d89nf8+HENHjxYSUlJio2N1eWXX67Fixf7PXZh7DMQNC0AAAgrH6S5hv9hZaTsbNvVMEs5FBIBYPv27SpTpoxSUlL05JNPaurUqbr77rtljNFNN93k3u6bb75RbGysGjRooClTpujhhx9WTEyMbrjhBp993n777YqKitLAgQM1depUXXXVVYqKitKyZcu8tiuMfQaKpgUAAGHlvQdcAeCp82xXIolZyqmQCAAjRozw+4/XpUsXGWP0xx9/SJJatmyppKQkHThwwL3N9OnTZYzRokWL3OtWrVolY4xGjx7tXnfs2DFVr15dV111ldcxCmOfgaJpAQBAWHnj364AMKGB7UokMUs5FRIBYMiQITLGaN++fT7rIyMjdfjwYR04cEBRUVEaNGiQ1zaZmZkqUaKE7rnnHve6QYMGqVixYl5DvSSNHDlSxhht375dkgpln6eDpgUAAGFlVjtXAJjWzHYlkpilnAqJALBgwQL36T7ffPONtm/frtdee02lSpVS//79JUmfffaZjDGaO3euz+//85//1CWXXOL++brrrlPt2rV9tlu6dKmMMZo/f36h7fN00LQAACCsTG3qCgCz29uuRBKzlFMhEQAkKS0tTXFxcTLGuJeHH37Y/fgbb7whY4w+/fRTn9/t0KGDKlWq5P65bt26atbMN5muW7dOxhg999xzhbbPvOzZs0dr1671WtLT02laAAAQPsZf7AoAb95ruxJJBACnQiYAzJ49Wy1atNC0adP01ltvqVu3boqIiNDEiRMlSbNmzZIxRqtWrfL53c6dO6t06dLun6tVq6aWLVv6bLd582YZYzRu3LhC22deUlNTvcLNyQtNCwAA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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#With coarse pixel-splitting, new integrator:\n",
    "kwarg[\"method\"] = IntegrationMethod.select_one_available(\"csr\", dim=1)\n",
    "f,a = plot_distribution(ai, kwarg, integrate = ai._integrate1d_ng)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdfZyNdf7H8a+ZMXdux00M7U7uQ+WmKCTLVu4XSdS62R+FskKNm1a7o0Q3Njcht2UjWalMyiJaSZItlFDJTUsUEuN2hpl5//44O+c4zpmZ4zJnvmfM6/l4XI/HzjXXua7PGZ/Tft7nXNd1jAAAAAAUGsZ2AQAAAADyDwEAAAAAKEQIAAAAAEAhQgAAAAAAChECAAAAAFCIEAAAAACAQoQAAAAAABQiBAAAAACgECEAAAAAAIUIAQAAAAAoRAgAAAAAQCFCAAAAAAAKEQIAAAAAUIgQAAAAAIBChAAAAAAAFCIEAAAAAKAQIQAAAAAAhQgBAAAAAChECAAAAABAIUIAAAAAAAoRAgAAAABQiBAAAAAAgEKEAAAAAAAUIgQAAAAAoBAhAAAAAACFCAEAAAAAKEQIAAAAAEAhQgAAAAAAChECAAAAAFCIEAAAAACAQoQAAAAAABQiBAAAAACgECEAAAAAAIUIAQAAAAAoRAgAAAAAQCFCAAAAAAAKEQIAAAAAUIgQAAAAAIBChAAAAAAAFCIEAAAAAKAQIQAAAAAAhQgBAAAAAChECAAAAABAIUIAAADkmX379skYoz59+tguBQCQDQIAgALPGCNjrvw/Z/PmzZMxRvPmzbvyokJInz59ZIzRvn37gn4sAgAAhD4CAIACjwCQMwIAAOBiBAAABR4BIGcEAADAxQgAAAo8fwHg4kF037596t69u8qWLauoqCjdfPPNeu+997y2b9GihXs/ly4XD84XLlzQ9OnTdeutt6pEiRKKiYlR/fr1NXXqVGVkZPjUlpmZqcmTJ6t27dqKiopSpUqVNGjQIJ04cUIJCQlKSEjw2v7iELJixQq1aNFCJUuW9Hp+S5cu1R//+EfVqFFDsbGxio2NVcOGDTVlyhSfGrJ7Tpce99ixYxo1apSuv/56RUdHq2TJkmrVqpVWrVrl929+8uRJDRs2TJUrV1ZUVJRq1aqlF198UXv27HEUAFatWqUOHTqofPnyioyM1LXXXqs//OEPWr16td+/jT/GGLVo0cJrXVJSkowxWrt2rRYuXKjGjRurWLFiSkhI0MaNG2WMUefOnbOt6/rrr1dkZKSOHTvmtX7lypVq27atypYtq8jISFWtWlWJiYk6fvy4zz6++uor9ejRQwkJCYqMjFS5cuXUoEEDDRkyROfPnw/8jwQAeYQAAKDAyykA/O53v1P58uV16623aujQoerdu7eioqIUFhamf//73+7t582bp06dOskYo06dOikpKcm9ZA1158+fV+vWrWWMUa1atTRgwAANGTJEN910k4wx6tmzp09tDz/8sIwxqlSpkgYPHqzHH39cNWrUUKNGjVSpUqVsA0D79u0VHh6uDh06aMSIEerevbt7m1q1aql27drq2bOnRo4cqYEDB6pmzZp+a0hKSlK9evVkjNGQIUPcz2nSpEnubX744Qddd911MsaoefPmGjp0qB566CHFx8erSJEimj17ttc+U1NT1ahRIxljVK9ePY0YMUL9+/dX6dKl9Yc//OGyA8Df/vY3GWNUvHhx9ezZU0888YT69OmjGjVqeO3nSgJAhw4dFBUVpXvvvdf9N8v6W0ZGRuqXX37x2d+mTZtkjFHXrl291o8ZM0bGGJUpU0a9e/dWYmKi7r77bhljVKdOHaWkpLi3/eqrrxQdHa2YmBh1795do0aN0iOPPKK7775bRYsW1alTpwL+OwFAXiEAACjwcgoAxhiNGTPG63crV66UMUZt27b1Wp/bgJk1TP75z39Wenq6e316err69u0rY4ySk5Pd6z/++GMZY1SzZk2vd4bT0tLUvHlzv+/EZ9VQpEgRrVixwm8du3fv9lmXkZGh3r17yxijzz77zOt3uZ0C1KJFCxUpUkSLFi3yWn/8+HHVq1dP0dHR+vnnn93rx40bJ2OM7rnnHq9PHPbu3au4uLjLCgCrVq2SMUZVqlTRjz/+6PP7AwcOuP/3lQSA2NhYbdmyxecx48ePlzFGU6dO9fndI488ImOMli1b5l7373//W8YYNWnSxOfd/qz6hg4d6l732GOP+fRFll9//dXvp0YAEGwEAAAFXk4BICEhwWtYz/Lb3/5WZcuW9VqX04CZkZGhMmXKqGLFirpw4YLP748fP64iRYqoW7du7nX9+vWTMUavvfaaz/affPJJjgEgp9NSsrN582YZY/TUU095rc8pAHz55Zcyxujee+/1u8/k5GQZYzR9+nT3uurVqyssLMxvEMkauAMNAB06dJAxRu+8806u215JALh4KL/YgQMHFBYWpltuucVrfVpamsqUKaNrrrnG69+7c+fOMsZo+/btfvdXv359lS9f3v1z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O/Gj5w5A/5mTb4clADhDALCIAABcHXitAij09m/yBIBvV+TbYQkAzhAALCIAAFcHXqsACr2v3/IEgJ++zrfDEgCcIQBYRADA5Zo3b56MMdq3b5+jx/fp00cJCQle64wxSkpKuuLaJGnfvn0yxmjevHlexyxWrFie7D8Qefl8AsVrFUCh98kUTwA4+2u+HZYA4AwBwKLCHgCyhlljjNavX+/z+8zMTF177bUyxqh9+/YWKgw9oRIAFi5cqEmTJvmsz68AsHz58mxrJgAAgAXLh7uG/3GVpMzMfDssAcAZAoBFBADXMBsdHa2HH37Y5/dr166VMUZRUVEEgP8JRgA4d+6cLly4cFn7ad++vc9+JFdoO3funNLTPd8AGYwAMGjQIBnj/z9fTp7PlbraX6sAkKtFD7gCwNRG+XpYAoAzBACLrjQAJIx83/pyJbKG2XvuuUflypXzGdoeeugh3XzzzUpISCjwAeD06dN5sp9gBAAnsgsA2R0zPwOADQQAAIXezOauADC/S74elgDgTOj8P2ghRABwDbNLlixRkSJF9K9//cv9u7S0NMXFxenFF1/0GwAyMjI0adIk1alTR1FRUbrmmmvUv39//fqr93mHycnJateuneLj4xUZGamqVavq6aef9nqHWpJ27dqle+65RxUqVFBUVJQqV66s7t2768SJE5L8n9qS5dJTTpKSkmSM0Y4dO3T//ferdOnSql+/vvv333zzjbp27aq4uDhFRUXp5ptv1rvvvuuz3+3bt6tly5aKjo5W5cqVNXbsWL3yyisBB4ClS5eqbt26ioqKUt26dfXOO+8EdArQyZMnNWTIECUkJCgyMlLly5fXnXfeqc2bN0uSWrRo4T51K2vJ2mdOpwDt2bNHd999t2JjYxUfH6+nnnpKmRd9TJz1ic/atWu96rt0n3369PE5/sVhwN8pQFu2bFGbNm1UokQJFStWTK1atdLGjRu9tsnqx08++UTDhg1TuXLlFBsbq86dO+vIkSM5/q0JAAAKveerugLAu3/O18MSAJwhAFhEAHANXJ9//rmaNm2qXr16uX+XnJyssLAwHTx40G8AePDBBxUREaGHHnpIM2fO1MiRI1WsWDE1atRI58+fd2/XuXNn3XfffZowYYJmzJihbt26yRijxMRE9zZpaWmqUqWKKlWqpGeeeUZz587VU089pUaNGumHH36Q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KF68uIwxCg8P1+9+9zt9/vnn7m0++eQTGWO0ePFin8fffvvtatiwofvnO++8U7Vr1/bZbs2aNTLGaNmyZUHb5+WgaQEAQEja/aEnAOxdZ7uabDFLORMSAWDDhg3q2rWrXnnlFb377rt69tlnVbZsWUVHR2vLli2SpCVLlsgYo48//tjn8d26dVPFihXdP9etW1etWrXy2W7Hjh0yxmjmzJlB22d2Dh8+rO3bt3stycnJNC0AAAg9/5nrCQDH/2u7mmwRAJwJiQDgz/fff6+YmBi1bt1akjR//nwZY7Rp0yafbXv16qVSpUq5f65ataratm3rs92ePXtkjNGkSZOCts/sJCUlZXunI5oWAACElFVPuob/p8pKGem2q8kWAcCZkA0AkuuuO5GRkUpPT+cTAAAAgPzyz56uADClge1KckQAcCakA8Dw4cNljFFKSgrXAAAAAOSXGc1cAWB+F9uV5IhZypmQDgBdu3ZVdHS0MjIydOLEiRzv2NO3b1/3usTERL937Bk3bpzXHXuCsc/LQdMCAICQk5kpjb/WFQDef8x2NTlilnImJALAkSNHfNZ9+eWXKlq0qP7whz+417Vp00bx8fE6efKke93cuXNljNGKFSvc6z777DOfe/anpqaqevXquvXWW72OE4x9BoqmBQAAIef0L54LgDe8ZLuaHDFLORMSAaBly5Zq166dnnnmGc2ePVtDhw5VbGysSpUqpZ07d7q327x5s6Kiory+tTc6Olp33323zz67devmfnd/1qxZatq0qSIiIrRunfetrIKxz0DRtAAAIOQc+MITAHa+Z7uaHDFLORMSAWDKlClq3LixypQpo4iICMXHx6tnz576/vvvfbZdv369mjZtqujoaJUvX16DBg3yevc+y7lz55SYmKiKFSsqKipKjRo10sqVK/0ePxj7DARNCwAAQs62JZ4A8NPXtqvJEbOUMyERAAormhYAAIScdS94AkDqKdvV5IhZyhkCgEU0LQAACDnJj7iG/xeq2a4kV8xSzhAALKJpAQBAyHm1nSsAzPm97UpyxSzlDAHAIpoWAACEnBfruALAWw/ariRXzFLOEAAsomkBAEBIuZAqJZVyBYAPn7FdTa6YpZwhAFhE0wIAgJBydJfnAuCtC21XkytmKWcIABbRtAAAIKTs+sATAH7YYLuaXDFLOUMAsIimBQAAIWXjDE8A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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#With fine pixel-splitting, new integrator:\n",
    "kwarg[\"method\"] = IntegrationMethod.select_one_available(\"fullsplit_csr\", dim=1)\n",
    "f,a = plot_distribution(ai, kwarg, integrate = ai._integrate1d_ng)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Any kind of pixel splitting causes a change in the distribution of signal. This error has been spotted by Daniel Franke from Hamburg. If the azimuthal integration should be performed like:\n",
    "\n",
    "$$\n",
    "I_{bin} = \\frac{\\sum_{pix \\in bin} c^{pix}_{bin}I_{pix}}{\\sum_{pix \\in bin} c^{pix}_{bin}\\Omega_{pix}P_{pix}}\n",
    "$$\n",
    "\n",
    "the associated variance propagation should look like this: \n",
    "\n",
    "$$\n",
    "\\sigma_{bin} = \\frac{\\sqrt{\\sum_{pix \\in bin} (c^{pix}_{bin})^2 \\sigma^2_{pix}}}\n",
    "                     {\\sum_{pix \\in bin}c^{pix}_{bin}\\Omega_{pix}P_{pix}}\n",
    "$$\n",
    "\n",
    "And the square of the coefficient has been missing until v0.16 of pyFAI. Updated rebinning engines contain a ```coef_power``` optional argument which allows the user to change the power applied on the coefficient, like CSR-integrators:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "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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0b59+8qs4ayzzio3AJR30eyuXbt0/vnnyxijK664Qg899JD69OmjrKwsde/evczf2U0AqFatms4888wyjz9Se1JSUql9x/pvy52IAHgdAQAAfqYyA0CfPn1kjNEtt9xSoc+uigCwfPlyGWN00003VagmSbr00ktdfwNQ3nUIQ4YMkTFGWVlZET9bsGBBpQWAI98AlPVshSPfAJx++uml9hMAACQyAgAA/Exl3gb0zDPPlDFG//znPyv02ZUVAMaMGSNjjF5//fWI44uKilSzZk3VrVu3wg8cO3JhsJtrAMoLAA8++KCMMfr6668jfvbMM8+U+TsfqaOsi4elsv8trr76ahljNGPGjIjjP/3003KvASAAAEhUBAAA+JnKCABffvmlc0vN3/3udxX+7MoKAJMnT5YxRk8++WSZ7+nbt6+MMeratasOHDgQ8fPvvvtOubm5zutZs2Y5dwHavXu3s7+wsNC5KDbaAHBkyB82bFip/cuWLXOeF/Dz37lnz54yxpS67enRyvq3GDdunIwxatGihfbv3+/s379/v1q0aCFjjN55551S7yEAAEhkBAAA0OEHUt199926++67nfvj169f39n317/+tdTxRwJAIBBwLpx9/PHH9cADDzi3ljTm8L3sy1s3X5bKCgA7d+5Uenq6TjvtNHXr1k0DBgzQgAEDnOH90KFDuuGGG2SM0TnnnKM777xTvXr1UpcuXdSmTRslJyfrmWeeKXXOBx54wDn+L3/5i/76178qMzPTeQ7A+eefX+r44wWAzZs3O8tzbrrpJj322GO66aabdNJJJ+nWW28t83c+ctvTBg0a6LHHHtOAAQP08ssvH/PfQpJuueUW57qGRx55RI8++qhz/cHRzyU4ggAAIJERAABAP90Xv7zt53/dPhIAjt6qV6+ujIwMtWnTRj169FBOTk7UdVRWAJCk7Oxs/dd//Vepu+scfd5wOKwxY8aoXbt2qlWrlk466SSdffbZuvLKKzVw4MCIu9yUlJTo+eef14UXXqiTTz5ZdevW1Z/+9Cft3r1bp5xySsRdc44XAKTD99W//vrrVadOHecpwKNHjz7m7zx06FBddNFFOvnkkyP+2xzrScDDhw/XZZddprS0NKWlpal58+Z65ZVXjvkk4LIQAAB4HQEAAHBCVq9eLWOMbrvtNtulAAAqgAAAAKiQLVu2RPy1fP/+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AADgArOUOxUKAEuXLo16w/HRtHYNnLzS+RZg864DtssBAABRYpZyp0IBICkpqcwn/pa1HTkWx0fT2rV8024nAIyctcZ2OQAAIErMUu5UKAC8/fbbUW84PprWrnA4rBZPT1cgGFKrZ2bYLgcAAESJWcodrgGwiKa17/6/L3G+BVi9dY/tcgAAQBSYpdzxfAB4+umnZYxR48aNI342f/58XXnllUpLS9NZZ52lhx9+WHv37o047uDBg3rsscdUt25dVa9eXVdccYU++eSTMj+vouesCJrWvnXb9zkB4Llp39guBwAARIFZyh1PB4CNGzcqPT1dNWrUiAgAOTk5ql69ui699FKNGDFCffr0UWpqqtq3bx9xnttuu00pKSnq0aOHRo0apVatWiklJUVz5851fc6KoGnjww2vzFMgGNLFWVP13uINtssBAAAVxCzljqcDwK233qp27dqpbdu2EQGgQ4cOqlu3rvLz8519o0ePljFG06ZNc/YtWrRIxhgNGTLE2VdQUKAGDRqoVatWrs5ZUTRtfBizYJ3zLcDToVzb5QAAgApilnLHswFg9uzZqlatmr7++uuIAJCfn6+UlBT17Nmz1HsKCwt1yimn6N5773X29ezZU9WqVSs11EvSoEGDZIxRXl5e1OesKJo2Puw+cEiZfaYoEAyp2zhuYQsAgFcwS7njyQBQXFysSy65RA8++KAkRQSAefPmyRijCRMmRLz317/+tZo3b+68vuaaa9SoUaOI42bMmCFjjD7++OOoz1lRNG38eOS9HAWCIV3w+BTt3FdouxwAAFABzFLueDIAvPLKKzr99NP1/fffS4oMAB988IGMMZozZ07Eezt16qSMjAzndePGjdWuXbuI43Jzc2WM0ciRI6M+Z1m2bdumFStWlNomTZpE08aJBWt2OMuA3pj7H9vlAACACiAAuOO5ALBjxw7Vrl1bzz33nLPv5wFgzJgxMsZo0aJFEe+/8847dfrppzuv69evrw4dOkQct3btWhlj9MILL0R9zrJkZWXJGFPmRtPaFw6H1fbZmQoEQ7r2+dkKh8O2SwIAAMdBAHDHcwGga9euatiwoQoLf1qmwTcAqAyvzPy38y1ATt4u2+UAAIDjIAC446kAsHr1aiUnJ2vYsGFat26ds7Vs2VKZmZlat26dfvjhB64BgCtb8wt0fq/DAeCWkQtslwMAAI6D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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "HistoBBox1d.integrate(self, weights, dummy=None, delta_dummy=None, dark=None, flat=None, solidAngle=None, polarization=None, double normalization_factor=1.0, int coef_power=1)\n",
      "\n",
      "        Actually perform the integration which in this case looks more like a matrix-vector product\n",
      "\n",
      "        :param weights: input image\n",
      "        :type weights: ndarray\n",
      "        :param dummy: value for dead pixels (optional)\n",
      "        :type dummy: float\n",
      "        :param delta_dummy: precision for dead-pixel value in dynamic masking\n",
      "        :type delta_dummy: float\n",
      "        :param dark: array with the dark-current value to be subtracted (if any)\n",
      "        :type dark: ndarray\n",
      "        :param flat: array with the dark-current value to be divided by (if any)\n",
      "        :type flat: ndarray\n",
      "        :param solidAngle: array with the solid angle of each pixel to be divided by (if any)\n",
      "        :type solidAngle: ndarray\n",
      "        :param polarization: array with the polarization correction values to be divided by (if any)\n",
      "        :type polarization: ndarray\n",
      "        :param normalization_factor: divide the valid result by this value\n",
      "        :param coef_power: set to 2 for variance propagation, leave to 1 for mean calculation\n",
      "\n",
      "        :return: positions, pattern, weighted_histogram and unweighted_histogram\n",
      "        :rtype: 4-tuple of ndarrays\n",
      "\n",
      "        \n"
     ]
    }
   ],
   "source": [
    "ai.reset()\n",
    "kwarg[\"method\"] = IntegrationMethod.select_one_available(\"csr\", dim=1)\n",
    "img = dataset[0]\n",
    "fig,ax = subplots()\n",
    "ref = ai.integrate1d(img, variance=img, **kwarg)\n",
    "jupyter.plot1d(ref, ax=ax)\n",
    "csr = ai.engines[\"csr_integrator\"].engine\n",
    "print(csr.integrate.__doc__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With those modification available, we are now able to estimate the error propagated from one curve and compare it with the \"usual\" result from pyFAI:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9594304350043318\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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1BEAv9/SpUsVDoe1evXqQv/81VdfVSgUUnp6eol+b1kPgO+//169e/dWYmKiatSooRNPPFFXXXWVFi5cGPWzX3/9tY455hgtWbKkyN9/00036corrwzi0gO3YMEC9ejRQ82aNVOVKlVkTNG35dddd51uvPHGI/q9BAAAACh1BMDvN23aNBlj9NFHHxX654mJibr77rtL/HuzsrK0b9++33l1pefwAHjwwQdVq1YtdevWTWPHjtUTTzyhhg0bqnLlypozZ07Uz7do0UJ33nlnob87KytLxx57rEaNGhXU5QcqHA6ratWqOu+889SoUaNiA2DmzJkyxmjlypW/+XsJAAAAUOoIAHt79+5Vbm5usQHw9ddfyxijDz74wP0FlrLDA+Crr77Srl27Cpyzfft21a1bV61atYr6+aeeekrx8fFRPyNJH374oYwxRT6LEoTc3Fzt3bu3VH7X5s2b9euvv0qSevbsWWwAZGVlqXbt2kpOTv7N30sAAACAUlfRA2Dnzp267777lJCQoGrVqqlu3bpq27atFi1aFDln7NixatCggWJiYtS8eXPNnTtXrVu3VuvWrSPnfPTRRzLGaMqUKerbt69OOukkVapUSc8884yMMVHHwRjo16+fqlWrpqysrBJfV2EvAdq+fbs6d+6sY489VjVr1tSf//xnLVmyRMYYvfTSSwV+Nj4+XuvXr9f111+v+Ph4HX/88XrwwQeVk5NT4Hc++eSTuuiii1SnTh3FxMSoWbNmmjZtWtT/lkf6HoCbbrpJderUiXr8m2++kTFGb775ZtSfPfDAA2rcuLHV9e/evVsPPPCATjnlFFWrVk2NGjXSk08+qby8vALnGWPUs2dPvfrqq2rcuLGqVKmi6dOna/Xq1TLG6Mknn9SoUaN0+umnKzY2VldccYXWrl2rvLw8DRw4UCeffLJiYmJ03XXX6eeffy7y7/9bASBJN954o84555xiz5EIAAAAEICKHgCdOnVStWrV9MADD2jChAkaOnSorr32Wr366quSpAkTJsgYo5YtW2rEiBG6//77VatWLTVo0KDQAGjcuLGaNm2qYcOG6bHHHtPSpUt17733yhijPn36aNKkSZo0aZI2b94sSWrbtq2aNWtW4uuSogMgNzdXF110kSpXrqx//OMfGjVqlK644golJiYWGgAxMTFq0qSJunbtqjFjxujmm2+WMUajR48ucC2nnHKK/v73v2vUqFEaNmyYWrRoIWOMUlJSCpx3pAHQsmVLNWrUKOrx7OxsxcbG6sEHH4z6s7POOkv/+te/Snz9eXl5atOmjSpVqqS//vWvGjVqlK699loZY3T//fcXmGGM0R/+8AfVrVtXAwYM0HPPPafFixdHAqBp06Zq3Lixhg0bpkceeUTVqlXThRdeqD59+kT2495771WlSpX0l7/8pci//5EEwODBg3XMMccoIyOj2PMIAAAAUOoqegDUrFlTPXv2LPTPsrKydMIJJ6hp06bKzMyMPD5u3DgZYwoNgAYNGkRe6nFQcS8BOuWUU3TzzTeX6LoOOjwA3njjDRljNHz48Mhjubm5atOmTaEBYIzRwIEDC/zOc889V+edd16Bxw7/+2RlZemPf/yj2rRpU+DxIwmAuXPnqlKlSkW+vKVRo0ZRb/RdtWpV1P9+R3r9M2bMkDEm6hOWbrnlFlWqVKnA6+yNMTrmmGO0dOnSAuceDIC6desWeKP2ww8/LGOMEhMTlZ2dHXn89ttvV7Vq1Yp8f8aRBMBrr70mY4wWLFhQ7HkEAAAAKHUVPQASEhJ0/vnna8OGDVF/9tlnn8kYo+eff77A41lZWapZs2ahATBgwICo31NcAMTGxuqvf/1ria7roMMD4G9/+5uqVq2qPXv2FDjvYBgUFgBbt24tcO69996r2rVrFznzl19+0bZt29SjRw/VqlUr6pqLC4AtW7bolFNOUYMGDQp9nb8kXXDBBWrevHmBx0aOHKmaNWsWuMk+0uu/++67VblyZe3cubPAeZ9//rmMMRo5cmTkMWOMLrvssqhrOhgAf//73ws8fjAunnzyyQKPDx8+XMaYIv+9OZIAmDVrlowxevfdd4s9jwAAAAClrtgbjJlJ0otXlY1jZpLV32/q1KmKiYnRMccco+bNmyscDkf+vlOmTJExRh9++GHUz5177rmFBsDEiROjzv2tAOjWrVuJruugwwOgXbt2Ou2006J+18HX1hf2EqDDhcPhqJvTd955RxdccIGqV69e4H0MlSpVKnBecQGwe/duNW/eXDVr1iz2M+5btGihFi1aFHisQ4cOUd8RcKTX3759e5166qlR56Wnp8sYU+BlRcYYde3aNercgwHw+OOPF3j84P/nr7/+eoHHX3rpJRlj9NVXXxX6dzySADj4SUAzZ84s9jwCAAAAlLpibzBevEoKh8rG8eJV1n/HjRs36rnnntP111+vuLg4xcTEaObMmVYBUNibY3/rJUA33XRTia7roN8bAPHx8VHnHn4DffAlO61bt9YLL7ygmTNnas6cOerUqVPUTWxRAZCZmal27dqpevXq+vjjjwv9ux505pln6qqr8v+/3LNnj2JiYgpce0muv6QBUNjLrg59E/Chivr//GAAFPZ9B9KRBcDkyZNljNGXX35Z7HkEAAAAKHUV/RmAw23ZskUnn3yyWrVqVexLgGrVqnXEAfCf//ynyABo27atzj333BJd10G/9yVAR3IDfd999yk2Njbq9exHGgC5ubm67bbbVLlyZb3xxhvF/h2zs7MVExNT4E3A77zzjipVqhR503RJr7+olwB98cUXhb4EqKwEwME3Af/Wl8MRAAAAoNRV5PcA5OTkFHqD1bx5c51//vnKyspS3bp1S/Qm4MIC4ODruadPnx71Z8nJyapatWqBG+zfuq6DDg+Ag6FxpG8CPpIb6AceeEBxcXEFomL16tWKi4s7ogD4+9//LmOMxo4dGzXrcAefqTg0FHr06BH1noCSXP/B1+kPGTKkwHm33XZboW8CLisBcOONN+rss88u9hyJAAAAAAGoyAGwY8cOxcfHq0uXLho2bJjGjRunW2+9VcYYPf3005L2fweAMUatWrXSiBEj9M9//rPYjwEtLAA2bdqkypUr68ILL9TLL7+sKVOmaMuWLZL2f1mWMUazZ88u0XVJ0QGQk5OjFi1aFPgY0Hbt2qlp06Yyxujll18u8LNHcgN98Au4LrnkEo0ZM0YDBgzQCSecoHPOOec3A+DgdyBcdNFFkY8/PfTYvXt3gZ9/6qmnFBcXV+C/1ickJKh///5R13mk15+bm6vLLrtMlSpV0t133x15SVVRHwMaVAD89NNPGjRokAYNGqQLLrhAxpjIPx/+vpGsrCzVqVNHjzzySNS1HI4AAAAApa4iB0BmZqZ69+6txMREHXvssYqPj1diYmLU5+CPHj1ap59+uqpXr67zzz+/2C8CKywAJGn8+PFq0KCBKleuHPVyoHPOOafAG4GP9LoK+yKwbdu2qVOnTpEvArvrrrs0f/78qDerHukNtCS98MILOvPMM1W9enWdddZZeumllwo97/AAOPhJPUUdh3+r7wUXXKDOnTtH/jk1NbXI18GX5Pp37dql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YrEwadIkk2Ym9eGZZ56he/fuV21fvXo1FouF6OhoE2YlcpkCgAvz9PT83qcAffd4Mj0FqPmrqKjgmWeeoUWLFuzdu9fs6Ug92b59+xX3DX/f+OKLL8yepvwE3t7eWCwWtm7desX2rVu3YrFYWLRokUkzk/rQoUMHunbtetX2ZcuWYbFY2LhxowmzErlMAcCFxcbGXvUegMrKStq3b/+9X0zSvNTU1NCrVy88PDzYsGGD2dORepSbm0t4ePhVo2PHjtx///2Eh4dz7Ngxs6cpP8GhQ4ewWCy89957V2z/y1/+goeHh27la+Zef/11fv7zn1/1ZvY333yT6667TsdXTKcA4OJ69+6Nh4cHgwYNIiQkhO7du+Ph4XHVfafS/HzxxRdYLBbeeOMNFixYcNUQ16M1AK6lX79+WCwW3nnnHaZPn07v3r2xWCz4+PiYPTX5ib57f8ddd93FsGHDmD59Oj179sRisfDxxx+bPT0RBQBXV1FRgaenJ61ateKGG26gc+fOREVFmT0tqQfPPvvsj94iIq5HAcC1VFVVMWTIENq0acPPfvYz2rdvr6ezuZD9+/fTs2dPWrVqxc9+9jM6dOjAiBEjqK6uNntqIgoAIiIiIiLuRAFARERERMSNKACIiIiIiLgRBQARERERETeiACAiIiIi4kYUAERERERE3IgCgIiIiIiIG1EAEBERERFxIwoAIiIiIiJuRAFARERERMSNKACIiIiIiLgRBQARERERETeiACAiIiIi4kYUAERERERE3IgCgIiIiIiIG1EAEBERERFxIwoAIiIiIiJuRAFARERERMSNKACIiIiIiLgRBQARERERETeiACAiIiIi4kYUAERERERE3IgCgIiIiIiIG1EAEBERERFxIwoAIiIiIiJuRAFARERERMSNKACIiIiIiLgRBQARERERETeiACAiIiIi4kYUAERERERE3IgCgIiIiIiIG1EAEBERERFxIwoAIiIiIiJuRAFARERERMSNKACIiIiIiLgRBQARERERETeiACAiIiIi4kYUAERERERE3Mj/ASbF58ct2onyAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm = ai.solidAngleArray(detector.shape) * ai.polarization(detector.shape, factor=0.95)\n",
    "print(norm.min())\n",
    "denom = csr.integrate(norm)\n",
    "signal1 = csr.integrate(img)\n",
    "signal2 = csr.integrate(img, coef_power=2)\n",
    "\n",
    "fig,ax = subplots()\n",
    "#ax.plot(ref.radial, ref.intensity, label=\"ref\")\n",
    "#ax.plot(denom1[0], signal1[2]/denom1[2], label=\"signal/norm\")\n",
    "ax.plot(ref.radial, ref.sigma, label=\"sigma\")\n",
    "ax.plot(denom[0], numpy.sqrt(signal2[2])/denom[2], label=\"sqrt(signal2)/norm1)\")\n",
    "\n",
    "fig.legend()\n",
    "fig.canvas.draw()\n",
    "#ax.plot(denom2[0], denom2[2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It turns out pyFAI was slightly overestimating the error, but not by much which explains why this bug remained undiscovered for years.\n",
    "\n",
    "We have now all the tools to build a new integrator and evaluate if it behaves as expected: (from a statistical point of view)"
   ]
  },
  {
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeVhUdfsG8C8oIKAs4goqKqm5pab29ubPtdRySU1Ny61FcatcMgFFRiVcc0W0ULNcs0XR8lWz1dIW09KIsgxM3JdQ3EBg7t8fxznDODMsB2a+zMz9ua7nuvLM4czMmcd87uEsAkRERERE5DKE7BdARERERET2wwBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwAREZWatLQ0CCEwYsQI2S+FiIisYAAgIocnhIAQJf/f2bp16yCEwLp160r+osqQESNGQAiBtLQ0mz8XAwARUdnHAEBEDo8BoGAMAERElB8DABE5PAaAgjEAEBFRfgwAROTwLAWA/INoWloaBg0ahKCgIHh5eaF169b4+OOPTdbv2LGjup17K//gnJOTg4SEBPznP/9BpUqV4O3tjZYtWyI+Ph55eXlmr02v12Pp0qVo3LgxvLy8EBwcjPHjx+Pq1asIDQ1FaGioyfr5Q8ju3bvRsWNH+Pn5mby/7du3Y8iQIWjQoAF8fHzg4+ODBx98EMuWLTN7Ddbe073Pe+XKFURGRuL+++9HhQoV4Ofnhy5dumDv3r0W93lmZiYmTZqEkJAQeHl5oVGjRli0aBH+/vtvTQFg79696NWrF6pWrQpPT0/UqlULTz75JPbt22dx31gihEDHjh1Nlul0Oggh8OWXX2LTpk146KGH4Ovri9DQUHz33XcQ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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Experimental 1D integrator ... \n",
    "from pyFAI.containers import Integrate1dResult\n",
    "from pyFAI.azimuthalIntegrator import AzimuthalIntegrator\n",
    "from copy import copy\n",
    "\n",
    "def integrate1d_experimental(self, data, variance, **kwargs):\n",
    "    \"\"\"Experimental azimuthal integrator\"\"\"\n",
    "    if \"csr_integrator\" not in self.engines:\n",
    "        self.integrate1d(data, **kwargs)\n",
    "    csr = self.engines[\"csr_integrator\"].engine\n",
    "    \n",
    "    if kwargs[\"correctSolidAngle\"]:\n",
    "        norm = self.solidAngleArray(self.detector.shape).copy()\n",
    "    else:\n",
    "        norm = numpy.ones(data.shape)\n",
    "    polf = kwargs.get(\"polarization_factor\")\n",
    "    if polf:\n",
    "        norm *= self.polarization(self.detector.shape, factor=polf)\n",
    "    flat = kwargs.get(\"flat\")\n",
    "    if flat is not None:\n",
    "        norm *= flat\n",
    "    denom1 = csr.integrate(norm)\n",
    "    signal = csr.integrate(data)\n",
    "    sigma2 = csr.integrate(variance, coef_power=2)\n",
    "    result = Integrate1dResult(denom1[0], \n",
    "                               signal[2]/denom1[2], \n",
    "                               numpy.sqrt(sigma2[2])/denom1[2])\n",
    "    result._set_method_called(\"integrate1d_exp\")\n",
    "    result._set_compute_engine(\"experimental\")\n",
    "    return result\n",
    "\n",
    "#I would usually not recommand monkey-patching, but it is convieniant here for demonstration purpose\n",
    "ai.__class__.integrate1d_experimental = integrate1d_experimental\n",
    "\n",
    "\n",
    "f,a = plot_distribution(ai, kwarg, integrate=ai.integrate1d_experimental)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The integrated curves are now following the $\\chi^2$ distribution, which means that the errors provided are in accordance with the data.\n",
    "\n",
    "## Conclusion\n",
    "\n",
    "PyFAI's historical version (version <=0.16) has been providing proper error propagation ONLY in the case where any normalization (solid angle, flatfield, polarization, ...) and pixel splitting was DISABLED. \n",
    "This is not the most common use-case for pyFAI I have to confess. We demonstrate in this notebook how to fix the two bugs. For implementing this in pyFAI, many thousands of line of code needs to be changed and all associated test, which was not be possible before the release of pyFAI v0.16. But for scientific honesty I prefer warning the users of the implication and offer them the tools to validate the code.\n",
    "\n",
    "Moreover the fact the normalization has to be performed as part of the integration is a major issue as almost any commercial detector comes with flatfield correction already applied.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total execution time:  1822.8830225467682\n"
     ]
    }
   ],
   "source": [
    "print(\"Total execution time: \", time.time()-start_time)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Validation of the new implementation in pyFAI \n",
    "\n",
    "With those tools, we can now validate the new generation of azimuthal integrators under development (starting with pyFAI v0.18+)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeVhU9f4H8C8oIKAjCLiAhopL7ppa3rzmUmpuuaeVSrngVrnmDNuMikta7luhZrmm1xQ1b5mW3fppi1lZSmUqJu5LKCiCLO/fH9McGGbYjgzfGeb9ep7P81zOHA5n5ny8fd4z55wRICIiIiIipyFk7wAREREREZUeBgAiIiIiIifCAEBERERE5EQYAIiIiIiInAgDABERERGRE2EAICIiIiJyIgwAREREREROhAGAiIiIiMiJMAAQERERETkRBgAiIiIiIifCAEBERERE5EQYAIiIiIiInAgDABERERGRE2EAICIiIiJyIgwAREREREROhAGAiIiIiMiJMAAQERERETkRBgAiIiIiIifCAEBERERE5EQYAIiIiIiInAgDABERERGRE2EAICIiIiJyIgwAREREREROhAGAiIiIiMiJMAAQERERETkRBgAiIiIiIifCAEBERERE5EQYAIiIiIiInAgDABERERGRE2EAICIiIiJyIgwAREREREROhAGAiIiIiMiJMAAQERERETkRBgAiIiIiIifCAEBERERE5EQYAIiIiIiInAgDABERERGRE2EAICIiIiJyIgwAREREREROhAGAiIiIiMiJMAAQERERETkRBgAiIiIiIifCAEBERERE5EQYAIiIqMQkJCRACIHQ0FDZu0JERPlgACAihyeEgBAP/39nGzZsgBACGzZsePidsiOhoaEQQiAhIcHmf4sBgIjI/jEAEJHDYwAoGAMAERHlxgBARA6PAaBgDABERJQbAwAROTxrASD3IJqQkIAhQ4bAz88PHh4eaN26Nfbt22e2fseOHZXt5K3cg3NGRgZWrVqFJ554ApUqVYKnpydatmyJFStWICsry2LfsrOzsXTpUjRq1AgeHh4IDAzExIkTcfv2bQQHByM4ONhs/dwh5JNPPkHHjh2h0WjMnt/u3bvx0ksvoX79+vDy8oKXlxcee+wxLFu2zGIf8ntOef/urVu3oNPp8Oijj6JChQrQaDTo0qULDhw4YPU1T05OxpQpUxAUFAQPDw80bNgQixYtwtmzZ1UFgAMHDqB3794ICAiAu7s7atasieeeew4HDx60+tpYI4RAx44dzZYZDAYIIXD48GFs2bIFjz/+OLy9vREcHIxvvvkG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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 11min 3s, sys: 604 ms, total: 11min 4s\n",
      "Wall time: 1min 42s\n"
     ]
    }
   ],
   "source": [
    "# Python histogramming without pixels splitting.\n",
    "\n",
    "kwarg = {\"npt\":npt, \n",
    "         \"method\": (\"no\", \"histogram\", \"python\"),\n",
    "         \"correctSolidAngle\":True, \n",
    "         \"polarization_factor\":0.95,\n",
    "         \"safe\":False}\n",
    "%time f,a = plot_distribution(ai, kwarg, integrate=ai._integrate1d_ng)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeVhU9f4H8C8oIKADiLiAhopLam6p5c3rWkm55J4tKt1U3CqXzBm2GQ33yg1Rw8zc00oR9WemXrt1NbumZRmVmZi4L6GoKLK8f39Mc2CYYTsyfGeY9+t5Ps9zOXM4nJnzsft5z5xzRoCIiIiIiJyGkL0DRERERERUfhgAiIiIiIicCAMAEREREZETYQAgIiIiInIiDABERERERE6EAYCIiIiIyIkwABAREREROREGACIiIiIiJ8IAQERERETkRBgAiIiIiIicCAMAEREREZETYQAgIiIiInIiDABERERERE6EAYCIiIiIyIkwABAREREROREGACIiIiIiJ8IAQERERETkRBgAiIiIiIicCAMAEREREZETYQAgIiIiInIiDABERERERE6EAYCIiIiIyIkwABAREREROREGACIiIiIiJ8IAQERERETkRBgAiIiIiIicCAMAEREREZETYQAgIiIiInIiDABERERERE6EAYCIiIiIyIkwABAREREROREGACIiIiIiJ8IAQERERETkRBgAiIiIiIicCAMAEREREZETYQAgIiIiInIiDABERERERE6EAYCIiIiIyIkwABAREREROREGACIiIiIiJ8IAQERERETkRBgAiIiIiIicCAMAEREREZETYQAgIqIyk5KSAiEEwsLCZO8KEREVggGAiByeEAJCPPh/zlavXg0hBFavXv3gO2VHwsLCIIRASkqKzf8WAwARkf1jACAih8cAUDQGACIiyo8BgIgcHgNA0RgAiIgoPwYAInJ41gJA/kE0JSUFQ4cOhb+/Pzw8PNCuXTvs2LHDbP2uXbsq2ylY+QfnrKwsxMfH4/HHH0e1atXg6emJNm3aIC4uDjk5ORb7lpubi0WLFqFZs2bw8PBAYGAgJkyYgBs3biA4OBjBwcFm6+cPIbt370bXrl2h0WjMnt+2bdvw8ssvo3HjxvDy8oKXlxceffRRLF682GIfCntOBf/u9evXodPp8PDDD6NKlSrQaDTo0aMH9uzZY/U1T09Px+TJkxEUFAQPDw80bdoU7733Hv744w9VAWDPnj3o06cPAgIC4O7ujrp16+K5557D3r17rb421ggh0LVrV7NlBoMBQggcOHAAGzZswGOPPQZvb28EBwfjm2++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96ysLDRs2NDhUp4nT550uPZ4bm4uwsLC0LhxY4d3+q9evYo6deqgSZMm2rJz5845/d4rV64gMjISNWrUuOsnBZ6kd3sUZeTIkbjnnnvwzTffaMtu3LiBatWq4ZlnnnFYd8CAAQgNDdWue+0NPLE9fKk+7lTcC/iZM2dw+PBhh6uQfPTRRxDC8br358+fR1hYGPr27evw802aNEGLFi2Qm5urLbNYLChXrhwOHTrk+gfjAu7aHhcvXnTYDoB6uGHHjh1RsWJFpy9B8hal3R4F3a3h7dmzJ2rXru1w+MftT04+++wzV/z5Lueu7ZGRkeE0LObn56Nv374QQhT5TduylXZ7XLt2DW3btsW9996Lb7/9ttj79sX6IH04AJBuMTEx2rsFKSkp6NChA4KCgrB161Ztndtfs17Q7UNZWrVqhWnTpmHq1Klo2rQphBBYunSptp7NZkOLFi1gsViwYMECTJgwAUajEeXKlXNYz1vo3R5vvfUW+vfvj5kzZ2Lu3Lno3r07hBCYNGmS0++YM2cOhBB46aWXkJqaitdeew1CCCQlJbn98ZWWu7eHr9UHoH46kZiYqH3a9eKLLyIxMRGJiYm4fPkyAGDQoEEQQuDEiRPaz+Xm5qJ9+/aoUqUKJkyYgDlz5iAqKgr33nsvfvrpJ4ffsWHDBpQrVw5du3bFggULtEPrhg0b5smHWiLu3h6LFi1CZGQkFEXB/PnzkZycrF0pyhvf3dW7PQBo6/Xr1w9CCAwePFhbVtC+ffsQHBzs8E2vISEh6N69u6ceZom5e3t89dVXiIiIwJtvvok5c+Zg6tSp6NixI4QQDpfH9BZ6t8fzzz+vbYM7v/H4zhPmfak+qGw4AJBumZmZiI2NRUREBIKDg9GmTRunk+8Ka/AAIC0tDW3btkVYWBgqVaqEdu3aYfXq1Q7rbNq0CU899RQiIiJQoUIFhIWFoXv37l73Fe236d0en3zyifbuTGhoKNq3b4+VK1cW+XsWLFiAhx56CBUrVkRkZCSmTZvm8K253sLd28PX6gNQr0lf8OTmgrn9gl1UQ/PHH39gyJAhqF69OkJDQ9G5c2fs3bu30N+zdu1atGzZEsHBwahTp47XXtfc3dvj22+/xbPPPosHHngAFStWRJUqVfDYY48Vu3/JVJbtUdTPFfb8u337dnTo0AEhISGoWbMmRo8e7XRCqDdw9/b4+eefERMTg3r16iEkJAShoaF49NFHMX/+fK98TtW7PYr7OaPR6PR7fKU+qGw4ABARERERBRAOAEREREREAYQDABERERFRAOEAQEREREQUQDgAEBEREREFEA4AREREREQBhAMAEREREVEA4QBARERERBRAOAAQEREREQUQDgBERERERAGEAwARERERUQDhAEBEREREFEA4ABARERERBRAOAEREREREAYQDABERERFRAOEAQEREREQUQDgAEBEREREFEA4AREREREQBhAMAEREREVEA4QBARERERBRAOAAQEREREQUQDgBERERERAGEAwARERERUQDhAEBEREREFEA4ABARERERBRAOAEREREREAYQDABERERFRAOEAQEREREQUQDgAEBEREREFEA4AREREREQBhAMAEREREVEA4QBARERERBRAOAAQEREREQUQDgBERERERAGEAwARERERUQDhAEBEREREFEA4ABARERERBRAOAEREREREAeT/AcSFgIjfypFWAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 9min 55s, sys: 684 ms, total: 9min 56s\n",
      "Wall time: 1min 3s\n"
     ]
    }
   ],
   "source": [
    "# Cython histogramming without pixels splitting.\n",
    "\n",
    "kwarg = {\"npt\":npt, \n",
    "         \"method\": (\"no\", \"histogram\", \"cython\"),\n",
    "         \"correctSolidAngle\":True, \n",
    "         \"polarization_factor\":0.95,\n",
    "         \"safe\":False}\n",
    "%time f,a = plot_distribution(ai, kwarg, integrate=ai._integrate1d_ng)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.opencl.azim_hist:Apparently 64-bit atomics are missing on device TITAN V, possibly falling back on 32-bit atomics (loss of precision) but it can be present and not declared as Nvidia does\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,iVBORw0KGgoAAAANSUhEUgAAAwAAAAJACAYAAAA6rgFWAAAgAElEQVR4nOzdeXhTZdoG8LeFtrSFtAXK0gIFKkVANgGHkQ9ZFJBNdhEFqixlG2WVpFsCVpbqsFPQgqKsgg6UbZDFwVHBBVFxoIoCRcqOWGhZWrrc3x8hpw1Juhyavklz/67rua6Pk9OTk+RxvudOziJAREREREQuQ8jeASIiIiIiKjsMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBERERG5EAYAIiIiIiIXwgBARERERORCGACIiIiIiFwIAwARERERkQthACAiIiIiciEMAERERERELoQBgIiIiIjIhTAAEBFRqUlJSYEQAuHh4bJ3hYiIbGAAICKnJ4SAEA//P2dr1qyBEAJr1qx5+J1yIOHh4RBCICUlxe7PxQBAROT4GACIyOkxABSOAYCIiApiACAip8cAUDgGACIiKogBgIicnrUAUHAQTUlJwdChQ1GtWjV4eXmhTZs22Llzp9n6nTp1UrbzYBUcnLOzs5GQkIC//e1vqFKlCry9vdGqVSssW7YMubm5FvuWl5eHxYsXo0mTJvDy8kJQUBAmTZqEGzduICQkBCEhIWbrFwwhe/bsQadOnaDRaMxe37Zt2/DSSy+hUaNG8PHxgY+PDx5//HEsWbLEYh9svaYHn/f69evQ6XR49NFHUalSJWg0GnTt2hV79+61+p6np6dj6tSpCA4OhpeXFxo3bowFCxbg9OnTqgLA3r170adPHwQGBsLT0xN16tTBc889h/3791t9b6wRQqBTp05mywwGA4QQOHjwIDZs2IAnnngCvr6+CAkJwddffw0hBPr3729zvx599FF4enri+vXrZss//fRT9OzZE9WqVYOnpycaNmyIGTNmIC0tzWIbx44dwwsvvICQkBB4enqievXqaN26NSZPnox79+4V/00iIiolDABE5PQKCwCdO3dGYGAg/va3v2HKlCkYOXIkvLy84O7ujv/85z/K+mvWrEG/fv0ghEC/fv1gMBiUMg119+7dQ48ePSCEQOPGjTFu3DhMnjwZLVq0gBACw4cPt9i3CRMmQAiBoKAgvPrqq5g+fToaNWqEdu3aISgoyGYA6N27NypUqIA+ffpg5syZGDp0qLJO48aN0aRJEwwfPhxarRbjx49HWFiY1X0wGAxo2bIlhBCYPHmy8poWLVqkrHP27FnUr18fQgh07NgRU6ZMwdixY1G7dm24ubkhMTHRbJuZmZlo164dhBBo2bIlZs6ciYiICPj7++O5554rcQDQ6/UQQqBy5coYPnw4IiMjER4ejkaNGplt52ECQJ8+feDl5YXBgwcr75npvfT09MSff/5psb1vv/0WQggMGjTIbPmsWbMghEDVqlUxcuRIzJgxA927d4cQAk2bNsXNmzeVdY8dO4ZKlSrB29sbQ4cOhU6nw8SJE9G9e3d4eHggIyOj2O8TEVFpYQAgIqdXWAAQQmDWrFlmj3366acQQqBnz55my4saME3D5D/+8Q/k5OQoy3NycjBq1CgIIZCUlKQs/+KLLyCEQFhYmNk3w1lZWejYsaPVb+JN++Dm5oY9e/ZY3Y9Tp05ZLMvNzcXIkSMhhMA333xj9lhRhwB16tQJbm5u2LRpk9nytLQ0tGzZEpUqVcLly5eV5XPmzIEQAgMHDjT7xeHMmTMICAgoUQDYu3cvhBBo0KABzp8/b/F4amqq8n8/TADw8fHBDz/8YPE3c+fOhRACy5Yts3hs4sSJEEJgx44dyrL//Oc/EELg73//u8W3/ab9mzJlirJs2rRpFn1h8tdff1n91YiIyN4YAIjI6RUWAEJCQsyGdZN69eqhWrVqZssKGzBzc3NRtWpV1KpVC9nZ2RaPp6Wlwc3NDUOGDFGWjR49GkIIfPjhhxbrf/XVV4UGgMIOS7Hl6NGjEEJg9uzZZssLCwA//fQThBAYPHiw1W0mJSVBCIGEhARl2SOPPAJ3d3erQcQ0cBc3APTp0wdCCGzdurXIdR8mABQcygtKTU2Fu7s72rZta7Y8KysLVatWRY0aNcw+7/79+0MIgePHj1vdXqtWrRAYGKj82xQAbB1KRUQkAwMAETm9wgJAv379rP5Nhw4d4O7ubrassAHzl19+gRACjRo1Mjs8qGD5+PjgscceU/7m8ccfhxACp0+fttheTk4OKlasaDMAzJ071+br/fPPP6HVatG8eXP4+vpaHN8fERFhtn5hAWDlypUQQqBbt25WX5PpW/B//OMfAIzH/gshULduXav7dvDgwRIFgOrVq8PNzQ137twpct2HCQAbN260ud1u3bpBCIETJ04oyz755BMIITB16lSzdWvWrAkPDw+bPdC0aVMIIZRDir799ltUqFAB3t7eGDFiBD788EOrwYmIqCwxABCR0yvqJGBrTCf9FlTYgGn6xr6oql+/vvI3oaGhEELg1q1bVvehZs2aNgPA+++/b/Vv0tLS0KBBAwgh8MQTT2DChAmIjo6GwWDA5MmTrb7mwgLAm2++WazX9fLLLwMwfmMuhLD4xtzEFJSKGwAqVqyIqlWrFmvdhwkABc/3eNCGDRsghMDMmTOVZX379oUQAj/99JPF/hbn/Tp79qzyN4cPH0bv3r3h7e2tPN64ceNCQwkRkT0xABCR0yuLAPC///0PQggMGDCg2PvVunVr1b8A2Bpy3377bQghYDAYLB47fPhwiQPAsmXLIITAkiVLivWaZP4C8OGHH0IIgVWrVlk8lpaWVmgAOHjwoM3t3rlzBxqNBkFBQcjJycGVK1dQsWJFtGzZ0mLdatWqISAgoMh9tSYzMxOHDh1CbGws/P39IYQwu8oREVFZYQAgIqdXWgFg7dq1EEJg9erVFutnZ2fD398ftWvXLvalG00nBqs5B8BWABg3bhyEEPj5558tHps3b57V12zaD2uHnhw5cqTQcwCskXUOwI4dOyCEgF6vt3hs//79qgMAAIwZMwZCCHz66adYtGgRhBBYuHChxXq9e/cu9ByA4jL1munQKiKissQAQEROr7QCwO7du20OmAAQGxsLIQTGjx9v9Rvrixcvmh1H/vnnn0MI41WAbty4oSzPysrCU089pSoAmIb8pUuXmi3/4YcflPsFPPiaX3/99UIPg+nYsSPc3d3x3nvvWX38559/xpUrV5R/m64CNGjQILtfBajgsosXL8Ld3R2PPPIIbt++rSy/fv268muL2gBgCmQvvvgiWrdujYoVK5q9ZpMDBw5ACONVgC5cuGDx+K1bt/D1118r/z506JDVXjH9klPwsCMiorLCAEBETq+0AsBff/0FHx8faDQaTJo0CXFxcYiLi1OG93v37inXuQ8ODsaIESOg0+kwatQoZYieN2+e2TYjIiKU9V977TVMnz4dYWFhyn0AGjRoYLZ+UQHgwoULqFq1Ktzd3TFgwADMnDkTAwYMgIeHB4YOHWr1NZsuexoaGoqZM2ciLi7O7LKXqampaNSoEYQwXtc/IiICM2fOxIsvvojHHnsMQgizoba07wMQExMDIQSqVKmCESNGICoqCqNHj0bjxo0ttjNixAgIYTwZe8qUKRg1ahRq1aqF559//qECAGD8ZcPDwwNCCPTt29fmevPnz4ebmxt8fHwwePBgvP7665gwYQJ69eoFX19f9OjRQ1m3X79+qFKlCnr16oVJkyZBq9WiT58+qFChAgICAnhCMBFJwQBARE6vtAIAAOzZswft27c3u7pOwWPn8/LysHbtWnTt2hUBAQHw8PBAUFAQOnTogDlz5uDcuXNm28vNzcXChQuVG07Vrl0bEydOxI0bN1C5cmWL48yLCgAAcOLECfTt2xeBgYHKXYBXrVpV6GtesGCBcldba788pKenY86cOXj88cfh6+uLSpUqoX79+ujVqxfeffddixOZb968ialTpyIoKEi5E/A///lP1XcC3r17N3r06IGAgADlTsD9+/fHZ599ZrZeZmYmZsyYgeDgYHh4eCA0NBRz585Fdnb2QweAuLg45TP/5JNPCl33yy+/xJAhQ1C7dm14eHigevXqaNmyJaZOnYojR44o6+3duxcvv/wymjRpAo1GAx8fH4SFheHVV181O1GYiKgsMQAQEUnw22+/QQiBF154QfauEBGRi2EAICKyo0uXLlnc7fX27dvo1asXhBDYvHmzpD0jIiJXxQBARGRHWq0W9erVw8iRI6HVahEeHo46depACIGePXsiLy9P9i4SEZGLYQAgIrKjAwcO4Nlnn0WtWrXg6ekJHx8ftGrVCm+99VaxLydKRERUmhgAiIiIiIhcCAMAEREREZELYQAgIiIiInIhDABERERERC6EAYCIiIiIyIUwAEiUlpaGpKQkHD16FMePH2exWCwWi8VilaCOHj2KpKQkpKWlyR7rnAoDgERJSUnKbedZLBaLxWKxWOoqKSlJ9ljnVBgAJDp6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uYOR7fHHH3/gjjvuQP369Z2+K+Mab60PMoYDABny2WefQQj9dd6zs7PRvHlz3aU8f/75Z921x/Py8hASEoKWLVvqXum/ePEiGjVqhDvuuENbdubMGaffe+HCBYSFhaFu3bo3fKfAnYxuj+KMHDkSN910Ez7//HNt2eXLl1G7dm088sgjunUHDhyI4OBg7brXnsAd28Ob6uN6JT2Bnzx5EocOHdJdheSdd96BEPrr3v/+++8ICQnB008/rfv5O+64A23btkVeXp62zGq1olKlSjh48GDFP5gK4KrtcfbsWd12ANTTDSMjI1G1alWnL0HyFGXdHoXdqOHt3bs3GjZsqDv949o7J++//35F/PkVzlXbIzMz02lYLCgowNNPPw0hRLHftC1bWbfHX3/9hQ4dOuDmm2/GF198UeJ9e2N9kDEcAMiwqKgo7dWClJQUREREICAgANu3b9fWufY164VdO5Xl3nvvxbRp0zB16lS0atUKQggsW7ZMW89ut6Nt27awWq1ITU3F+PHjYTabUalSJd16nsLo9pg0aRKee+45zJw5E3PmzEHPnj0hhMDEiROdfsfs2bMhhMBTTz2F+fPn4/nnn4cQAklJSS5/fGXl6u3hbfUBqO9OJCYmau929evXD4mJiUhMTMT58+cBAIMHD4YQAseOHdN+Li8vD506dUKNGjUwfvx4zJ49G61bt8bNN9+M7777Tvc7MjIyUKlSJfTo0QOpqanaqXXDhg1z50MtFVdvj8WLFyMsLAyKomDevHlITk7WrhTlia/uGt0eALT1BgwYACEEhgwZoi0rbN++fQgMDNR902tQUBB69uzprodZaq7eHtu2bUNoaChefvllzJ49G1OnTkVkZCSEELrLY3oKo9vj8ccf17bB9d94fP0H5r2pPqh8OACQYVlZWYiOjkZoaCgCAwPRvn17pw/fFdXgAcDy5cvRoUMHhISEoFq1aujYsSPeffdd3TqbN2/GQw89hNDQUFSpUgUhISHo2bOnx31F+zVGt8fGjRu1V2eCg4PRqVMnrFq1qtjfk5qaittvvx1Vq1ZFWFgYpk2bpvvWXE/h6u3hbfUBqNekL/zh5sK59oRdXEPz559/YujQoahTpw6Cg4PRrVs37N27t8jfs27dOtxzzz0IDAxEo0aNPPa65q7eHl988QUeffRR3HrrrahatSpq1KiBzp07l7h/yVSe7VHczxV1/N25cyciIiIQFBSEevXqYfTo0U4fCPUErt4eP/74I6KiotCkSRMEBQUhODgY9913H+bNm+eRx1Sj26OknzObzU6/x1vqg8qHAwARERERkR/hAEBERERE5Ec4ABARERER+REOAEREREREfoQDABERERGRH+EAQERERETkRzgAEBERERH5EQ4ARERERER+hAMAEREREZEf4QBARERERORHOAAQEREREfkRDgBERERERH6EAwARERERkR/hAEBERERE5Ec4ABARERER+REOAEREREREfoQDABERERGRH+EAQERERETkRzgAEBERERH5EQ4ARERERER+hAMAEREREZEf4QBARERERORHOAAQEREREfkRDgBERERERH6EAwARERERkR/hAEBERERE5Ec4ABARERER+REOAEREREREfoQDABERERGRH+EAQERERETkRzgAEBERERH5EQ4ARERERER+hAMAEREREZEf4QBARERERORHOAAQEREREfkRDgBERERERH6EAwARERERkR/hAEBERERE5Ef+H3SURf6xzVl1AAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 23.1 s, sys: 3.73 s, total: 26.8 s\n",
      "Wall time: 24.4 s\n"
     ]
    }
   ],
   "source": [
    "# OpenCL histogramming without pixels splitting.\n",
    "\n",
    "kwarg = {\"npt\":npt, \n",
    "         \"method\": (\"no\", \"histogram\", \"opencl\"),\n",
    "         \"correctSolidAngle\":True, \n",
    "         \"polarization_factor\":0.95,\n",
    "         \"safe\":False}\n",
    "%time f,a = plot_distribution(ai, kwarg, integrate=ai._integrate1d_ng)\n",
    "f.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
