Skip to content
Snippets Groups Projects
AdjustedPhase1GenerationTool.ipynb 493 KiB
Newer Older
  • Learn to ignore specific revisions
  •        "\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\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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 overriden (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",
           "        // select the cell after this one\n",
           "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
           "        IPython.notebook.select(index + 1);\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>"
    
         "output_type": "display_data"
    
           "<img src=\"data:image/png;base64,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\" width=\"1200\">"
    
          "text/plain": [
    
           "<IPython.core.display.HTML object>"
    
          ]
         },
         "metadata": {},
         "output_type": "display_data"
        }
       ],
       "source": [
    
        "pl.figure(figsize=(12,3))\n",
    
        "pl.subplot(1,3,1)\n",
    
        "pl.plot(dt_test, def_x,'c')\n",
    
        "pl.title('static baseline')\n",
    
        "def_x_med = np.nanmedian(def_x)\n",
        "pl.ylim(def_x_med - 200., def_x_med + 200.)\n",
        "\n",
        "\n",
    
        "pl.subplot(1,3,2)\n",
    
        "pl.plot(dt_test, adj[0],'k')\n",
    
        "pl.title('affine transform')\n",
        "pl.ylim(def_x_med - 200., def_x_med + 200.)\n",
        "\n",
        "\n",
    
        "pl.subplot(1,3,3)\n",
    
        "pl.plot(dt_test, def_x - adj[0],'b')\n",
    
        "pl.title('$\\Delta x$')\n",
    
        "pl.ylim(- 20.,  20.)\n",
        "\n",
        "# re-formats dates for better presentation\n",
        "pl.gcf().autofmt_xdate()"
    
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
    
        "## ## Plots of Adjusted Y using Static Baseline, Affine Transform, and '$\\Delta y$'\n",
        "\n",
    
        "This is not quite the same comparison presented for $\\Delta F$, because $\\Delta y$ is a comparison of two derived quantities."
    
       "execution_count": 23,
    
       "metadata": {
        "collapsed": false
       },
       "outputs": [
        {
         "data": {
    
          "application/javascript": [
           "/* Put everything inside the global mpl namespace */\n",
           "window.mpl = {};\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",
           "        this.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",