Repository: ercius/openNCEM (language: python)

Issue:
Peak find
merge peakFind into peakfind


Discussion / hints:

Fix patch:
diff --git a/ncempy/algo/gaussND.py b/ncempy/algo/gaussND.py
new file mode 100644
index 0000000..494c77c
--- /dev/null
+++ b/ncempy/algo/gaussND.py
@@ -0,0 +1,528 @@
+""" A module with Gaussian functions for creating Gaussian distributions
+in 1D, 2D and 3D. There are also functions with the same name and _FIT
+which can be used to fit an intensity distribution in a ndarray with the
+corresponding Gaussian distribution using scipy's curve_fit.
+
+A 1D Lorentz and a 1D gaussLorentz function is also included for fitting
+zero loss peaks in EELS spectra.
+
+These functions were written assuming you use np.meshgrid() with indexing = 'xy'. If
+you use 'ij' indexing then be careful about how you pass in the x and y coordinates.
+
+"""
+
+import numpy as np
+
+
+def gauss1D(x, x0, sigma):
+    """ Returns the value of a gaussian at a 2D set of points for the given standard deviation with maximum
+    normalized to 1.
+     
+    Parameters
+    ----------
+        x: ndarray
+            A vector of size (N,) of points for the x values
+        x0: float
+            The center of the Gaussian.
+        sigma: float
+            Standard deviation of the Gaussian.
+            
+    Returns
+    -------
+        g: ndarray
+            A vector of size (N,) of the Gaussian distribution evaluated
+            at the input x values.
+            
+    Note
+    ----
+        Calculate the half width at half maximum (HWHM) as
+        >> HWHM = sqrt(2*log(2))*stDev ~ 1.18*stDev
+        or if x goes from -1 to 1
+        >> 0.5*size(x)*stDev
+        
+    """
+    return np.exp(-(x - x0) ** 2 / (2 * sigma ** 2))
+
+
+def lorentz1D(x, x0, w):
+    """ Returns the probability density function of the Lorentzian (aka Cauchy) function with maximum at 1.
+    
+    Parameters
+    ----------
+        x: ndarray or list
+            A 1D vector of points for the dependent variable
+        x0: float
+            The center of the peak maximum
+        w: float
+            The parameter that modifies the width of the distribution.
+            
+    Returns
+    -------
+        l: ndarray
+            A vector of size (N,) of the Lorentzian distribution evaluated 
+            at the input x values.
+            
+    """
+    return w ** 2 / ((x - x0) ** 2 + w ** 2)
+
+
+def gaussLorentz1D(x, x0, w):
+    """ A Gaussian-Lorentzian function in one dimension.
+
+    Parameters
+    ----------
+        x: ndarray or list
+            A 1D vector of points for the dependent variable
+        x0: float
+            The center of the peak maximum
+        w: float
+            The parameter that modifies the width of the distribution.
+
+    Returns
+    -------
+        lg: ndarray
+            A vector of size (N,) of the Lorentzian Gaussian distribution
+            evaluated at the input x values.
+
+    """
+    gSigma = w / (2 * np.sqrt(2 * np.log(2)))  # change the width to sigma
+    return gauss1D(x, x0, gSigma) + lorentz1D(x, x0, w)
+
+
+def gauss2D(x, y, x0, y0, sigma_x, sigma_y):
+    """ Calculates the value of a Gaussian at a 2D set of points for the given
+    standard deviations with maximum normalized to 1.
+    The Gaussian axes are assumed to be 90 degrees from each other.
+    
+    Parameters
+    ----------
+        x, y : ndarray
+            A 2D array of size (M,N) of points for the x values. 
+            Use x, y = np.meshgrid(range(M),range(N),indexing='xy').
+        x0 : float
+            The center of the Gaussian along the x direction.
+        y0 : float
+            The center of the Gaussian along the y direction.
+        sigma_x : float
+            Standard deviation of the Gaussian along x.
+        sigma_y : float
+            Standard deviation of the Gaussian along y.
+            
+    Returns
+    -------
+        g : ndarray
+            A ndarray of size (N, M) of the Gaussian distribution evaluated
+            at the input x values.
+            
+    Note
+    ----
+        The Gaussian is normalized such that the peak == 1. To normalize the
+        integral divide by 2 * np.pi * sigma_x * sigma_y
+        
+    """
+    x0 = float(x0)
+    y0 = float(y0)
+    g2 = np.exp(-((x - x0) ** 2 / (2 * sigma_x ** 2) + (y - y0) ** 2 / (2 * sigma_y ** 2)))
+    g2_norm = g2 / np.max(g2.flatten())
+    return g2_norm
+
+
+def gauss2D_FIT(xy, x0, y0, sigma_x, sigma_y):
+    """ Version of gauss2D used for fitting (1 x_data input (xy)
+    and flattened output). Returns the value of a gaussian at a 2D set of points for the given
+    standard deviation with maximum normalized to 1.
+    The Gaussian axes are assumed to be 90 degrees from each other.
+    
+    Parameters
+    ----------
+        xy: tuple
+            A (N,M) shaped tuple containing the vectors of points for the
+            evaluation points.
+        x0: float
+            The x center of the Gaussian.
+        y0: float
+            The y center of the Gaussian.
+        sigma_x: float
+            The standard deviation of the Gaussian along x.
+        sigma_y: float
+            The standard deviation of the Gaussian along y.
+    
+    Returns
+    -------
+        g2_norm: ndarray
+            The Gaussian distribution with maximum value normalized to 1. The
+            2D ndarray is reshaped into a (N*M,) array for use in fitting
+            functions in numpy and scipy.
+        
+    """
+    x0 = float(x0)
+    y0 = float(y0)
+    x = xy[0]
+    y = xy[1]
+    g2 = np.exp(-((x - x0) ** 2 / (2 * sigma_x ** 2) + (y - y0) ** 2 / (2 * sigma_y ** 2)))
+    g2_norm = g2 / np.max(g2.flatten())
+    return g2_norm.reshape(-1)
+
+
+def gauss2D_theta(x, y, x0, y0, sigma_x, sigma_y, theta):
+    """ Returns the value of a generalized Gaussian at a 2D set of points for
+    the given standard deviation with maximum normalized to 1.
+    The Gaussian axes (assumed to be 90 degrees from each other) can be
+    oriented at different angles to the output array axes using theta.
+    
+    Parameters
+    ----------
+        x: ndarray or list
+            Evaluation points along x of size (N,)
+        y: ndarray
+            Evaluation points along y of size (M,)
+        x0: float
+            Center of the maximum along x.
+        y0: float
+            Center of the maximum along y.
+        sigma_x: float
+            Standard deviation along x.
+        sigma_y: float
+            Standard deviation along y.
+        theta: float
+            The rotation of the Gaussian principle axes from the array
+            horizontal and vertical. In radians.
+            
+    Returns
+    -------
+        g2_norm: ndarray
+            A (N, M) sized 2D ndarray with a Gaussian distribution rotated.
+            
+    """
+
+    x0 = float(x0)
+    y0 = float(y0)
+    a = (np.cos(theta) ** 2) / (2 * sigma_x ** 2) + (np.sin(theta) ** 2) / (2 * sigma_y ** 2)
+    b = -(np.sin(2 * theta)) / (4 * sigma_x ** 2) + (np.sin(2 * theta)) / (4 * sigma_y ** 2)
+    c = (np.sin(theta) ** 2) / (2 * sigma_x ** 2) + (np.cos(theta) ** 2) / (2 * sigma_y ** 2)
+    g2 = np.exp(- (a * ((x - x0) ** 2) + 2 * b * (x - x0) * (y - y0) + c * ((y - y0) ** 2)))
+    g2_norm = g2 / np.max(g2.flatten())
+    return g2_norm  # return a 2D array
+
+
+def gauss2D_theta_FIT(xy, x0, y0, sigma_x, sigma_y, theta):
+    """ Version of gauss2D_theta used for fitting (1 x_data input and
+    flattened output). Returns the value of a gaussian at a 2D set of points for the given standard deviation with
+    maximum normalized to 1. The Gaussian axes can be oriented at different angles (theta) in radians.
+    
+    Parameters
+    ----------
+        xy: tuple
+            Evaluation points along x and y of shape (N,M)
+        x0: float
+            Center of the maximum along x.
+        y0: float
+            Center of the maximum along y.
+        sigma_x: float
+            Standard deviation along x.
+        sigma_y: float
+            Standard deviation along y.
+        theta: float
+            The rotation of the Gaussian principle axes from the array
+            horizontal and vertical. In radians.
+            
+    Returns
+    -------
+        g2_norm: ndarray
+            A (N, M) sized 2D ndarray with a Gaussian distribution rotated.
+
+    """
+    x0 = float(x0)
+    y0 = float(y0)
+    x = xy[0]
+    y = xy[1]
+    a = (np.cos(theta) ** 2) / (2 * sigma_x ** 2) + (np.sin(theta) ** 2) / (2 * sigma_y ** 2)
+    b = -(np.sin(2 * theta)) / (4 * sigma_x ** 2) + (np.sin(2 * theta)) / (4 * sigma_y ** 2)
+    c = (np.sin(theta) ** 2) / (2 * sigma_x ** 2) + (np.cos(theta) ** 2) / (2 * sigma_y ** 2)
+    g2 = np.exp(- (a * ((x - x0) ** 2) + 2 * b * (x - x0) * (y - y0) + c * ((y - y0) ** 2)))
+    g2_norm = g2 / np.max(g2.flatten())
+    return g2_norm.ravel()  # return a 1D vector
+
+
+def gauss2D_poly_FIT(xy, x0, y0, A, B, C):
+    """ Returns the flattened values of an elliptical gaussian at a 2D set of
+    points for the given polynomial pre-factors with maximum normalized to 1.
+    The Gaussian axes are assumed to be 90 degrees from each other.
+    
+    The matrix looks like [[A,B],[B,C]].
+    See https://en.wikipedia.org/wiki/Gaussian_function
+    
+    Parameters
+    ----------
+        xy: tuple
+            Evaluation points along x and y of shape (N,M)
+        x0: float
+            Center of the maximum along x.
+        y0: float
+            Center of the maximum along y.
+        A: float
+            The A pre-factor for the polynomial expansion in the exponent.
+        B: float
+            The B pre-factor for the polynomial expansion in the exponent.
+        C: float
+            The C pre-factor for the polynomial expansion in the exponent.
+            
+    Returns
+    -------
+        g2_norm: ndarray
+            A (N, M) sized 2D ndarray with a Gaussaian distribution rotated.
+    """
+
+    x0 = float(x0)
+    y0 = float(y0)
+    x = xy[0]  # retrieve the array from the tuple
+    y = xy[1]
+    g2 = np.exp(-(A * (x - x0) ** 2 + 2 * B * (x - x0) * (y - y0) + C * (y - y0) ** 2))
+    g2_norm = g2 / np.max(g2.flatten())
+    return g2_norm.ravel()
+
+
+def gauss3D(x, y, z, x0, y0, z0, sigma_x, sigma_y, sigma_z):
+    """
+    gauss3D(x,y,z,x0,y0,z0,sigma_x,sigma_y,sigma_z)
+    Returns the value of a gaussian at a 2D set of points for the given
+    standard deviations with maximum normalized to 1.
+    The Gaussian axes are assumed to be 90 degrees from each other.
+
+    Note
+    -----
+    Be careful about the indexing used in meshgrid and the order in which you pass the x, y, z variables in.
+
+    Parameters
+    ----------
+        x, y, z: ndarray, from numpy.meshgrid
+            2D arrays of points (from meshgrid)
+     
+        x0, y0, z0: float
+            The x, y, z centers of the Gaussian
+        
+        sigma_x, sigma_y, sigma_z: float
+            The standard deviations of the Gaussian.
+    Returns
+    -------
+        g3_norm: ndarray
+            A 3D ndarray
+            
+    """
+    x0 = float(x0)
+    y0 = float(y0)
+    z0 = float(z0)
+    g3 = np.exp(-((x - x0) ** 2 / (2 * sigma_x ** 2) + (y - y0) ** 2 / (2 * sigma_y ** 2) + (z - z0) ** 2 / (
+                2 * sigma_z ** 2)))
+    g3_norm = g3 / np.max(g3.flatten())
+    return g3_norm
+
+
+def gauss3D_FIT(xyz, x0, y0, z0, sigma_x, sigma_y, sigma_z):
+    """
+    gauss3D_FIT((x,y,z),x0,y0,z0,sigma_x,sigma_y,sigma_z)
+    Returns the value of a gaussian at a 2D set of points for the given
+    standard deviations with maximum normalized to 1.
+    The Gaussian axes are assumed to be 90 degrees from each other.
+     xyz - 
+     x0, y0, z0 = the x, y, z centers of the Gaussian
+     sigma_x, sigma_y, sigma_z = The std. deviations of the Gaussian.
+
+    Note
+    -----
+    Be careful about the indexing used in meshgrid and the order in which you pass the x, y, z variables in.
+
+    Parameters
+    ----------
+        xyz: tuple of ndarrays
+            A tuple containing the 3D arrays of points (from meshgrid)
+        x0, y0, z0: float
+            The x, y, z centers of the Gaussian
+        sigma_x, sigma_y, sigma_z: float
+            The standard deviations of the Gaussian.
+    Returns
+    -------
+        g3_norm: ndarray
+            A flattened array for fitting.
+    
+    """
+
+    x0 = float(x0)
+    y0 = float(y0)
+    z0 = float(z0)
+    x = xyz[0]
+    y = xyz[1]
+    z = xyz[2]
+    g3 = np.exp(-((x - x0) ** 2 / (2 * sigma_x ** 2) + (y - y0) ** 2 / (2 * sigma_y ** 2) + (z - z0) ** 2 / (
+                2 * sigma_z ** 2)))
+    g3_norm = g3 / np.max(g3.flatten())
+    return g3_norm.ravel()
+
+
+def gauss3D_poly(x, y, z, x0, y0, z0, A, B, C, D, E, F):
+    """
+    gauss3Dpoly_FIT((x,y,z),x0,y0,z0,A,B,C,D,E,F)
+    Returns the value of a gaussian at a 2D set of points for the given
+    standard deviations with maximum normalized to 1.
+    The Gaussian axes are not locked to be 90 degrees.
+
+    Parameters
+    ----------
+        x, y, z : ndarray, 3D
+            3D arrays of points (from meshgrid)
+
+        x0, y0, z0 : float
+            The x, y, z centers of the Gaussian
+
+        A, B, C, D, E, F : float
+            The polynomial values for the fit
+
+    Returns
+    -------
+        : ndarray, 3D
+            The 3D Gaussian
+    """
+    x0 = float(x0)
+    y0 = float(y0)
+    z0 = float(z0)
+    g3 = np.exp(-(A * (x - x0) ** 2 + B * (y - y0) ** 2 + C * (z - z0) ** 2 + 2 * D * (x - x0) * (y - y0) + 2 * E * (
+                x - x0) * (z - z0) + 2 * F * (y - y0) * (z - z0)))
+    g3_norm = g3 / np.max(g3.flatten())
+    return g3_norm
+
+
+def gauss3D_poly_FIT(xyz, x0, y0, z0, A, B, C, D, E, F):
+    """
+    gauss3Dpoly_FIT((x,y,z),x0,y0,z0,A,B,C,D,E,F)
+    Returns the value of a gaussian at a 2D set of points for the given
+    standard deviations with maximum normalized to 1.
+    The Guassian axes are not locked to be 90 degrees.
+
+    Parameters
+    ----------
+        xyz : tuple of ndarrays
+            3D arrays of points (from meshgrid) combined in a tuple
+
+        x0, y0, z0 : float
+            The x, y, z centers of the Gaussian
+
+        A, B, C, D, E, F : float
+            The polynomial values for the fit
+
+    Returns
+    -------
+        : ndarray, 3D
+            The 3D Gaussian
+    """
+    x0 = float(x0)
+    y0 = float(y0)
+    z0 = float(z0)
+    x = xyz[0]
+    y = xyz[1]
+    z = xyz[2]
+    g3 = np.exp(-(A * (x - x0) ** 2 + B * (y - y0) ** 2 + C * (z - z0) ** 2 + 2 * D * (x - x0) * (y - y0) + 2 * E * (
+                x - x0) * (z - z0) + 2 * F * (y - y0) * (z - z0)))
+    g3_norm = g3 / np.max(g3.flatten())
+    return g3_norm.ravel()
+
+
+def gauss3DGEN_FIT(xyz, x0, y0, z0, sigma_x, sigma_y, sigma_z, Angle1, Angle2, Angle3, BG, Height):
+    """
+    gauss3DGEN_FIT((x,y,z),x0,y0,z0,sigma_x,sigma_y,sigma_z,Angle1,Angle2,Angle3,BG,Height)
+    Returns the value of a gaussian at a 3D set of points for the given
+    sub-pixel positions with standard deviations, 3D Eular rotation angles,
+    constant Background value, and Gaussian peak height.
+
+    adapted from code by Yongsoo Yang, yongsoo.ysyang@gmail.com
+
+    Note
+    ----
+        This is a work in progress. Needs more testing.
+
+    Parameters
+    ----------
+        xyz : tuple of 3 np.ndarray
+            3D arrays of points (from meshgrid) combined in a tuple
+
+        x0, y0, z0 : float
+            The x, y, z centers of the Gaussian
+        sigma_x,sigma_y,sigma_z: float
+            standard deviations along x,y,z direction before 3D angular rotation
+        Angle1, Angle2, Angle3 : float, degrees
+            Tait-Bryan angles in ZYX convention for 3D rotation in degrees
+        BG : float
+            Background
+        Height: float
+            The peak height of the Gaussian function
+
+    Returns
+    -------
+        : ndarray, 3D
+            The 3D Gaussian
+    """
+    # 3D vectors for each sampled positions
+    print('Warning: this function is using Fortran ordered array for use in tomviz. Need to test this')
+    # Todo: Remove Fortran ordering
+    v = np.array([xyz[0].reshape(-1, order='F') - x0,
+                  xyz[1].reshape(-1, order='F') - y0,
+                  xyz[2].reshape(-1, order='F') - z0])
+
+    # rotation axes for Tait-Bryan angles
+    vector1 = np.array([0, 0, 1])
+    rotmat1 = MatrixQuaternionRot(vector1, Angle1)
+
+    vector2 = np.array([0, 1, 0])
+    rotmat2 = MatrixQuaternionRot(vector2, Angle2)
+
+    vector3 = np.array([1, 0, 0])
+    rotmat3 = MatrixQuaternionRot(vector3, Angle3)
+
+    # full rotation matrix
+    # Todo : Remove dependency on np.matrix()
+    rotMAT = np.matrix(rotmat3) * np.matrix(rotmat2) * np.matrix(rotmat1)
+
+    # 3x3 matrix for applying sigmas
+    D = np.matrix(np.array([[1. / (2 * sigma_x ** 2), 0, 0, ],
+                            [0, 1. / (2 * sigma_y ** 2), 0],
+                            [0, 0, 1. / (2 * sigma_z ** 2)]]))
+
+    # apply 3D rotation to the sigma matrix
+    WidthMat = np.transpose(rotMAT) * D * rotMAT
+
+    # calculate 3D Gaussian
+    RHS_calc = WidthMat * np.matrix(v)
+    Result = Height * np.exp(-1 * np.sum(v * RHS_calc.A, axis=0)) + BG
+
+    return Result
+
+
+def MatrixQuaternionRot(vector, theta):
+    """
+    Quaternion tp rotate a given theta angle around the given vector.
+
+    adapted from code by Yongsoo Yang, yongsoo.ysyang@gmail.com
+
+    Parameters
+    ----------
+        vector : ndarray, 3-element
+            A non-zero 3-element numpy array representing rotation axis
+        theta : float, degrees
+            Rotation angle in degrees
+
+    Returns
+    -------
+
+     Author: Yongsoo Yang, Dept. of Physics and Astronomy, UCLA
+             yongsoo.ysyang@gmail.com
+    """
+    theta = theta * np.pi / 180
+    vector = vector / np.float(np.sqrt(np.dot(vector, vector)))
+    w = np.cos(theta / 2)
+    x = -np.sin(theta / 2) * vector[0]
+    y = -np.sin(theta / 2) * vector[1]
+    z = -np.sin(theta / 2) * vector[2]
+    RotM = np.array([[1. - 2 * y ** 2. - 2 * z ** 2, 2. * x * y + 2 * w * z, 2. * x * z - 2. * w * y],
+                     [2. * x * y - 2. * w * z, 1. - 2. * x ** 2 - 2. * z ** 2, 2. * y * z + 2. * w * x],
+                     [2 * x * z + 2 * w * y, 2 * y * z - 2. * w * x, 1 - 2. * x ** 2 - 2. * y ** 2]])
+
+    return RotM
diff --git a/ncempy/algo/peak_find.py b/ncempy/algo/peak_find.py
new file mode 100644
index 0000000..fb90011
--- /dev/null
+++ b/ncempy/algo/peak_find.py
@@ -0,0 +1,1197 @@
+"""
+Module to find local maxima in 2D and 3D data such as images and density maps.
+
+Many functions are based on work by Colin Ophus, cophus@lbl.gov and his excellent
+RealSpaceLattice01.m code.
+
+author: Peter Ercius, percius@lbl.gov
+"""
+
+from . import gaussND
+
+import numpy as np
+import scipy.optimize as opt
+from scipy import ndimage
+
+default_indexing: str = 'ij'
+
+
+def doubleRoll(image, vec):
+    """ Roll an 2D ndarray (e.g. an image) along each dimension. 
+    
+        Parameters
+        ----------
+            image : np.ndarray
+                The 2D array to roll.
+            
+            vec : iterable
+                The number of time to apply the roll to the rows and columns where
+                the tuple has the structure (row, col). Values in tuple must be int.
+                
+        Returns
+        -------
+            : np.ndarray
+                The rolled image.
+    """
+    return np.roll(np.roll(image, vec[0], axis=0), vec[1], axis=1)
+
+
+def tripleRoll(vol, vec):
+    """ Roll a 3D ndarray (e.g. an volume) along each dimension. 
+    
+        Parameters
+        ----------
+            vol : np.ndarray
+                The 3D array to roll
+            
+            vec : iterable
+                The number of time to apply the roll the tuple has the structure (axis0, axis1, axis2).
+                Values in tuple must be int.
+                
+        Returns
+        -------
+            : ndarray
+                The rolled volume.
+    """
+    return np.roll(np.roll(np.roll(vol, vec[0], axis=0), vec[1], axis=1), vec[2], axis=2)
+
+
+def peakFind2D(image, threshold):
+    """ Find peaks in a 2D image based on the roll technique. A threshold is first applied to remove
+    low intensity noisy peaks.
+    
+    Parameters
+    ----------
+        image : ndarray
+            An 2D ndarray of image intensities with peaks to find.
+        
+        threshold : float
+            Threshold [0,1) the image to remove noisy peaks based on max intensity in the image
+        
+    Returns
+    -------
+        positions : array
+            A Nx2 array with the index locations of the n number of peaks
+    """
+    if (threshold < 0) or (threshold >= 1):
+        print('Error: Threshold must be 0 <= threshold < 1')
+        return 0
+
+    # Could generate the set of coordinates using
+    # list(set(permutations((0,1,1,-1,-1),2)))
+    pLarge = (image > doubleRoll(image, [-1, -1])) & \
+             (image > doubleRoll(image, [0, -1])) & \
+             (image > doubleRoll(image, [1, -1])) & \
+             (image > doubleRoll(image, [-1, 0])) & \
+             (image > doubleRoll(image, [1, 0])) & \
+             (image > doubleRoll(image, [-1, 1])) & \
+             (image > doubleRoll(image, [0, 1])) & \
+             (image > doubleRoll(image, [1, 1])) & \
+             (image > threshold * np.max(image))
+
+    positions = np.array(np.where(pLarge * image)).T.copy()  # return array as [num,posXY]
+    return positions.astype(np.int)
+
+
+def peakFind3D(vol, threshold):
+    """
+    Find peaks in a 3D volume based on the roll technique. A threshold is first applied to remove
+    low intensity noisy peaks.
+    
+    Parameters
+    ------
+        vol : ndarray
+            An 3D ndarray of image intensities with peaks to find.
+
+        threshold : float
+            Threshold [0,1) the image to remove noisy peaks based on max intensity in the image
+        
+    Returns
+    -------
+        positions : ndarray
+            A Nx3 array with the index locations of the n number of peaks
+    """
+    if (threshold < 0) or (threshold >= 1):
+        print('Error: Threshold must be 0 <= threshold < 1')
+        return 0
+
+    # Could generate the set of coordinates programmatically
+    # using list(set(permutations((0,0,1,1,1,-1,-1,-1),3))
+    pLarge = ((vol > tripleRoll(vol, [-1, -1, -1]))
+              & (vol > tripleRoll(vol, [0, -1, -1]))
+              & (vol > tripleRoll(vol, [1, -1, -1]))
+              & (vol > tripleRoll(vol, [-1, 0, -1]))
+              & (vol > tripleRoll(vol, [1, 0, -1]))
+              & (vol > tripleRoll(vol, [-1, 1, -1]))
+              & (vol > tripleRoll(vol, [0, 1, -1]))
+              & (vol > tripleRoll(vol, [1, 1, -1]))
+              & (vol > tripleRoll(vol, [0, 0, -1]))
+              & (vol > tripleRoll(vol, [-1, -1, 0]))
+              & (vol > tripleRoll(vol, [0, -1, 0]))
+              & (vol > tripleRoll(vol, [1, -1, 0]))
+              & (vol > tripleRoll(vol, [-1, 0, 0]))
+              & (vol > tripleRoll(vol, [1, 0, 0]))
+              & (vol > tripleRoll(vol, [-1, 1, 0]))
+              & (vol > tripleRoll(vol, [0, 1, 0]))
+              & (vol > tripleRoll(vol, [1, 1, 0]))
+              & (vol > tripleRoll(vol, [-1, -1, 1]))
+              & (vol > tripleRoll(vol, [0, -1, 1]))
+              & (vol > tripleRoll(vol, [1, -1, 1]))
+              & (vol > tripleRoll(vol, [-1, 0, 1]))
+              & (vol > tripleRoll(vol, [1, 0, 1]))
+              & (vol > tripleRoll(vol, [-1, 1, 1]))
+              & (vol > tripleRoll(vol, [0, 1, 1]))
+              & (vol > tripleRoll(vol, [1, 1, 1]))
+              & (vol > tripleRoll(vol, [0, 0, 1]))
+              & (vol > threshold * np.max(vol)))
+
+    positions = np.array(np.where(pLarge * vol)).T.copy()  # return array as [num,posXYZ]
+    return positions.astype(np.int)
+
+
+def enforceMinDist(positions, intensities, minDistance):
+    """ Remove peaks that violate a minimum distance requirement. If two peaks are
+    closer together than the minDistance then the one with the highest intensity is chosen.
+    
+    Works for 2D and 3D data sets.
+    
+    Parameters
+    ----------
+        positions : np.ndarray
+            An array of shape Nx3 or Nx2 containing the positions of the peaks to test 
+        intensities : np.ndarray
+            An array of shape Nx1 with the peak intensities.
+        minDistance : int
+            The minimum distance in pixels
+        
+    Returns
+    -------
+        validPeaks : np.ndarray
+            An ndarray of Mx3 or Mx2 (M <= N) with invalid peaks removed.
+    """
+
+    validPeaks = np.zeros(positions.shape, dtype=np.float32)  # Will hold intensity,X,Y,Z
+
+    alreadyTested = np.zeros(
+        positions.shape[0])  # all peaks are tested unless they were already compared to another peak
+
+    for ii, p0 in enumerate(positions):  # ii is the iteration number and p0 is the element
+        if not alreadyTested[ii]:
+            pointsDist = np.sqrt(np.sum((positions - p0) ** 2, axis=1))  # find the distance to every other point
+            closePeaks = pointsDist[(pointsDist > 0) & (pointsDist < minDistance)]
+
+            if closePeaks.any():  # test for any values < minDistance
+                closePeaksIndices = np.where(pointsDist < minDistance)[0]  # find all close peaks including self
+                peakIntensities = intensities[closePeaksIndices]
+                highestPeakIndex = closePeaksIndices[np.argmax(peakIntensities)]  # find the index of the highest peak
+                alreadyTested[closePeaksIndices] = 1  # Don't test peaks in the future if already tested
+                validPeaks[closePeaksIndices, :] = np.nan  # set all values to nan; cant be integer data set
+                validPeaks[ii, :] = positions[highestPeakIndex, :]  # set highest intensity to correct values
+            else:
+                validPeaks[ii, :] = positions[ii, :]  # save the current peak
+                # alreadyTested[ii] = 1 #Dont test peaks in the future if already tested
+
+    validPeaks = validPeaks[~np.isnan(validPeaks[:, 0]), :]
+    # print("Removed %d peaks" % (positions.shape[0] - validPeaks.shape[0]))
+    return validPeaks.astype(np.int)
+
+
+def peaksToVolume(peakList, volShape, gaussSigma, gaussSize, indexing='ij'):
+    """ Place 3D Gaussian at a set of peak positions.
+    
+    Parameters
+    ----------
+        peakList : np.ndarray
+            Array of peak positions of size (numPeaks, 3).
+        
+        volShape : tuple
+            3 element tuple of the shape of the volume containing the peaks
+        
+        gaussSigma : tuple
+            3 element tuple with that sigma parameters passed to the gaussND.gauss3D() function (sigX,sigY,sigZ)
+        
+        gaussSize : tuple
+            3 element tuple describing the 3D size of the simulated gaussian box. Must be odd.
+
+        indexing : str
+            String to pass to np.meshgrid to indicate which indexing is used. Either 'ij' or 'xy' are possible. Default
+            is 'ij' for this module.
+    Returns
+    -------
+        : np.ndarray
+            A volume containing gaussian peaks at each position indicated in peakList parameter.
+    
+    """
+
+    sim_volume = np.zeros(volShape, dtype=np.float32)
+
+    if np.any(np.array(gaussSize) % 2 == 0):
+        raise ValueError('gaussSize must be odd.')
+
+    sz = [int((g - 1) // 2) for g in gaussSize]
+    temp0 = np.arange(-sz[0], sz[0]+1)
+    temp1 = np.arange(-sz[1], sz[1]+1)
+    temp2 = np.arange(-sz[2], sz[2]+1)
+    Y3D, X3D, Z3D = np.meshgrid(temp0, temp1, temp2, indexing=indexing)
+
+    for pos in peakList:
+        pos_loc = (pos // 1).astype(int)
+
+        pos_remain = pos % 1
+        gg3 = gaussND.gauss3D(Y3D, X3D, Z3D,
+                              pos_remain[0], pos_remain[1], pos_remain[2],
+                              gaussSigma[0], gaussSigma[1], gaussSigma[2])
+
+        sim_volume[pos_loc[0] - sz[0]:pos_loc[0] + sz[0] + 1,
+                   pos_loc[1] - sz[1]:pos_loc[1] + sz[1] + 1,
+                   pos_loc[2] - sz[2]:pos_loc[2] + sz[2] + 1] += gg3
+    return sim_volume
+
+
+def peaksToImage(peakList, imShape, gaussSigma, gaussSize, indexing='ij'):
+    """ Place 2D Gaussian at a set of peak positions.
+    
+    Parameters
+    ----------
+        peakList : np.ndarray
+            Array of peak positions of size (numPeaks, 2).
+        
+        imShape : tuple
+            2 element tuple of the shape of the image containing the peaks
+        
+        gaussSigma : tuple
+            2 element tuple with that sigma parameters passed to the gaussND.gauss2D() function (sigX,sigY)
+        
+        gaussSize : tuple
+            2 element tuple describing the 2D size of the simulated gaussian box. Must be odd.
+
+        indexing : str, default = 'ij'
+            'ij' or 'xy' indexing to pass to np.meshgrid.
+    Returns
+    -------
+        : np.ndarray
+            A image containing Gaussian peaks at each position indicated in peakList parameter.
+    
+    """
+
+    sim_image = np.zeros(imShape, dtype=np.float32)
+
+    if np.any(np.array(gaussSize) % 2 == 0):
+        raise ValueError('gaussSize must be odd.')
+
+    sz = [int((g - 1) // 2) for g in gaussSize]
+    temp0 = np.arange(-sz[0], sz[0] + 1)
+    temp1 = np.arange(-sz[1], sz[1] + 1)
+    Y3D, X3D = np.meshgrid(temp1, temp0, indexing=indexing)
+    for pos in peakList:
+        pos_loc = (pos // 1).astype(int)
+        pos_remain = pos % 1
+        gg2 = gaussND.gauss2D(Y3D, X3D,
+                              pos_remain[0], pos_remain[1],
+                              gaussSigma[0], gaussSigma[1])
+        sim_image[pos_loc[0] - sz[0]:pos_loc[0] + sz[0] + 1,
+                  pos_loc[1] - sz[1]:pos_loc[1] + sz[1] + 1] += gg2
+    return sim_image
+
+
+def lattice2D_norm(u, v, a, b, origin, num_points):
+    """
+    Returns a set of points in a lattice according to the u, v unit vectors (vectors are normalized internally)
+    and lengths a,b centered at origin. The lattice has num_points along each u,v
+    vector.
+    
+    Parameters
+    ----------
+        u, v : 2-tuple
+            2 element tuples defining the lattice directions as vectors.
+
+        a, b : float
+            values to multiply each vector by (if u,v are not normalized then set these to 1)
+
+        origin : 2-tuple
+            The origin in the format (x0, y0)
+
+        num_points : 2-tuple
+            2 element tuple of the number of repeats of the lattice along each direction
+
+    Returns
+    ------
+        : ndarray
+            The set of points in the lattice. Size (num_points[0] * num_points[1], 2)
+    """
+
+    assert np.linalg.norm(u) == 1
+    assert np.linalg.norm(v) == 1
+
+    totalNumPoints = np.prod(num_points)
+
+    Y2D, X2D = np.meshgrid(range(num_points[1]), range(num_points[0]), indexing=default_indexing)
+
+    X = X2D.reshape(totalNumPoints)
+    Y = Y2D.reshape(totalNumPoints)
+
+    xy = np.zeros((np.prod(num_points), 2))
+    xy[:, 0] = origin[0] + a * X * u[0] + b * Y * v[0]
+    xy[:, 1] = origin[1] + a * X * u[1] + b * Y * v[1]
+
+    return xy
+
+
+def lattice2D(u, v, a, b, origin, num_points):
+    """
+    A modified version of peakFind.lattice2D_norm which can use non normalized u,v,vectors
+    
+    Parameters
+    ----------
+        u, v : tuple
+            2 element vectors defining the lattice directions
+
+        a, b : float
+            values to multiply each vector by (if u,v,w are not normalized then set these to 1)
+
+        origin : tuple
+            The origin in the format (x0,y0)
+
+        num_points : tuple
+            2 element tuple of the number of repeats of the lattice along each direction
+
+    Returns
+    ------
+        : ndarray
+            The set of points in the lattice. Size (num_points[0] * num_points[1], 2)
+    """
+    totalNumPoints = np.prod(num_points)
+
+    Y2D, X2D = np.meshgrid(range(num_points[1]), range(num_points[0]), indexing=default_indexing)
+
+    X = X2D.reshape(totalNumPoints)
+    Y = Y2D.reshape(totalNumPoints)
+
+    xy = np.zeros((np.prod(num_points), 2))
+    xy[:, 0] = origin[0] + a * X * u[0] + b * Y * v[0]
+    xy[:, 1] = origin[1] + a * X * u[1] + b * Y * v[1]
+
+    return xy
+
+
+def lattice3D(u, v, w, a, b, c, origin, num_points):
+    """
+    Returns a set of points in a lattice according to the u, v, w vectors
+    and lengths a,b centered at origin. The lattice has num_points along each u,v,w
+    vector.
+
+    Parameters
+    ----------
+        u, v, w : tuple or np.ndarray
+            3 element vectors defining the lattice directions
+        a, b, c : float
+            Values to multiply each vector by (if u,v,w are not normalized then set these to 1)
+        origin : tuple
+            The origin in the format (x0,y0,z0)
+        num_points : tuple
+            3 element tuple of the number of repeats of the lattice along each direction
+
+    Returns
+    -------
+        xyz : ndarray
+            A (N,3) shaped set of coordinates
+    """
+
+    totalNumPoints = np.prod(num_points)
+
+    Y3D, X3D, Z3D = np.meshgrid(range(num_points[1]), range(num_points[0]), range(num_points[2]),
+                                indexing=default_indexing)
+
+    X = X3D.reshape(totalNumPoints)
+    Y = Y3D.reshape(totalNumPoints)
+    Z = Z3D.reshape(totalNumPoints)
+
+    xyz = np.zeros((np.prod(num_points), 3))
+    xyz[:, 0] = origin[0] + a * X * u[0] + b * Y * v[0] + c * Z * w[0]
+    xyz[:, 1] = origin[1] + a * X * u[1] + b * Y * v[1] + c * Z * w[1]
+    xyz[:, 2] = origin[2] + a * X * u[2] + b * Y * v[2] + c * Z * w[2]
+
+    return xyz
+
+
+def applyLatticeLimit(lattice, bounds):
+    """Remove lattice points outside the data bounds. For 2D and 3D data.
+    
+    Parameters
+    ---------
+        lattice : ndarray; (N, 2) or (N, 3)
+            From lattice2D
+
+        bounds : tuple, 
+            Minimum and maximum for axes 0 and 1
+            (min0, max0, min1, max1) or axes 0, 1 and 2
+            (min0, max0, min1, max1, min2, max2)
+
+    Returns
+    -------
+        : ndarray; (M, 2) or (M, 3)
+            Same as lattice input except only containing
+            points within the bounds specified. M <= N
+    """
+    if len(bounds) == 4:
+        goodUVs = (((lattice[:, 0] > bounds[0]) & (lattice[:, 0] < bounds[1])) &
+                   ((lattice[:, 1] > bounds[2]) & (lattice[:, 1] < bounds[3])))
+    elif len(bounds) == 6:
+        goodUVs = (((lattice[:, 0] > bounds[0]) & (lattice[:, 0] < bounds[1])) &
+                   ((lattice[:, 1] > bounds[2]) & (lattice[:, 1] < bounds[3])) &
+                   ((lattice[:, 2] > bounds[4]) & (lattice[:, 2] < bounds[5])))
+    else:
+        print('Bounds needs be be either 4 or 6 value tuple.')
+        return None
+    return lattice[goodUVs, :]
+
+
+# noinspection PyArgumentList
+def peakPlot3D(X, Y, Z, mkr, myAxes3D):
+    """
+    Plot a set of peaks in a 3D plot using matplotlib. See the example below for how to set up a figure as input
+    to this function using matplotlib Axes3D.
+
+    todo: move this to viz
+
+    Parameters
+    -----------
+        X : np.ndarray
+            The x positions as a 1D array.
+
+        Y : np.ndarray
+            The y positions as a 1D array.
+
+        Z : np.ndarray
+            The Z positions as a 1D array.
+
+        mkr : string
+            String indicating the marks type and color. Passed directly to pyplot.plt
+            command (ex. 'go' for green circles)
+
+        myAxes3D : mpl_toolkits.mplot3d.Axes3d
+            An Axes3D object. (see example below)
+        
+    Returns
+    -------
+        None
+    
+    Example
+    -------
+    This function requires the input of a Axes3D to plot a set of peaks. See below how to import
+    and set up a figure for use with this function.
+    >> import matplotlib.pyplot as plt
+    >> import mpl_toolkits.mplot3d
+    >> from ncempy.algo import peak_find
+    >> fg1 = plt.figure()
+    >> ax1 = mpl_toolkits.mplot3d.Axes3D(fg1)
+    >> peak_find.peakPlot3D(peakList[:,2], peakList[:,1], peakList[:,0], 'go', ax1)
+    """
+
+    import matplotlib.pyplot as plt
+
+    plt.plot(X, Y, Z, mkr)
+
+    max_range = np.array([X.max() - X.min(), Y.max() - Y.min(), Z.max() - Z.min()]).max() / 2.0
+
+    mid_x = (X.max() + X.min()) * 0.5
+    mid_y = (Y.max() + Y.min()) * 0.5
+    mid_z = (Z.max() + Z.min()) * 0.5
+
+    myAxes3D.set_xlim(mid_x - max_range, mid_x + max_range)
+    myAxes3D.set_ylim(mid_y - max_range, mid_y + max_range)
+    myAxes3D.set_zlim(mid_z - max_range, mid_z + max_range)
+
+    myAxes3D.set_xlabel('X')
+    myAxes3D.set_ylabel('Y')
+    myAxes3D.set_zlabel('Z')
+
+
+def peak3View(fg, vol, peak_positions):
+    """
+    Plot 3 orthogonal slices and the corresponding peaks in each slice.
+    
+    Not fully test. Unsure whether the slices and peaks are exactly the same.
+
+    todo: move this to viz
+
+    Parameters
+    -----------
+        fg : matplotlib figure
+            The figure to use. This allows the user to reuse figures
+
+        vol : ndarray (3D)
+            The volume to slice along each orthogonal direction. Set up for [X,Z,Y] orientation
+
+        peak_positions : ndarray, list, tuple (1D)
+            This selects the point shown in all three slices
+        
+    Returns
+    -------
+        None
+
+    """
+    ((ax1, ax2), (ax3, ax4)) = fg.subplots(2, 2)
+
+    slices = [int(round(ii)) for ii in peak_positions]
+    ax1.imshow(vol[slices[0], :, :])
+    ax1.plot(peak_positions[2], peak_positions[1], 'xk')
+    ax1.set(title='X slice {}'.format(slices[0]))
+
+    ax3.imshow(vol[:, slices[1], :])
+    ax3.plot(peak_positions[2], peak_positions[0], 'xk')
+    ax3.set(title='Y slice {}'.format(slices[1]))
+
+    ax4.imshow(vol[:, :, slices[2]])
+    ax4.plot(peak_positions[1], peak_positions[0], 'xk')
+    ax4.set(title='Z slice {}'.format(slices[2]))
+
+    ax2.axis('off')
+    fg.tight_layout()
+
+
+def remove_xrays(imageOriginal, threshold, size_median_filter=(3, 3)):
+    """
+    Find x-ray pixels in TEM images and replace the xray intensity 
+    with a local median value.
+    
+    Parameters
+    ----------
+        imageOriginal : ndarray
+            The image as a 2D ndarray.
+        threshold : float
+            Value above which to consider a pixel intensity an x-ray.
+        size_median_filter : list or tuple
+            The footprint of the median filter over which to search for a median value.
+            
+    Returns
+    -------
+        : ndarray
+            The image with x-ray values replaced with median local value.
+    
+    """
+    # Find x-ray pixels
+    image_med_filter = ndimage.filters.median_filter(imageOriginal, size_median_filter)
+    sub_xrays = np.where(imageOriginal > (image_med_filter + threshold))
+
+    # Replace x-ray pixels with median filtered values.
+    image_filtered = imageOriginal.copy()
+    image_filtered[sub_xrays[0], sub_xrays[1]] = image_med_filter[sub_xrays[0], sub_xrays[1]]
+    return image_filtered, sub_xrays
+
+
+def writeXYZ(filename, XYZ, element, comment):
+    """
+    Write out a set of XYZ coordinates that can be read by various crystal viewing software such as Vesta.
+
+    todo: Move this to io
+
+    Parameters
+    ----------
+        filename : str
+            The name of the file to write to.
+
+        XYZ : np.ndarray
+            Atom coordinates in a 2D ndarray with axes [atom number, position]. Should be shape [N, 3]
+
+        element : tuple
+            Element symbol of each coordinate as a string (e.g. 'C'). Should be length N.
+
+        comment : str
+            A comment to add to the file.
+
+    Example
+    -------
+        # Write out the peak positions as Carbon atoms:
+        >> writeXYZ('name.xyz', positions, ['C',] * len(positions), 'writeXYZ example carbon atoms')
+    """
+    numAtoms = XYZ.shape[0]
+    with open(filename, 'w') as f1:
+        f1.write('{}\n'.format(numAtoms))
+        f1.write('{}\n'.format(comment))
+        for ii in range(numAtoms):
+            f1.write('{} {} {} {} \n'.format(element[ii], XYZ[ii, 0], XYZ[ii, 1], XYZ[ii, 2]))
+
+
+def refineLattice2D(or0, u0, v0, pos, fraction=(1, 1), max_iter=30,
+                    refine_locally=True, verbose=False, num_unit_cells=(1, 1)):
+    """ Refine lattice based on measurements and initial
+    guess at lattice vectors. This code is designed to work only with
+    square lattices. Hexagonal and more complex lattice might not work.
+
+    Parameters
+    ----------
+        or0 : tuple
+            Initial guess of origin. 2-tuple
+        u0 : tuple
+            Initial u vector. Use num_unit_cells to average over several lengths of the lattice vector in this
+            direction. 2-tuple
+        v0 : tuple
+            Initial v vector. Use num_unit_cells to average over several lengths of the lattice vector in this
+            direction. 2-tuple
+        pos : np.ndarray
+            The set of positions to fit the lattice to. (number, position) (M, 2)
+        refine_locally : bool
+            Refine locally near the origin before using all positions
+            Locally is considered 2 time the larger vector of u0 or v0.
+        fraction : tuple
+            Site fraction to take into account peak positions inside the unit cell. FCC imaged along [100] for\
+            example would need site_fraction = (2, 2).
+        max_iter : int
+            The maximum number of iterations to run to refine. This usually converges in a few iterations. Default is
+            30.
+        num_unit_cells : tuple
+            The number of unit cells the initial guess of u0 and v0 extend over. 2-tuple (num_u0, num_v0) with default
+        verbose : bool
+            Print out helpful information.
+            
+    Returns
+    -------
+        : tuple
+            Tuple of of 4 np.ndarray (origin, u, v, ab) where ab is the
+            site positions in fractions of u and v.
+    
+    """
+
+    origin = or0
+    u = u0
+    v = v0
+
+    xyRes = (0, 0)
+    ab = (0, 0)
+
+    # Divide by number plotted
+    u = [ii / num_unit_cells[0] for ii in u]
+    v = [ii / num_unit_cells[1] for ii in v]
+
+    for ii in range(max_iter):
+        if refine_locally is True:
+            for jj in range(1, 30):
+                # Refine locally first stepping out
+                rMax = jj * np.mean((np.linalg.norm(u), np.linalg.norm(v)))  # radius to use first
+
+                # compute a, b, c values by finding points p0 in basis {u,v,w} from {i,j,k}
+                uv = np.array([u, v]).T
+                pR = np.sqrt((pos[:, 0] - origin[0]) ** 2 + (pos[:, 1] - origin[1]) ** 2)
+                p1 = pos[pR < rMax, :]
+                if p1.shape[0] < 10:
+                    # Test that there are enough atoms to do a fit. Skip if less than 10
+                    continue
+                (ab, abRes, abX, abY) = np.linalg.lstsq(uv, (p1 - origin).T, rcond=None)
+
+                # Refine lattice
+                A = np.ones([ab.shape[1], 3])  # origin values should be 1
+                A[:, 1] = np.round(fraction[0] * ab[0, :]) / fraction[
+                    0]  # fill the rest of the values with the abc values
+                A[:, 2] = np.round(fraction[1] * ab[1, :]) / fraction[1]
+
+                (xy_beta, xyRes, rXY, sXY) = np.linalg.lstsq(A, p1, rcond=None)
+
+                origin = xy_beta[0, :]
+                u = xy_beta[1, :]
+                v = xy_beta[2, :]
+
+        uv = np.array([u, v]).T
+        (ab, abRes, abX, abY) = np.linalg.lstsq(uv, (pos - origin).T, rcond=None)
+
+        # Refine lattice
+        A = np.ones([ab.shape[1], 3])
+        A[:, 1] = np.round(fraction[0] * ab[0, :]) / fraction[0]  # fill the rest of the values with the abc values
+        A[:, 2] = np.round(fraction[1] * ab[1, :]) / fraction[1]
+        (xy_beta, xyRes, rXY, sXY) = np.linalg.lstsq(A, pos, rcond=None)
+
+        origin = xy_beta[0, :]
+        u = xy_beta[1, :]
+        v = xy_beta[2, :]
+        if verbose:
+            print('[u,v] = [[{}],[{}]]'.format(u, v))
+
+    if verbose:
+        print('Residuals = [{}, {}]'.format(xyRes[0], xyRes[0]))
+        # Print out the results
+        print('origin: {}'.format(origin))
+        print('u: {}\nv: {}'.format(u, v))
+        print('|u|: {0[0]:.4}, |v|: {0[1]:.4} (pixels)'.format(np.linalg.norm([u, v], axis=1)))
+        print('angle UV: {:.4}'.format(np.arccos(np.dot(u / np.linalg.norm(u),
+                                                        v / np.linalg.norm(v))) * 180. / np.pi))
+
+    return origin, u, v, ab.T
+
+
+def refineLattice3D(or0, u0, v0, w0, pos, fraction=(1, 1, 1), max_iter=30, refine_locally=True):
+    """ Refine lattice based on measurements and initial guess at lattice vectors
+    
+    Warning
+    -------
+        Tested code but not production yet. This is a work un progress.
+    
+    Parameters
+    ----------
+        or0 : 3-element tuple 
+            Origin.
+        u0 : tuple
+            Initial u vector.    
+        v0 : tuple 
+            Initial v vector
+        w0 : tuple 
+            Initial w vector
+        pos : array (number, position) (M,3)
+            The set of positions to fit the lattice to.
+        refine_locally : bool
+            Refine locally near the origin before using all positions
+            Locally is considered 2 time the larger vector of u0 or v0.
+        fraction : tuple
+            Site fraction to take into account peak positions inside the unit cell. FCC imaged along [100] for
+            example would need site_fraction = (2, 2).
+        max_iter : int
+            Maximum number of iterations.
+    Returns
+    -------
+        : tuple of 4 np.ndarray (origin, u, v, ab)
+            Tuple of refined origin, u, v optimized values as np.ndarray and the
+            site positions in fractions of u and v.
+    
+    """
+    xRes0 = 1e6
+    yRes0 = 1e6
+    zRes0 = 1e6
+    for ii in range(max_iter):
+
+        # compute a,b values
+        uv = np.array([u0, v0, w0]).T
+        (ab, abRes, abX, abY) = np.linalg.lstsq(uv, (pos - or0).T, rcond=None)
+
+        # Refine lattice
+        A = np.ones([ab.shape[1], 4])
+        A[:, 1] = np.round(ab[0, :])
+        A[:, 2] = np.round(ab[1, :])
+        A[:, 3] = np.round(ab[2, :])
+        (xy_beta, xyRes, rXY, sXY) = np.linalg.lstsq(A, pos, rcond=None)
+
+        if xyRes[0] < xRes0 and xyRes[1] < yRes0 and xyRes[2] < zRes0:
+            _ = xyRes[0]
+            _ = xyRes[1]
+            _ = xyRes[2]
+        else:
+            print('----Converged----')
+            break
+
+        print('Residuals = [{0[0]}, {0[1]}, {0[2]}]'.format(xyRes))
+
+        origin = xy_beta[0, :]
+        u = xy_beta[1, :]
+        v = xy_beta[2, :]
+        w = xy_beta[3, :]
+
+        return origin, u, v, w
+
+
+def generateLatticeFromRefinement(origin, u, v, ab, fraction=(1, 1)):
+    """ Generate lattice positions from refined output
+    of refineLattice2D. This can be used to generate
+    all positions when fraction is used in refineLattice2D
+    
+    Parameters
+    ----------
+        origin : tuple
+            Origin. 2-tuple
+        u : tuple
+            Initial u vector. 2-tuple
+        v : tuple
+            Initial v vector. 2-tuple
+        fraction : tuple
+            The fraction used in refineLattice2D. 2-tuple
+        ab : np.ndarray
+            The set of positions in terms of u and v lattice vectors. (number, position) (M, 2)
+        fraction : tuple
+            The fractional coordinates for the unit cell. 2-tuple
+    
+    Returns
+    -------
+        : np.ndarray
+            The lattice site positions of the given lattice vectors of shape (M, 2)
+    """
+
+    lat = np.zeros_like(ab)
+
+    lat[:, 0] = origin[0] + np.round(ab[:, 0] * fraction[0]) * (u[0] / fraction[0]) + \
+                np.round(ab[:, 1] * fraction[1]) * v[0] / fraction[1]
+    lat[:, 1] = origin[1] + np.round(ab[:, 0] * fraction[0]) * (u[1] / fraction[0]) + \
+                np.round(ab[:, 1] * fraction[1]) * v[1] / fraction[1]
+
+    return lat
+
+
+def lattice2D_2(u, v, a, b, xy0, numPoints):
+    """ A modified version of lattice2D which uses non-normalized u, v vectors
+
+    """
+
+    Y2D, X2D = np.meshgrid(range(numPoints[1]), range(numPoints[0]), indexing=default_indexing)
+
+    X = X2D.ravel()
+    Y = Y2D.ravel()
+
+    xy = np.zeros((np.prod(numPoints), 2))
+    xy[:, 0] = xy0[0] + a * X * u[0] + b * Y * v[0]
+    xy[:, 1] = xy0[1] + a * X * u[1] + b * Y * v[1]
+
+    return xy
+
+
+def lattice3D_2(u, v, w, a, b, c, xyz0, numPoints):
+    """ A modified version of lattice3D which uses non-normalized u,v vectors
+
+    """
+
+    Z3D, Y3D, X3D = np.meshgrid(range(numPoints[1]), range(numPoints[0]), range(numPoints[0]),
+                                indexing=default_indexing)
+
+    X = X3D.ravel()
+    Y = Y3D.ravel()
+    Z = Z3D.ravel()
+
+    xyz = np.zeros((np.prod(numPoints), 3))
+    xyz[:, 0] = xyz0[0] + a * X * u[0] + b * Y * v[0] + c * Z * w[0]
+    xyz[:, 1] = xyz0[1] + a * X * u[1] + b * Y * v[1] + c * Z * w[1]
+    xyz[:, 2] = xyz0[1] + a * X * u[2] + b * Y * v[2] + c * Z * w[2]
+
+    return xyz
+
+
+def fit_peaks_gauss2d(image, peaks, cutOut, init, bounds, remove_edge_peaks=True):
+    """ Fit peaks to a 2D Gaussian. The Gaussian function is gaussND.gauss2D()
+    
+    Todo: Write tests. This function is copied from test_peakFind.ipynb
+    Todo: Add example test_peakFind.ipynb from my jupyter notebook folder
+    
+    Parameters
+    ----------
+        image : np.ndarray
+            The 2D image with the intensities to fit to
+            
+        peaks : np.ndarray
+            The peaks in a ndarray of shape (N,2) where N is the number
+            of peaks. Should match output of peakFind.peakFind2D.
+            
+        cutOut : int
+            The size (+/-) of the region around each peak to fit.
+            
+        init : tuple
+            A tuple of initial sigma values in x and y. (sigma_x, sigma_y)
+        
+        bounds : tuple
+            A tuple of 2 tuples indicating the upper and lower bounds for the fitting.
+            See scipy.optimize.curve_fit for more information. Ordered as
+            ( (center_x_low, center_y_low, sigma_x_low, sigma_y_low), 
+            (center_x_high, center_y_high, sigma_x_high, sigma_y_high))
+        
+        remove_edge_peaks : bool, default = True
+            Peak positions at the edge of the image are set to NaN and are removed.
+            If you want to have those positions returned as nan set this to False.
+        
+    Note
+    ----
+        This function uses np.meshgrid and indexing='ij' internally.
+    
+    Returns
+    -------
+        : tuple
+            Returns a tuple of 3 arrays:
+                [0] optimized peak positions as a (M, 2) ndarray. M <= N. Peaks on the edge of the image are removed.
+                [1] peak intensity value interpolated at the optimized peak position.
+                [2] the fitting values for each peak
+    """
+
+    # Indexes that sort intensity high to low
+    peaks_sort_values = np.argsort(image[peaks[:, 0], peaks[:, 1]])
+
+    # X,Y,sig_x,sig_y
+    # NAN means peak near an edge and can not be fit
+    optPointsNaN = np.zeros((peaks_sort_values.shape[0], 4))
+    fittingValues = np.zeros_like(optPointsNaN)
+
+    optINaN = np.zeros((optPointsNaN.shape[0]))  # holds the optimized intensity
+    optI_meanNaN = np.zeros_like(optINaN)
+
+    # Setup cutout coordinates around each peak
+    X2D, Y2D = np.meshgrid(np.arange(-cutOut, cutOut + 1, 1),
+                           np.arange(-cutOut, cutOut + 1, 1), indexing=default_indexing)
+
+    for ii, index in enumerate(peaks_sort_values):
+
+        curX = int(peaks[index, 0])
+        curY = int(peaks[index, 1])
+
+        # Check if current point + fit region is within the bounds of the volume
+        if (curX >= cutOut) & (curY >= cutOut) & \
+                (curX < image.shape[0] - cutOut) & \
+                (curY < image.shape[1] - cutOut):
+
+            curIm = np.float32(image[curX - cutOut:curX + cutOut + 1,
+                               curY - cutOut:curY + cutOut + 1])
+            curIm_norm = curIm - curIm.min()  # subtract the min
+            curIm_norm = curIm_norm / curIm_norm.max()  # normalize to 1
+
+            # Calculate error for each point based on intensity
+            y_error = 1 / np.sqrt(curIm_norm.ravel() + 0.00001)  # add a small offset to remove divide by zero
+            
+            optP2D, optCov2D = opt.curve_fit(gaussND.gauss2D_FIT, (X2D, Y2D), curIm_norm.ravel(),
+                                             p0=(0, 0, init[0], init[1]), bounds=bounds,
+                                             sigma=y_error)
+
+            fittingValues[ii, :] = optP2D
+
+            optPointsNaN[ii, :] = np.array([curX + optP2D[0], curY + optP2D[1],
+                                            optP2D[2], optP2D[3]])  # X,Y,sigma_x,sigma_y
+        else:
+            # Peak is near an edge
+            optPointsNaN[ii, :] = np.array([np.nan] * 4)
+            fittingValues[ii, :] = np.array([np.nan] * 4)
+            optINaN[ii] = np.nan
+            optI_meanNaN[ii] = np.nan
+
+    # Get the intensity of each optimize peak position
+    optINaN = ndimage.map_coordinates(image.astype('f'),
+                                      ((optPointsNaN[:, 0]),
+                                       (optPointsNaN[:, 1])),
+                                      cval=np.nan)
+
+    # Remove NANs where peak is at the edge if desired
+    if remove_edge_peaks:
+        optPoints = optPointsNaN[~np.isnan(optPointsNaN[:, 0]), :]
+        optI = optINaN[~np.isnan(optINaN)]
+        fittingValues = fittingValues[~np.isnan(optINaN)]
+    else:
+        optPoints = optPointsNaN
+        optI = optINaN
+        fittingValues = fittingValues
+
+    return optPoints, optI, fittingValues
+
+
+def fit_peaks_gauss3d(volume, peaks, cutOut, init, bounds, remove_edge_peaks=True):
+    """ Fit peaks to a 2D Gaussian. The Gaussian function is gaussND.gauss2D()
+
+    Todo: Write tests. This function is copied from test_peakFind_3d.ipynb
+
+    Parameters
+    ----------
+        volume : np.ndarray
+            The 3D image with the intensities to fit to.
+
+        peaks : np.ndarray
+            The peaks in a ndarray of shape (N, 3) where N is the number
+            of peaks. Should match output of peakFind.peakFind3D.
+
+        cutOut : int
+            The size (+/-) of the region around each peak to fit.
+
+        init : tuple
+            A 3-tuple of initial sigma values in x and y. (sigma_x, sigma_y, sigma_z)
+
+        bounds : tuple
+            A 2-tuple of 6-tuples indicating the upper and lower bounds for the fitting.
+            See scipy.optimize.curve_fit for more information. Ordered as
+            ( (center_x_low, center_y_low, center_z_low, sigma_x_low, sigma_y_low, sigma_z_low),
+            (center_x_high, center_y_high, center_z_high, sigma_x_high, sigma_y_high, sigma_z_high))
+
+        remove_edge_peaks : bool, default = True
+            Peak positions at the edge of the image are set to NaN and are removed.
+            If you want to have those positions returned as nan set this to False.
+
+    Note
+    ----
+        This function uses np.meshgrid and indexing='ij' internally.
+
+    Returns
+    -------
+        : tuple
+            Returns a tuple of 3 arrays:
+                [0] optimized peak positions as a (M, 3) ndarray. M <= N. Peaks on the edge of the image are removed
+                unless otherwise specified. Then the edge peaks are returned as NAN values.
+                [1] peak intensity value interpolated at the optimized peak position.
+                [2] the local fitting values for each peak.
+    """
+    # Sort from highest to lowest intensity
+    validPeaks_sort_values = np.argsort(volume[peaks[:, 0], peaks[:, 1], peaks[:, 2]])
+
+    # X,Y,Z,sig_x,sig_y,sig_z
+    # NAN means peak near an edge and can not be fit
+    optPointsNaN = np.zeros((len(validPeaks_sort_values), 6))
+    fittingValues = np.zeros_like(optPointsNaN)
+
+    # Set up fitting static variables
+    local_region = np.arange(-cutOut, cutOut + 1, 1)
+    Y3D, X3D, Z3D = np.meshgrid(local_region, local_region, local_region, indexing=default_indexing)
+    bad_point = (np.nan, np.nan, np.nan, np.nan, np.nan, np.nan)
+
+    for ii, index in enumerate(validPeaks_sort_values):
+        curX = int(peaks[index, 0])
+        curY = int(peaks[index, 1])
+        curZ = int(peaks[index, 2])
+
+        # Check if current point + fit region is within the bounds of the volume
+        if (curX > cutOut + 1) & (curY > cutOut + 1) & (curZ > cutOut + 1) & (curX < volume.shape[0] - cutOut) \
+                & (curY < volume.shape[1] - cutOut) & (curZ < volume.shape[2] - cutOut):
+
+            curVol = np.float32(volume[curX - cutOut:curX + cutOut + 1,
+                                curY - cutOut:curY + cutOut + 1,
+                                curZ - cutOut:curZ + cutOut + 1])
+            curVol_norm = curVol - curVol.min()  # subtract the min
+            curVol_norm = curVol_norm / curVol_norm.max()  # normalize maximum to 1
+
+            # Fit to a 3D Gaussian to the area around the peak
+            y_error = 1 / np.sqrt(curVol_norm.ravel() + 0.00001)  # add error
+            optP3D, optCov3D = opt.curve_fit(gaussND.gauss3D_FIT, (X3D, Y3D, Z3D), curVol_norm.ravel(),
+                                             p0=(0, 0, 0, *init), bounds=bounds, sigma=y_error)
+            fittingValues[ii, :] = optP3D
+
+            # Enter values into output array as X,Y,Z,sigma_x,sigma_y,sigma_z
+            optPointsNaN[ii, :] = np.array((float(curX) + optP3D[0], float(curY) + optP3D[1], float(curZ) + optP3D[2],
+                                            optP3D[3], optP3D[4], optP3D[5]))
+
+        else:
+            # if the peak is near an edge then ignore it and set its values to NAN
+            optPointsNaN[ii, :] = np.array(bad_point)
+            fittingValues[ii, :] = np.array(bad_point)
+
+    # Get the intensity of each optimize peak position
+    optINaN = ndimage.map_coordinates(volume.astype('f'),
+                                      ((optPointsNaN[:, 0]),
+                                       (optPointsNaN[:, 1]),
+                                       (optPointsNaN[:, 2])),
+                                      cval=np.nan)
+
+    # Remove NANs where peak is at the edge if desired
+    if remove_edge_peaks:
+        optPoints = optPointsNaN[~np.isnan(optPointsNaN[:, 0]), :]
+        optI = optINaN[~np.isnan(optINaN)]
+        fittingValues = fittingValues[~np.isnan(optINaN)]
+    else:
+        optPoints = optPointsNaN
+        optI = optINaN
+        fittingValues = fittingValues
+
+    return optPoints, optI, fittingValues
+
+
+def match_lattice_peaks(peaks, u, v, origin):
+    """ Find the matching lattice points to the experimental peaks. This is useful to generate all fitted lattice points
+    for a set of experimental peaks. This can then be used directly to calculate displacements for example.
+
+    Parameters
+    ----------
+    peaks : ndarray
+        The experimental peaks as a (num_peaks, 2) ndarray
+    u, v : tuple
+        The u and v vectors for the fitted lattice
+    origin : tuple
+        The origin of the fitted lattice for u, v vectors
+
+    Returns
+    -------
+    : ndarray
+        An array of shape (num_peaks, 2) where each coordinate is the closest lattice point for each input peak.
+    """
+
+    uv = np.asarray((u, v))
+    ab_nearest = np.dot(peaks - origin, np.linalg.inv(uv))
+
+    return ab_nearest
+
+
+def latticeDisplacements(peaks, u, v, origin):
+    """ Find the displacements of the experimental peaks to the fitted lattice parameters
+
+    Parameters
+    ----------
+    peaks : ndarray
+        The experimental peaks with shape (num_peaks, 2). For example, the output of fit_peaks_gauss2d.
+    u, v : tuple
+        The u and v vectors for the fitted lattice
+    origin : tuple
+        The origin of the fitted lattice for u, v vectors
+
+    Returns
+    -------
+    : ndarray
+        The displacement of each peak from the expected lattice position.
+    """
+    ab_nearest = match_lattice_peaks(peaks, u, v, origin)
+
+    uv = np.asarray((u, v))
+
+    p0_disp_linalg = np.zeros(peaks.shape)
+    # p0_disp_r_theta_linalg = np.zeros(peaks.shape)
+    for ii in range(peaks.shape[0]):
+        pp = peaks[ii, :]
+        rref = np.dot(np.round(ab_nearest[ii, :]), uv) + origin
+        p0_disp_linalg[ii, :] = pp - rref
+        # p0_disp_r_theta_linalg[ii, :] = (np.sqrt((pp[0] - rref[0]) ** 2 + (pp[1] - rref[1]) ** 2),
+        #                                  np.arctan2((pp[1] - rref[1]), (pp[0] - rref[0])))
+    return p0_disp_linalg
+
+
+def calculate_unit_cell(image, lattice, u, v, unit_cell_size):
+    """ IN PROGRESS
+    Calculate a unit cell using the input lattice and lattice parameters. Any unit cell at the edge of the image is not
+    used as part of the unit cell will be invalid.
+
+    Parameters
+    ----------
+    image : ndarray
+        The image containing the unit cell in a regular pattern (i.e. a lattice)
+    lattice: ndarray
+        The starting position of each unit cell in the image.
+    u, v : tuple
+        The u and v vectors for the fitted lattice
+    unit_cell_size : int or tuple
+        If int then this is the number of pixels in the unit cell along the u vector. The size of the v vector will be
+        automatically calculated to make the unit cell pixels square. If tuple then the number of pixels along each
+        u and v dimension are used directly.
+
+    Returns
+    -------
+    : ndarray
+        An array of size unit_cell_size which contains the average value of each position in the unit cell for each
+        peak position and u,v, lattice point.
+    """
+    print('Warning, untested code. Work in progress.')
+    if isinstance(unit_cell_size, int):
+        num_u = unit_cell_size
+        num_v = int(num_u * (np.linalg.norm(v) / np.linalg.norm(u)))
+    elif isinstance(unit_cell_size, tuple):
+        num_u, num_v = unit_cell_size
+    else:
+        raise TypeError('unit_cell_size must be int or 2-tuple')
+
+    # Ensure image is floating point for interpolation
+    if np.issubdtype(image.dtype, np.floating):
+        image2 = image.copy()
+    else:
+        image2 = image.astype(np.float32)
+
+    uu = [ii / num_u for ii in u]
+    vv = [ii / num_v for ii in v]
+
+    # Create a centered set of sub-lattice coordinates
+    sub_lattice = lattice2D(uu, vv, 1, 1, (0, 0), (num_u, num_v))  # starts at (0, 0). Then offset for each peak.
+
+    unit_cell = np.zeros((num_v, num_u), dtype=image2.dtype)
+    cur_cell = np.zeros((num_v * num_u,), dtype=image2.dtype)
+    num = 0  # number of unit cells used (edges are not used)
+    for ii, peak in enumerate(lattice):
+        cur_XX = sub_lattice[:, 0] + peak[0]
+        cur_YY = sub_lattice[:, 1] + peak[1]
+        ndimage.map_coordinates(image2, (cur_XX.ravel(), cur_YY.ravel()), order=3, output=cur_cell)
+        if not np.any(np.isnan(cur_cell)):
+            # Avoid unit cells on the edge of the image. Otherwise the mean is corrupted
+            unit_cell += cur_cell.reshape((num_v, num_u))
+            num += 1
+
+    # Normalize by the number of unit cells used
+    unit_cell /= num
+
+    # Rotate to match the image
+    return unit_cell.T
diff --git a/ncempy/notebooks/example_peakFind.ipynb b/ncempy/notebooks/example_peakFind.ipynb
new file mode 100644
index 0000000..50887c1
--- /dev/null
+++ b/ncempy/notebooks/example_peakFind.ipynb
@@ -0,0 +1,6705 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Example of how to find peaks in a synthetic image\n",
+    " - Create a set of 2D Gaussians\n",
+    " - Find the center of the Guassian to integer accuracy\n",
+    " - Optimize the position using Gaussian fitting for each peak"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%matplotlib notebook\n",
+    "\n",
+    "import numpy as np\n",
+    "import matplotlib.pyplot as plt\n",
+    "\n",
+    "# Import these from ncempy.algo\n",
+    "from ncempy.algo import gaussND\n",
+    "from ncempy.algo import peakFind"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Create a sample 2D Image\n",
+    " - Gaussians are placed on a grid with some random small offsets\n",
+    " - the variable coords are the known positions \n",
+    "  - these will not be known in a real experiment"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Coords shape = (25, 2)\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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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p6umngOybt26cO655xafk9I2BVgASdHSlgABAukCld5pCSDp68A7CBAg0FaBSs/lFQ8go0ePDr///nvxxPOTTz65uAvW8uXLiyMd8YjHgw8+eMDg9ttvL64JiU9CjwHlww8/LJ6EPnHixLBw4cIGViltW4osgLRUSjsCBAi0TqDSOy0BpHXrwbsIECDQFoFKz+UVDyBLliwpAsfnn38e4tGQ+DyQeFvd+ITzeBF6/ddff/0VHn/88eK0rO+++64ILOPHjw9Tp04NXbt2bXXblgILIC2V0o4AAQKtE6j0TksAad168C4CBAi0RaDSc3nFA0hbBpf7vfGIy/Dhw8PZ4X/CseFfubvXHwECBDq9wG/h/8J/wqfFbdjjke5qvMzl1VD1mQQIEDgoUOm5vKYDyIsvvlg8iNCLAAECBKorsGLFinDjjTdWpZN58+YV1xN6ESBAgEB1BSo1l9d0APnxxx+La00eeeSREEH79+9f3bVW8k+vezI8i/0risfBgmXRcOPl0XKPeBOSbdu2Fbde79WrV1VmwdWrV4fLLrssxFOAzzvvvKr00ZE+VH22vD470nqtxLKqDbXRVB0dqTYqPZfXdACJK6HuOpC1a9cW16rU8otFw7XP46AHC7XR3NzY3vXR3v2Xbb/Bw/baVE2qDbVRltoQQP797zB48OAggAhjh26UJmoBpCwTddm+4JZtW7Gt+lJV5oBcpu3XtmJbKct+TQARQA7UoonJxFSWialMO+zGlsW2Uq5txfoo1/oo2/arPvyYZN925K0y93YigAggAkgT22XujfHI00P7tWDhC16Zf2FWn+qzzPXZfjP34T3bVmwrZQljNR9Adu7cWTwMMT788MQTTyzTPJF9WVg0JOdx0IOF2mhuQmrv+mjv/rNP1kfokIfttakSURtqoyy1UfMBpGw7DstDgAABAgQIECBAoDMLCCCdee0aGwECBAgQIECAAIGSCQggJVshFocAAQIECBAgQIBAZxYQQDrz2jU2AgQIECBAgAABAiUTEEBKtkIsDgECBAgQIECAAIHOLCCAdOa1a2wECBAgQIAAAQIESiZQkwHk77//Dk888URYvHhx2L59ezjllFPC+PHjw5QpU0KXLl1KtorSF2fPnj3hySefLJ7uvmbNmrBr165w8803h2XLlh32YSkWKW3Tl7o674jjX7FiRXj33XfD119/HY499thw9tlnh4ceeihcdtllDTpNGV9K2+qMrHWfunnz5jBz5syiNuLtGI866qhw+umnh1tuuSXccccd4ZhjjjnwwSljTGnbuiXP865YJ5deemnR2RdffBH69etXMx7btm0Lffr0aRR63LhxxXxZ90pZ3yltU9dyNT87dVmq0d5cflDVXN6wwszlzW9x5vLyz+U1GUDuvPPOsGDBgjB27NgwdOjQ8NFHH4WlS5eG+Pfz58+vxn4k62fWfZGIzzUZPHhwePPNN5sMICkWKW2zDriZzsaMGRPef//9cM0114RBgwaFuEOP63rTpk3h+eefL750171SxpfStiwWcTnefvvtIpxecMEF4eSTTw7xC9yHH34YXnrppXDllVeGN954o6Y86q+bP//8MwwYMKD4UeK33347LICkrPOUtmWpj7p5Y+TIkSFuN/VfMYgNGTKkdLXREZ1T1re5/KCWubxh5ZjLm96SzOX7f0wq+1xecwFk48aNxZeMe+65Jzz77LMHKnjSpElh7ty5Yf369eGcc85J2UeUru0ff/wRfvzxx3DSSSeFv/76Kxx99NGNBpAUi5S2ZQKJX67PP//8Br/s7927N5x33nnhhx9+CLt37w5du3YNKeNLaVsmi+aW5e677y7C92effRbOOOOMmvR47LHHwjPPPBNuuOGG4n/rHwFJWecpbctUH3VfdqdPnx5mzZrV5KKljC+lbapFNT87dVmq1d5cflDWXN6yKjOXh2Au3x9Ayj6X11wAiStkzpw54auvvmpwukE8PSeeijJt2rQwe/bslm3pHaBVcwEkxSKlbQdgCffff3946qmnwrffflucgpcyvpS2HcEiLmM8KhJPQfz444+LoyMpY0xpW1aPb775Jpx11llh3rx5If53PE2tfgBJGWNK2zJ51A8gcQzx1b1798MWMWV8KW1TLar52anLkqO9ubxxZXN5Qxdzubm8o8zlNRdArrjiiuIoR7wu4tDX8ccfHwYOHBhWrVqVY3+SpY/mdlopFiltswysjZ1cf/314bXXXgu//PJLcV1IyvhS2rZxMav29t9//z3EP/FUo08++STcddddxZGyrVu3Fl86U8aY0rZqA2rjB8dD1fFoWDwdM4aPQwNIyhhT2rZxsSv69rqdVo8ePYpTFeMrnnp17733FvVR90oZX0rb1MFU87NTlyVHe3N548rmcnN5/cowl4fQUebymgsg8fSqbt26FRfhHvqK1wjs27evOP2ks7ya22mlWKS0LbtdvHgvnoJ11VVXhddff71Y3JTxpbQtq8WMGTOKL9l1r3jU44UXXgjnnntuzXnEa6TiTisGsXjNVJ1N/SMgKes8pW2Z6iMeDbz11lvDqFGjQu/evcOOHTuKC8/jxb+TJ08ubtxRpm2lozq3dp2byw+XM5eHA/OVuTwU17uay0NxZkdHmMtrLoD07ds3xCMd8ZfOQ1/xgvT4K2j8FbizvJrbaaVYpLQts92vv/4aLrzwwuIOUPFI2Kmnnlosbsr4UtqW1SKeghj//PTTT8UdwjZs2FCcN3vxxRfXlEe8HijeFe3yyy8PixYtKsbeWABJWecpbctaH3XLFW9ScMkll4QPPvggbNmypdhOUsaX0jbVopqfnbosOdqbyxsqm8v3e5jL9zuYy5ufhco4l9dcAPGr2cEiTbFIaZtjZ9yaPuIEFU/b+PTTT4vT7C666KIDH5MyvpS2rVnO9njP008/HR544IEilPXv379mjgg9/PDDxd3Q4pfrXr16NRlAUtZ5Stv2WNepfcY7o40YMaIIaBMmTChNbXQ25yOtF0dADgqZy5uuFnO5ubyp6ijbXF5zAcR5wwdLM8Uipe2RdqTt8e/xtnzxS1T8tX/lypXF6Vf1XynjS2nbHmNtTZ/ff/99OOGEEw7chCFljCltW7Ns1XpPPMUo3ngiXuMQnwNU93ruueeKO+KtXr06nHbaaUWblDGmtK3W2Cr5ufHoWLxzYLw5R7xJR8r4UtqmLnM1Pzt1WXK0dw3IfmVzefPVZi43lzdVIWWby2sugMQdaDzVxF2wQvFloqUWKW1z7IxT+og77ngP+Zj+X3zxxXDdddcd9vaU8aW0TVnO9mxbd9FafC5KPCKQMsaUtu05xkP7XrduXXHTieZe8QYF8YLslDGmtC2TR1PLEgN7fI5OvB4kPpAwZXwpbVMtqvnZqcuSo31zASTFIqVtjnGl9GEuP7KWubxxI3N5KH58LdNcXnMBJJ5iEr90NPUckPilpO5C3CNv6uVv0dxOK8UipW2ZVP7555/iuQ4vv/xycZH1bbfd1ujipYwvpW2ZLOKyxGucjjvuuMMWa+rUqcVFxsuWLSueGZMyxpS2ZfKI55C/8847hy3SK6+8El599dXiKEh8WGO8KDtljClty+Tx888/h549ezZYpHiqy7Bhw4oHd3755ZfFLatTxpfSNtWimp+duiw52pvLzeX168xcflDDXN5wBuooc3nNBZC4mm6//fbifOb4JPS4c40POIpPx544cWJYuHBhjn1J1fuIzzOIt5iNX8AfffTRInSNHj266DeeilQXslIsUtpWfYAt7OC+++4L8ZzYeL1H/dNs6t4eLz6ONyVIrYuOaBHHePXVVxcXnseLzeOXyVgjb731VnG60fDhw8N7771XPJixVjwaK6PGLkKvBY84P8RbM8cnnsfgFU9RW758eXG0OB4pffDBBw9wpdR/StsWbtatWo7Uzy5Le3P5/jVhLm9YkebyI2+h5vJyz+U1GUDiL0mPP/54cUrBd999V+xs45fT+Ctw3ZevI5d2uVvEc9fjA9Uae8WwdcsttxT/lGKR0rYsOvGL9vvvv9/k4sQv3HV3fkoZX0rbsljE5YhHguJRjnguaHwS/DHHHBPOPPPMcO211xZHBeP/r3uljDGlbZk8UgJIyhhT2pbFY8mSJUXg+Pzzz0P8BS0+DyTemnzSpEnFjxb1XynjS2mbalHNz05dlmq1N5fvlzWXN6wwc/mRt7imAkjKvJHS9shLlKdFR5nLazKA5CkBvRAgQIAAAQIECBAgcKiAAKImCBAgQIAAAQIECBDIJiCAZKPWEQECBAgQIECAAAECAogaIECAAAECBAgQIEAgm4AAko1aRwQIECBAgAABAgQICCBqgAABAgQIECBAgACBbAICSDZqHREgQIAAAQIECBAgIICoAQIECBAgQIAAAQIEsgkIINmodUSAAAECBAgQIECAgACiBggQIECAAAECBAgQyCYggGSj1hEBAgQIECBAgAABAgKIGiBAgAABAgQIECBAIJuAAJKNWkcECBAgQIAAAQIECAggaoAAAQIECBAgQIAAgWwCAkg2ah0RIECAAAECBAgQICCAqAECBAgQIECAAAECBLIJCCDZqHVEgAABAgQIECBAgIAAogYIECBAgAABAgQIEMgmIIBko9YRAQIECBAgQIAAAQICiBogQIAAAQIECBAgQCCbgACSjVpHBAgQIECAAAECBAgIIGqAAAECBAgQIECAAIFsAgJINmodESBAgAABAgQIECAggKgBAgQIECBAgAABAgSyCQgg2ah1RIAAAQIECBAgQICAAKIGCBAgQIAAAQIECBDIJiCAZKPWEQECBAgQIECAAAECAogaIECAAAECBAgQIEAgm4AAko1aRwQIECBAgAABAgQICCBqgAABAgQIECBAgACBbAICSDZqHREgQIAAAQIECBAgIICoAQIECBAgQIAAAQIEsgkIINmodUSAAAECBAgQIECAgACiBggQIECAAAECBAgQyCYggGSj1hEBAgQIECBAgAABAgKIGiBAgAABAgQIECBAIJuAAJKNWkcECBAgQIAAAQIECAggaoAAAQIECBAgQIAAgWwCAkg2ah0RIECAAAECBAgQICCAqAECBAgQIECAAAECBLIJCCDZqHVEgAABAgQIECBAgIAAogYIECBAgAABAgQIEMgmIIBko9YRAQIECBAgQIAAAQICiBogQIAAAQIECBAgQCCbgACSjVpHBAgQIECAAAECBAgIIGqAAAECBAgQIECAAIFsAgJINmodESBAgAABAgQIECAggKgBAgQIECBAgAABAgSyCQgg2ah1RIAAAQIECBAgQICAAKIGCBAgQIAAAQIECBDIJiCAZKPWEQECBAgQIECAAAECAogaIECAAAECBAgQIEAgm4AAko1aRwQIECBAgAABAgQICCBqgAABAgQIECBAgACBbAICSDZqHREgQIAAAQIECBAgIICoAQIECBAgQIAAAQIEsgkIINmodUSAAAECBAgQIECAgACiBggQIECAAAECBAgQyCYggGSj1hEBAgQIECBAgAABAgKIGiBAgAABAgQIECBAIJuAAJKNWkcECBAgQIAAAQIECAggaoAAAQIECBAgQIAAgWwCAkg2ah0RIECAAAECBAgQICCAqAECBAgQIECAAAECBLIJCCDZqHVEgAABAgQIECBAgIAAogYIECBAgAABAgQIEMgmIIBko9YRAQIECBAgQIAAAQICiBogQIAAAQIECBAgQCCbgACSjVpHBAgQIECAAAECBAgIIGqAAAECBAgQIECAAIFsAgJINmodESBAgAABAgQIECAggKgBAgQIECBAgAABAgSyCQgg2ah1RIAAAQIECBAgQICAAKIGCBAgQIAAAQIECBDIJiCAZKPWEQECBAgQIECAAAECAogaIECAAAECBAgQIEAgm4AAko1aRwQIECBAgAABAgQICCBqgAABAgQIECBAgACBbAICSDZqHREgQIAAAQIECBAgIICoAQIECBAgQIAAAQIEsgkIINmodUSAAAECBAgQIECAgACiBggQIECAAAECBAgQyCYggGSj1hEBAgQIECBAgAABAgKIGiBAgAABAgQIECBAIJuAAJKNWkcECBAgQIAAAQIECAggaoAAAQIECBAgQIAAgWwCAkg2ah0RIECAAAECBAgQICCAqAECBAgQIECAAAECBLIJCCDZqHVEgAABAgQIECBAgIAAogYIECBAgAABAgQIEMgmIIBko9YRAQIECBAgQIAAAQICiBogQIAAAQIECBAgQCCbgACSjVpHBAgQIECAAAECBAgIIGqAAAECBAgQIECAAIFsAgJINmodESBAgAABAgQIECAggKgBAgQIECBAgAABAgSyCQgg2ah1RIAAAQIECBAgQICAAKIGCBAgQIAAAQIECBDIJiCAZKPWEQECBAgQIECAAAECAogaIECAAAECBAgQIEAgm4AAko1aRwQIECBAgAABAgQI/D8atA+4XIueuAAAAABJRU5ErkJggg==\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# Create coordinates with a random offset\n",
+    "coords = peakFind.lattice2D_2((1, 0), (0, 1), 2, 2, (0, 0), (5, 5))\n",
+    "coords += np.random.rand(coords.shape[0], coords.shape[1]) / 2.5\n",
+    "coords = np.array(coords)*30 + (100, 100)\n",
+    "print('Coords shape = {}'.format(coords.shape))\n",
+    "\n",
+    "# Create an image with the coordinates as gaussians\n",
+    "kernel_shape = (11, 11)\n",
+    "simIm = peakFind.peaksToImage(coords, (512, 512), (1.75, 2.75), kernel_shape)\n",
+    "    \n",
+    "fg, ax = plt.subplots(1, 2, sharex=True,sharey=True)\n",
+    "ax[0].imshow(simIm)\n",
+    "ax[1].imshow(simIm)\n",
+    "ax[1].scatter(coords[:,1], coords[:,0],c='r',marker='.')\n",
+    "fg.tight_layout()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Find the center pixel of each peak\n",
+    " - uses ncempy.algo.peakFind.peakFind2D()\n",
+    " - These will be integer values of the max peak positions.\n",
+    " - Gaussian fitting will be used to find the smal random offsets\n",
+    " - See end of notebook for an explanation as to how this works."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4XuzdCZQV5Z3//0/d202z0zQoLoDQ7LKDWzegLDJkVbML438SzyGjMTHORBoTTFQmo05oNGOMW/78fuY/k8QYY8ZR4xJCt6LQiDTKorggqA2CyC6ydd97/6duw22aRasufevWU8+7z/HMBJ6q5/m+vqWnP/fWU+WkUqmU+EEAAQQQQAABBBBAAAEEAhBwCCABKDMFAggggAACCCCAAAIIpAUIIFwICCCAAAIIIIAAAgggEJgAASQwaiZCAAEEEEAAAQQQQAABAgjXAAIIIIAAAggggAACCAQmQAAJjJqJEEAAAQQQQAABBBBAgADCNYAAAggggAACCCCAAAKBCRBAAqNmIgQQQAABBBBAAAEEECCAcA0ggAACCCCAAAIIIIBAYAIEkMComQgBBBBAAAEEEEAAAQQIIFwDCCCAAAIIIIAAAgggEJgAASQwaiZCAAEEEEAAAQQQQAABAgjXAAIIIIAAAggggAACCAQmQAAJjJqJEEAAAQQQQAABBBBAgADCNYAAAggggAACCCCAAAKBCRBAAqNmIgQQQAABBBBAAAEEECCAcA0ggAACCCCAAAIIIIBAYAIEkMComQgBBBBAAAEEEEAAAQQIIFwDCCCAAAIIIIAAAgggEJgAASQwaiZCAAEEEEAAAQQQQAABAkjEroFEIqHKykrNmzdPdXV16tGjh6ZPn66KigrF4/GIVUs5CCCAAAIIIIAAAqYJEEBM69hnrPeaa67RfffdpyuvvFLl5eVavHixHnzwQbl/fs8990SsWspBAAEEEEAAAQQQME2AAGJaxz5lvatWrdLw4cN17bXX6q677sqMvO6663T33XdrxYoVGjp0aIQqphQEEEAAAQQQQAAB0wQIIKZ17FPWe+ONN+q2227TunXr1Lt378zI9evXq7S0VLNmzdKtt94aoYopBQEEEEAAAQQQQMA0AQKIaR37lPVOmTIl/S3H5s2bjxnVrVs3jRw5Us8884yvirdu3apnn31WvXr1Ups2bXwdy2AEEEAAAQQQsEtg3759evfdd+X+TtK1a1e7iqdazwIEEM9U4R/o3l7VqlUr1dbWHrPYUaNGqb6+Xu5tWif62bRpk9x/jvx56qmn9LOf/Sz8xbNCBBBAAAEEEAiNwO9+9zv94z/+Y2jWw0LCJUAACVc/Tmo1ffr0kftNh7vx/Ogfd0P6li1btHbt2hPOccstt2j27NnH/fvBOlft1PGk1sfBCCCAAAIIIBBtgU+0W6/pZb344osaM2ZMtIuluqwFCCBZ04XvwFx8A7JmzRpdccUVOk+T1NHpHL6iWRECCCCAAAIIhEZgd2qHlmpB+m4M9+4LfhA4ngABJELXRS72gCxfvlyjR48mgEToOqEUBBBAAAEEciVAAMmVbLTOSwCJUD/dp1zdfvvtLfoULAJIhC4QSkEAAQQQQCDHAgSQHANH5PQEkIg00i3DfQKW+6SrE70H5NVXX9WwYcN8VUwA8cXFYAQQQAABBKwWIIBY3X7PxRNAPFOZMfDqq6/WAw88kH4Turv5a9GiRek3oV911VW6//77fRdBAPFNxgEIIIAAAghYK0AAsbb1vgongPjiCv/ghoYGzZkzR/PmzdOGDRvUvXt3TZ8+XTNnzlRBQYHvAgggvsk4AAEEEEAAAWsFCCDWtt5X4QQQX1z2DSaA2NdzKkYAAQQQQCBbAQJItnJ2HUcAsavfvqslgPgm4wAEEEAAAQSsFSCAWNt6X4UTQHxx2TeYAGJfz6kYAQQQQACBbAUIINnK2XUcAcSufvuulgDim4wDEEAAAQQQsFaAAGJt630VTgDxxWXfYAKIfT2nYgQQQAABBLIVIIBkK2fXcQQQu/rtu1oCiG8yDkAAAQQQQMBaAQKIta33VTgBxBeXfYMJIPb1nIoRQAABBBDIVoAAkq2cXccRQOzqt+9qCSC+yTgAAQQQQAABawUIINa23lfhBBBfXPYNJoDY13MqRgABBBBAIFsBAki2cnYdRwCxq9++qyWA+CbjAAQQQAABBKwVIIBY23pfhRNAfHHZN5gAYl/PqRgBBBBAAIFsBQgg2crZdRwBxK5++66WAOKbjAMQQAABBBCwVoAAYm3rfRVOAPHFZd9gAoh9PadiBBBAAAEEshUggGQrZ9dxBBC7+u27WgKIbzIOQAABBBBAwFoBAoi1rfdVOAHEF5d9gwkg9vWcihFAAAEEEMhWgACSrZxdxxFA7Oq372oJIL7JOAABBBBAAAFrBQgg1rbeV+EEEF9c9g0mgNjXcypGAAEEEEAgWwECSLZydh1HALGr376rJYD4JuMABBBAAAEErBUggFjbel+FE0B8cdk3mABiX8+pGAEEEEAAgWwFCCDZytl1HAHErn77rpYA4puMAxBAAAEEELBWgABibet9FU4A8cVl32ACiH09p2IEEEAAAQSyFSCAZCtn13EEELv67btaAohvMg5AAAEEEEDAWgECiLWt91U4AcQXl32DCSD29ZyKEUAAAQQQyFaAAJKtnF3HEUDs6rfvagkgvsk4AAEEEEAAAWsFCCDWtt5X4QQQX1z2DSaA2NdzKkYAAQQQQCBbAQJItnJ2HUcAsavfvqslgPgm4wAEEEAAAQSsFSCAWNt6X4UTQHxx2TeYAGJfz6kYAQQQQACBbAUIINnK2XUcAcSufvuulgDim4wDEEAAAQQQsFaAAGJt630VTgDxxWXfYAKIfT2nYgQQQAABBLIVIIBkK2fXcQQQu/rtu1oCiG8yDkAAAQQQQMBaAQKIta33VTgBxBeXfYMJIPb1nIoRQAABBBDIVoAAkq2cXccRQOzqt+9qCSC+yTgAAQQQQAABawUIINa23lfhBBBfXPYNJoDY13MqRgABBBBAIFsBAki2cnYdRwCxq9++qyWA+CbjAAQQQAABBKwVIIBY23pfhRNAfHHZN5gAYl/PqRgBBBBAAIFsBQgg2crZdRwBxK5++66WAOKbjAMQQAABBBCwVoAAYm3rfRVOAPHFZd9gAoh9PadiBBBAAAEEshUggGQrZ9dxBBC7+u27WgKIbzIOQAABBBBAwFoBAoi1rfdVOAHEF5d9gwkg9vWcihFAAAEEEMhWgACSrZxdxxFA7Oq372oJIL7JOAABBBBAAAFrBQgg1rbeV+EEEF9c9g0mgNjXcypGAAEEEEAgWwECSLZydh1HALGr376rJYD4JuMABBBAAAEErBUggFjbel+FE0B8cdk3mABiX8+pGAEEEEAAgWwFCCDZytl1HAHErn77rpYA4puMAxBAAAEEELBWgABibet9FU4A8cVl32ACiH09p2IEEEAAAQSyFSCAZCtn13EEELv67btaAohvMg5AAAEEEEDAWgECiLWt91U4AcQXl32DCSD29ZyKEUAAAQQQyFaAAJKtnF3HEUDs6rfvagkgvsk4AAEEEEAAAWsFCCDWtt5X4QQQX1z2DSaA2NdzKkYAAQQQQCBbAQJItnJ2HUcAsavfvqslgPgm4wAEEEAAAQSsFSCAWNt6X4UTQHxx2TeYAGJfz6kYAQQQQACBbAUIINnK2XUcAcSufvuulgDim4wDEEAAAQQQsFaAAGJt630VTgDxxWXfYAKIfT2nYgQQQAABBLIVIIBkK2fXcQQQu/rtu1oCiG8yDkAAAQQQQMBaAQKIta33VTgBxBeXfYMJIPb1nIoRQAABBBDIVoAAkq2cXccRQOzqt+9qCSC+yTgAAQQQQAABawUIINa23lfhBBBfXPYNJoDY13MqRgABBBBAIFsBAki2cnYdRwCxq9++qyWA+CbjAAQQQAABBKwVIIBY23pfhRNAfHHZN5gAYl/PqRgBBBBAAIFsBQgg2crZdRwBxK5++66WAOKbjAMQQAABBBCwVoAAYm3rfRVOAPHFZd9gAoh9PadiBBBAAAEEshUggGQrZ9dxBBC7+u27WgKIbzIOQAABBBBAwFoBAoi1rfdVOAHEF5d9gwkg9vWcihFAAAEEEMhWgACSrZxdxxFA7Oq372oJIL7JOAABBBBAAAFrBQgg1rbeV+EEEF9c9g0mgNjXcypGAAEEEEAgWwECSLZydh1HALGr376rJYD4JuMABBBAAAEErBUggFjbel+FE0B8cdk3mABiX8+pGAEEEEAAgWwFCCDZytl1HAHErn77rpYA4puMAxBAAAEEELBWgABibet9FU4A8cVl32ACiH09p2IEEEAAAQSyFSCAZCtn13EEELv67btaAohvMg5AAAEEEEDAWgECiLWt91U4AcQXl32DCSD29ZyKEUAAAQQQyFaAAJKtnF3HEUDs6rfvagkgvsk4AAEEEEAAAWsFCCDWtt5X4QQQX1z2DSaA2NdzKkYAAQQQQCBbAQJItnJ2HUcAsavfvqslgPgm4wAEEEAAAQSsFSCAWNt6X4UTQHxx2TeYAGJfz6kYAQQQQACBbAUIINnK2XUcAcSufvuulgDim4wDEEAAAQQQsFaAAGJt630VTgDxxWXfYAKIfT2nYgQQQAABBLIVIIBkK2fXcQQQu/rtu1oCiG8yDkAAAQQQQMBaAQKIta33VTgBxBeXfYMJIPb1nIoRQAABBBDIVoAAkq2cXccRQOzqt+9qCSC+yTgAAQQQQAABawUIINa23lfhBBBfXPYNJoDY13MqRgABBBBAIFsBAki2cnYdRwCxq9++qyWA+CbjAAQQQAABBKwVIIBY23pfhRNAfHHZN5gAYl/PqRgBBBBAAIFsBQgg2crZdRwBxK5++66WAOKbjAMQQAABBBCwVoAAYm3rfRVOAPHFZd9gAoh9PadiBBBAAAEEshUggGQrZ9dxBBC7+u27WgKIbzIOQAABBBBAwFoBAoi1rfdVOAHEF5d9gwkg9vWcihFAAAEEEMhWgACSrZxdxxFA7Oq372oJIL7JOAABBBBAAAFrBQgg1rbeV+EEEF9c9g0mgNjXcypGAAEEEEAgWwECSLZydh1HALGr376rJYD4JuMABBBAAAEErBUggFjbel+FE0B8cbXc4D179mju3Lmqra3VsmXLtHnzZn3729/Wb3/722MmSSQSqqys1Lx581RXV6cePXpo+vTpqqioUDwebzbez1gv1RBAvCgxBgEEEEAAAQRcAQII14EXAQKIF6UcjHn33XfVu3dvnX766Ro9erSefPLJEwaQa665Rvfdd5+uvPJKlZeXa/HixXrwwQfl/vk999zTbHV+xnopiwDiRYkxoRJwnGOXk0qFaoksBgEEEIiqAAEkqp1t2boIIC3r6flsBw4c0NatW3XmmWeqoaFBhYWFxw0gq1at0vDhw3Xttdfqrrvuypz/uuuu0913360VK1Zo6NCh6T/3M9brQgkgXqUYl0+BYh3Q2bEdqon3lBOPSbGY5AaRVEqpREJKJHRBYoPWJIu102mdz6Uy92cIFKf2a5C2qyZ2ZuNIJ9b4f1PJzJFlyY1ao5LI9zJt4WxXjXNmk8NhhUMetljwL445AgQQc3qVz5USQPKpf2juTwsgN954o2677TatW7cu/Y3J4Z/169ertLRUs2bN0q233pr+Yz9jvZZNAPEqxbh8CXSON6gyUa3uqd26o2SyqjsPU6qosHE5DQk5+w9q/M5VmrG7SnXqoApdGPlfXPPVi5Od1w2Slann1UMfq7KwXNVt+ss59I1Wyv0WK5HQhINrVVFfE/leNrMoGqvnWveTYoe+3Us2BusJB962wuJkryuOD1aAABKst6mzEUBC0LlPCyBTpkxJf8vh7hE5+qdbt24aOXKknnnmmfRf+RnrtWwCiFcpxuVLYEybHfrZ3irFlVJCjv6tbKqeGDJaqZhUsF/68sqXdeMrDx/6e2m2ylXjnJGv5TLvpwiUx7fopoYXMr2c2/0SLTh1hOR+oVWf0MTNr2jGh09Z0cvygi26qb7JovKsy7TgtBFpvdhB12K5Zmz6qxUW/EtjlgABxKx+5Wu1BJB8yR8x76cFEPf2qlatWqU3qx/9M2rUKNXX16dvvXJ//Iw9XtmbNm2S+8+RP2vWrNEVV1yh8zRJHZ3OIdBiCQg0Fyg48wxd1GqDKtb/j+KplBKOo5/96BL9/eJBGvPkWs2999HGP5ejOTpXVU5PCEMqEO/cWRPjG3X9R083/mLtOJr1+Wl6cshoXbK8Vv++4A/W9DLetYsmFGxsChmOox9f0mhx6bJa3fo3eyxCermyrBMIEEC4NLwIEEC8KOV4zKcFkD59+sj9psPdeH70j7shfcuWLVq7dm36r/yMPV5Jt9xyi2bPnn3cagkgOb4Isjx95h7xWA857u0Z7v3yR9ym4d43n977kOqsnSrKcpZwHxbv30d7+5ToAmelbn+q8Zcy99uPA+OL1Oq5A4ollf5FdnbZVNXUHAx3MZavrqBXTx3sXqIy53XNfuGhxrARc7Ti/O4a/tIGxZONoeT2wd/Q86817QmJIlu8b28d6FmiMq3Sz6saLZIxR6vLztDgmg8yFv9x9jf03OvRtohif6NcEwEkyt1tudoIIC1nmfWZ+AYkazqrD3TDR6UWpu+Xn9v2QlV3HCynsFByN2EnU1JDg8bvfk0z9jynOqejKlLjIrn3IT6gr/b27aytQwv1hU8Wac6vH02HjsM/7i+wMy6fqhcLRqv4v2usvmbCXnz87P7a069YW4cW6NI9C3X7XY8d28tvTtXi+Ch1/MOSsJdzUuuLDRuoj/t30kfDY5q6u1qz5z4p56jreubXpmqxM1LtH3nppObiYARaUoAA0pKa0T0XASQEvWUPSAiaYOASylIf6GbVZO6X/8Wgr+vpfucqUeSkf1H53Nu1mrXy8N4HR7NVFsm9DwVn9VD9mSXa1betdgyS5v3pfo1f/namo1VDBuq6i/9Znd+qV9HTLxvYaXuW7AaQT/oUa+uQAqVG79ZTd/1apQu3ZgAWn1eqf/rq99V1RUod/hjxADJkoPb066RtQ+IqGL1Dj99xr0oXbstYLBzdV9/90jXqujqhtn8hgNjzb0n4KyWAhL9HYVghASQEXfi0AOI+5er222/39BQsP2O9ls0mdK9S+Rk3uesnuv6jZzL3y//o/7lc/ztpmC598VXdOe9PmfvlK93NvBsPPRkqP0vN2azuvgGnuKMaunXS2Po1+mntH9N1Z74BcRz9x6Bv6AX1UWJNUzDJ2YI4cdYCBT26q757F+0ubaML972iX/yl8Za6I3t50/ipqnGGKF69POt5TDjwcLBOW3zyin7xP8da3FI+VTUaJGfxChNKYo2WCBBALGn0SZZJADlJwJY4/NMCiPsELPdJVyd6D8irr76qYcOGpZfhZ6zXdRNAvErlZ1xsxNm6oNXbumlp4y/dyZi09cL26rpwT2bvw08nT9OS5BAVLDj2QQb5WXXLzuoUtpLTukgTnTrN2LUg843Qsk59dc6utU1PVGo3Xn/f26VlJ+dsLSoQL+4kp0MHXRR7TxXvPpYJ1ot6DtSY99/IBOo7Tv285n/UtkXnDtvJTmSxuPtAlW84wqLrFM3f1j5sy2c9FgsQQCxuvo/SCSA+sFp66K9//Wvt3LlTyWRSN998czpofPWrX01Pc8kll2SCxdVXX60HHngg/Sb0MWPGaNGiRek3oV911VW6//77my3Lz1gv9RBAvCjlb4xz7lDtGNheYxO1mvvQQ+mNqYd/3DAy8wdf01PtxqjrqnoV/TWitx85jiam3tfM1NKmsOHuiSnqqwn712rGvoWZP4/CU7CO++CBw01PJZVKplSWrNOalHkv6nPDpBskKw682OxRvNXFQzRh20rN2PRkpHr5af/laLR4XxUHFjVZnP4lVXcarInbV+r6LYeeFMbT3fL3H2BmPq4AAYQLw4sAAcSLUo7G9OrVS++9995xz+4GjO985zvpv3O/IZkzZ47mzZunDRs2qHv37po+fbpmzpypgoKCZsf7GeulLAKIF6X8jYkPHqA9fTtp+8AC/frpBzRxxZuZxSw6t1RX/OM16vyao85v7lfshVfyt9Aczty4F2ax4pISkubovGaP2k2HE7nhpPHvjX0PSCyuzrGDmtNQpR6p3U0PHnD/G3D4re8H6zVhz+uasXehkS/qK9MHujnVtK+psmiMqgv7NF49qZQmHHxHFfVur93HKhvcSw//Phxj4b6YsdUhi2RSExrWpV9CaIOFBy6GhEiAABKiZoR4KQSQEDcnDEsjgIShCydeg/sOjOQpxRqbekuzVjx8zP3y7j3iiwsHq3DTbiXeeifcxWS5uqange0+JnwcPuXhEFKnjsa+CT3WurXK4h/qZ3v+nvlE3N3b8myf0UoWOIrVp/S5tct0w5t/NvaXUlt66eVSx8KLEmPCKEAACWNXwrcmAkj4ehKqFRFAQtWOYxYTa9dOE2MbNGN305vAX+7SX+dueyvzS+odJf+gqlR3JXbuCncxJ7G69G1J2v6pT/lyvylZI/NuSzrMEu9SIpUUa4L7aOXNh94G7jhyHzzw2NgR+soLK3TH7w69O8Pg23Js6KXXSx0Lr1KMC5MAASRM3QjvWggg4e1NKFZGAAlFG064iImqa773ocMEVbcZoAn732oWSirj52tBsnu4i2F1nyqQfkJUj8ZN9BcUrNHshYdfTidtHtdRp72wO/PgAfebryWLeekilxQCCAQvQAAJ3tzEGQkgJnYtwDUTQALE9jmVNXsffLpEdXhBaS/t79UYQLYNLtKE/Uv0y3mPKNbswQOO/vU739LCwnPV9Te8dDGq1wJ1IRBmAQJImLsTnrURQMLTi1CuhAASyrakF8U94uHtTS5WVtD9TDV0bwwgO/u1047B0oOP3Ktxy5r29jw/qp+++5WrVfJ69F/UlwtjzokAAicvQAA5eUMbzkAAsaHLJ1EjAeQk8AI4lHvEA0AOyRTpFy527pReTf3pxSpPvK6blzTehnX4J+E4+rfzLtfi2CBpycqQrJxlIICATQIEEJu6nX2tBJDs7aw4kgBiRZsp0gABp6hIsTat0yt135Vx/fb5mQcNLD2lv8776IgHDxRfrPm7GsMKPwgggECQAgSQILXNnYsAYm7vAlk5ASQQZiZB4LMFHEdOPK6JyXdVkXip6eV0nSbpubYDNP6TN5o9eCAKL138bBRGIIBA2AQIIGHrSDjXQwAJZ19CsyoCSGhawUIQEA8e4CJAAIGwCxBAwt6hcKyPABKOPoR2FQSQ0LaGhVkowIMHLGw6JSNgmAABxLCG5Wm5BJA8wZsyLQHElE6xTlsEePCALZ2mTgTMFCCAmNm3oFdNAAla3LD5CCCGNYzlIoAAAgggkEcBAkge8Q2amgBiULPysVQCSD7UmRMBBBBAAAEzBQggZvYt6FUTQIIWN2w+AohhDWO5CCCAAAII5FGAAJJHfIOmJoAY1Kx8LJUAkg915kQAAQQQQMBMAQKImX0LetUEkKDFDZuPAGJYw1guAggggAACeRQggOQR36CpCSAGNSsfSyWA5EOdORFAAAEEEDBTgABiZt+CXjUBJGhxw+YjgBjWMJaLAAIIIIBAHgUIIHnEN2hqAohBzcrHUgkg+VBnTgQQQAABBMwUIICY2begV00ACVrcsPkIIIY1jOUigAACCCCQRwECSB7xDZqaAGJQs/KxVAJIPtSZEwEEEEAAATMFCCBm9i3oVRNAghY3bD4CiGENY7kIIIAAAgjkUYAAkkd8g6YmgBjUrHwslQCSD3XmRAABBBBAwEwBAoiZfQt61QSQoMUNm48AYljDWC4CCCCAAAJ5FCCA5BHfoKkJIAY1Kx9LJYDkQ505EUAAAQQQMFOAAGJm34JeNQEkaHHD5iOAGNYwlosAAggggEAeBQggecQ3aGoCiEHNysdSCSD5UGdOBBBAAAEEzBQggJjZt6BXTQAJWtyw+QgghjWM5SKAAAIIIJBHAQJIHvENmpoAYlCz8rFUAkg+1JkTAQQQQAABMwUIIGb2LehVE0CCFjdsPgKIYQ1juQgggAACCORRgACSR3yDpiaAGNSsfCyVAJIPdeZEAAEEEEDATAECiJl9C3rVBJCgxQ2bjwBiWMNYLgIIIIAAAnkUIIDkEd+gqQkgBjUrH0slgORDnTkRQAABBBAwU4AAYmbfgl41ASRoccPmI4AY1jCWiwACCCCAQB4FCCB5xDdoagKIQc3Kx1IJIPlQZ04EEEAAAQTMFCCAmNm3oFdNAAla3LD5CCCGNYzlIoAAAgggkEcBAkge8Q2amgBiULPysVQCSD7UmRMBBBBAAAEzBQggZvYt6FUTQIIWN2w+AohhDWO5CCCAAAII5FGAAJJHfIOmJoAY1Kx8LJUAkg915kQAAQQQQMBMAQKImX0LetUEkKDFDZuPAGJYw1guAggggAACeRQggOQR36CpCSAGNSsfSyWA5EOdORFAAAEEEDBTgABiZt+CXjUBJGhxw+YjgBjWMJaLAAIIIIBAHgUIIHnEN2hqAohBzcrHUgkg+VBnTgQQQAABBMwUIICY2begV00ACVrcsPkIIIY1jOUigAACCCCQRwECSB7xDZqaAGJQs/KxVAJIPtSZEwEEEEAAATMFCCBm9i3oVRNAghY3bD4CiGENY7kIIIAAAgjkUYAAkkd8g6YmgBjUrHwslQCSD3XmRAABBBBAwEwBAoiZfQt61QSQoMUNm48AYljDWC4CCCCAAAJ5FCCA5BHfoKkJIAY1Kx9LJYDkQ505EUAAAQQQMFOAAGJm34JeNQEkaHHD5iOAGNYwlosAAggggEAeBQggecQ3aGoCiEHNysdSCSD5UGdOBBBAAAEEzBQggJjZt6BXTQAJWtyw+QgghjWM5SKAAAIIIJBHAQJIHvENmpoAYlCz8rFUAkg+1JkTAQQQQAABMwUIIGb2LehVE0CCFjdsPgKIYQ1juQhEUKA4tV+DtF01zhknrK4s9YHWqEQ7ndYRFKAkBMwRIICY06t8rpQAkk99A+YmgBjQJJaIQIQF3PBRqYXqod2a45yv6oLekhNrqjiV1ISG9ZqZejSmEmgAACAASURBVEl16qgKXUgIifD1QGnhFyCAhL9HYVghASQMXQjxGgggIW7OZyyt2afGjtN8dCqV/t98amxuf21ZeZmzWTcnFymulBJyNLfTJD3X4WzJvaYTCY3/+HXN+Lg68/ezVfap35TY4kadCORLgACSL3mz5iWAmNWvwFdLAAmcvEUmbPrU+GNVxi9QVWGpnEMhJOWGj2RKExPrVJFYYsSnxtyC0yKXhZEnibVurYnxjZqx57lMyLhtxLf0bK9RmrJuuWatfDjz53eUTNb8HR2NrJNFIxAVAQJIVDqZ2zoIILn1Nf7sBBAzW1ge26ybEk2fGt/RdYqqOg9NF+M0JDRhx0pdv3PBoV/cpNkqD+2nxp96C04qma6JW3DMvE69rDp+yilS12KNjb2jn7z2iOKplBKOo+cHD9BFr72Z+d+/6Ps1VZ0yXE7NCi+nZQwCCORIgACSI9iInZYAErGGtnQ5BJCWFg3mfLEOHTSpYKOu3z4/8+nwLWOm6tnSUfrCm7X62dI/Zv58js5VldMzmIVlMcsxt+B0nKjn2g+SYrGmW3Ayn46HO0xlUb71hxT0PksHe5Zo+4DWunD/Mt35339UPNl4C6H7k4g5uuEr07QoPiL9v9s/8pL1ZgAgkE8BAkg+9c2ZmwBiTq/yslICSF7YT3rSgu5nKnF6icqcN3XT0ocynxK/MKKvxr26ttmnxtVrT3q6nJ4g1ratJjp1x9yCM7/7SP3Du7X6yepHjAlTOYWK6Mnj/Uq1r08XbR1SqP2j9uqZe3+lfi9syVRbW9ZTX5v6Q3V9pXGfU+ff1kRU4jhlHd7bdWhPlz2FU2mYBQggYe5OeNZGAAlPL0K5EgJIKNvymYuKn91fn5QWa9uQAn3u40Wae++jijXerZT+SX9qfOk01Tgj1PZ/wv2JcfoWnFM6N96Cs/pPTbfgnD1AF71+6BYcOaos/YoWrD/i6UifqRStAZl9MrEzT1hYWXKjcY+qLejVUwe7l2jHgDa6cH+t7vjDQ82/AXEar+XFBY3fgLR7NNzXc7ZXXbq/znbVxHrIiTlSPN50KvcboVRSFyQ2aE2qs3aqKNtpOA6BkxYggJw0oRUnIIBY0ebsiySAZG+XzyNjQwZqT/9O2josrvbnbNXjc+7Rmc/vyixp8Xml+qevfF9dV6TU4eEl+VzqZ85dUNpL+3t10faBRRq/d6nu/P8ePuYX0B9fMk2L4+EPU59ZbJYDinVAlann1UMfq7KwTNWt+jb/BTWR0ISDa1VRX6M6dTDqUbXxLiVSl84aF1uvH79xxB6QQQN00ZojA+hXVdV1mFIvr8pSMbyHHflQibltLlR1p8FyCgulgkMhpCGh8btWa8buKm1wOmpGahyPIg5vOyO/MgJI5FvcIgUSQFqEMbonIYCY2dt439460LNEO/q30kWfLNOdvzvqvnnH0Y2Tp2mJM1SFf1sW6iLjg/ppb2mxPhpWqNTo3XrqrrtVunBbZs1LL+ily7/xA3V9Ver0u3CHqVxBH/3Qgbmnf0lV3UY0Pqq2IamJW17RjA+fMuKhA0cbpZ+CFduoGZ80PQXr9iHf0Pzuo/QP7y/Xj19vugXvjuJJmr+rOFfMeTuv+7jsm1WTudXwFwO+rqcHnKv6tjE5Kenzby3Tja80PQ2MRxHnrVVMLIkAwmXgRYAA4kXJ4jEEEDObH+/aRSopPuZT4xf6DtS4tW803sbkvlPhzC/p7x+E+3YN9xuQA2eVpL8BuWjvMt35X8eGqR9/eZpq4sPV5rGlZjbsJFcd79gx/aja67f/rfGX1EMB88mho3XJimX6+YJD+4DkKOwPHTiaokwf6OZU0y/fcztMUHW7genHSqcSSU345I1m4SSqv3xPLtmj67c9m+nvj/7pcj0+eYgueXGF7nzg0DdD7q2IvS/TgnePuD3rJK8tDkfArwABxK+YneMJIHb23XPVBBDPVKEamP7U2N24vXdh06em/b+mqlNH6OIPXlHFur8Ys3H7hI9hPeYWHHv3gBSceUbjQwfib+mmlw6FjZijV87roZFL69K3rLmh5Lbh39LCFQ2hulY/azHNHsOs8477xLaJqfc1U0uNeKfNZ9V7or+PDx6gstbv6Ke1D6c/QEjGpO0XtlOXhZ/ISSrd3598cZqWaJiK/vpyttNwHAInLUAAOWlCK05AALGizdkXSQDJ3i6fRx7zqXHbC1XddkDjkty3R+9/WxX7XjDilpzjvohu2LfkPgVrynu1+rH7bohDb8k27dP9lrpG3CdF7e9doq1DWmnyvhrdcf8jxzx04EdXXK4XC89Ryf817ylRvIhSio04W7sGdFR5crkq/9x8I74bRm760SV6pMN4dV2ZUNu/RHMjfkv9+8J5citAAMmtb1TOTgCJSidzVAcBJEewOT5tlD41Pu57QNoNTO9vSCWTmrBnzRGP6LXzPSDunp/9pV20bXAr7Rm9T0/f/ysNfOHDzFWWflTttGvV5ZWYSh40L4Dk+F8XI04fH9BX+3p31vYBhbrr77/RxNVvZNa95Pze+tZ3vqfi1wpU8sYBFSyoNaImFhlNAQJINPva0lURQFpaNGLnI4CY29CofGocpTCVq6vp8C1YH5e215j9r+gXj/8hfZvO4Z/0npAp7pPChqnoKW7PyVUfcnneeLdTpa6dNdZZm3kc9ZH9vXnsVC0qGqqiD3YrsebtXC6FcyPwqQIEEC4QLwIEEC9KFo8hgFjc/BCVHpUwlStSdxO607GDLnLeU8X7/5vZqLzorIEa855ZDx3IlZHp5z3eCzlfLumvc7e/lbkF8Y4uU1SV6qHEjh2ml8v6DRYggBjcvACXTgAJENvEqQggJnaNNdsm4BQUaGJsgyoOLMr8MlrZ/RJVdx2miVtXasaGx63fJ2P6NTFRdZqZWprp49z241Xdpr8m7H9bMz6ubup7/HwtSHY3vVzWb7AAAcTg5gW4dAJIgNgmTkUAMbFrrNk2gaMfOlBZNEbVRf0aGdx9MvXvHBFO7NwnY/I10fgekMVyH66bkDTnqKeBHX4K2OG/n61y1ThnmFwyazdYgABicPMCXDoBJEBsE6cigJjYNdZsmwD7ZKLdcfob7f5GrToCSNQ6mpt6CCC5cY3MWQkgkWklhURcgH0y0W4w/Y12f6NUHQEkSt3MXS0EkNzZRuLMBJBItJEiEEAAAQQQCESAABIIs/GTEECMb2FuCyCA5NaXsyOAAAIIIBAlAQJIlLqZu1oIILmzjcSZCSCRaCNFIIAAAgggEIgAASQQZuMnIYAY38LcFkAAya0vZ0cAAQQQQCBKAgSQKHUzd7UQQHJnG4kzE0Ai0UaKQAABBBBAIBABAkggzMZPQgAxvoW5LYAAkltfzo4AAggggECUBAggUepm7mohgOTONhJnJoBEoo0UgQACCCCAQCACBJBAmI2fhABifAtzWwABJLe+nB0BBBBAAIEoCRBAotTN3NVCAMmdbSTOTACJRBspAgEEEEAAgUAECCCBMBs/CQHE+BbmtgACSG59OTsCCCCAAAJREiCARKmbuauFAJI720icmQASiTZSBAIIIIAAAoEIEEACYTZ+EgKI8S3MbQEEkNz6cnYEEEAAAQSiJEAAiVI3c1cLASR3tpE4MwEkEm2kCAQQQAABBAIRIIAEwmz8JAQQ41uY2wIIILn15ewIIIAAAghESYAAEqVu5q4WAkjubCNxZgJIJNpIEQgggAACCAQiQAAJhNn4SQggxrcwtwUQQHLry9kRQAABBBCIkgABJErdzF0tBJDc2Z7wzMuWLdPvfvc7VVVVaf369WrXrp0GDx6sn/zkJ7r44oubHZdIJFRZWal58+aprq5OPXr00PTp01VRUaF4PJ71WK9lE0C8SjEOAQQQQAABBAggXANeBAggXpRaeMzXv/51Pf/88/ra176mUaNGac+ePXrwwQe1evVq3Xvvvfre976XmfGaa67RfffdpyuvvFLl5eVavHhxeqz75/fcc0+zlfkZ67UkAohXKcYhgAACCCCAAAGEa8CLAAHEi1ILj1m0aJHOOeccFRUVZc68b98+jRgxQh999JG2bNmigoICrVq1SsOHD9e1116ru+66KzP2uuuu0913360VK1Zo6NCh6T/3M9ZPOQQQP1qMRQABBBBAwG4BAojd/fdaPQHEq1QA466//nrdeeedev/999O3Wt1444267bbbtG7dOvXu3TuzAve2rdLSUs2aNUu33npr+s/9jPVTCgHEjxZjEUAAAQQQsFuAAGJ3/71WTwDxKhXAuKlTp+rPf/6zdu7cmd4XMmXKlPS3HJs3bz5m9m7dumnkyJF65pln0n/nZ6yfUgggfrQYiwACCCCAgN0CBBC7+++1egKIV6kcj1uzZk36FqwvfelLevTRR9OzubdXtWrVSrW1tcfM7u4dqa+vT9965XfsiUrZtGmT3H+O/HHXdcUVV+g8TVJHp3OOFTg9AggggAACCJgsQAAxuXvBrZ0AEpz1CWfatWuXysrK0r/8u9949OzZMz22T58+cr/pcDeeH/3jbkh394qsXbvW99gTLeSWW27R7Nmzj/vXBJAQXCgsAQEEEEAAgZALEEBC3qCQLI8AkudGuJvP3dunXn755fTtVBdddFFmRXwD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8NG2BZColDoCBAgQIEBAALEGIgICSESp4RoBpOHha50AAQIECCQFBJAkWKPlAkijg4+2LYBEpdQRIECAAAECAog1EBEQQCJKDdcIIA0PX+sECBAgQCApIIAkwRotF0AaHXy0bQEkKqWOAAECBAgQEECsgYiAABJRarhGAGl4+FonQIAAAQJJAQEkCdZouQDS6OCjbQsgUSl1BAgQIECAgABiDUQEBJCIUo9rNm7cWA4++OAdbvXcc88tq1ev3vpv77//frn++uu7v3vllVfKgQceWBYvXlwuvfTSsttuu03aRqY22pIAEpVSR4AAAQIECAgg1kBEQACJKPW4ZiKAnHrqqeWMM86YtPXDDjusHHfccVv/7oILLii33HJLOfvss8vxxx9fHnrooXLbbbeV+vc333zzpOdmaqMtCSBRKXUECBAgQICAAGINRAQEkIhSj2smAsgVV1xRrr766mm3/uSTT5ajjjqqXHTRReWGG27YWrds2bJy4403lscff7wceeSR3d9najPtCCAZLbUECBAgQKBtAQGk7flHuxdAolI9rNs2gNQQUh977rnnlD3Uf7v22mvLiy++OOmUrZdeeqkccsgh5fLLLy/XXHNN97xMbaYVASSjpZYAAQIECLQtIIC0Pf9o9wJIVKqHdRMBZK+99iqbN2/utlxPvbr44ovLhRdeuHVPCxcu7N7leP3116fsfd999y3HHHNMue+++7p/y9RmWhFAMlpqCRAgQIBA2wICSNvzj3YvgESlelj38ssvl3POOacsWrSoHHTQQeXVV1/tLjJ/7LHHyiWXXNJddF4f9fSq3Xffvaxbt27K3o899tjy3nvvdadeZWuna+W1114r9c+2jw0bNpQzzzyz/Hc5qXzoP/6zhwo2RYAAAQIECIybgAAybhPtTz8CSH9c01utd7A68cQTy5o1a8qzzz5bDj300O5PfaejXni+/aNekP7GG2+U559/vvunTO10B3fllVeWq666aof/LICkR+oJBAgQIECgOQEBpLmRz6hhAWRGbP150r333ltOOeWUsmrVqnL++ed7B6Q/zLZKgAABAgQI9ElAAOkT7JhtVgAZooE+8cQT3V2v6oXl9QLzzHUdmdpMy64ByWipJUCAAAECbQsIIG3PP9q9ABKVGkDdPffcU04//fTuepD6gYQ1hFx33XWhu2BlajOtCCAZLbUECBAgQKBtAQGk7flHuxdAolI9rHvzzTfL3nvvPWmL7777blmwYEF56qmnygsvvNB94nm9A1a909V0nwOyfv36Mn/+/G47mdpMKwJIRkstAQIECBBoW0AAaXv+0e4FkKhUD+tOO+208s4773SfeD5v3rzuLlh33HFH905Hfcfjsssu27q3pUuXdteE1E9CrwFl7dq13SehL1mypKxcuXLSUWVqo+0IIFEpdQQIECBAgIAAYg1EBASQiFKPa2699dYucDzzzDOlvhtSPw+k3la3fsJ5vQh928eWLVvKihUrutOyNm3a1AWWxYsXl+XLl5c5c+bMuDbakgASlVJHgAABAgQICCDWQERAAIkoNVwjgDQ8fK0TIECAAIGkgACSBGu0XABpdPDRtgWQqJQ6AgQIECBAQACxBiICAkhEqeEaAaTh4WudAAECBAgkBQSQJFij5QJIo4OPti2ARKXUESBAgAABAgKINRAREEAiSg3X1LtunXDCCeWI8l9lbvlQwxJaJ0CAAAECBP6dwNvlf8v/lEfLmjVrurt3ehDYkYAAYl3sVOCmm27qPofEgwABAgQIECAQFbjzzjvL17/+9Wi5usYEBJDGBp5t94EHHignn3xyqbcOPvroo7NPV99HgQ0bNpQzzzyz1C/yhx9+eB/3ZNNZAbPJig2u3mwGZ53dk9lkxQZTn51L/WDljRs3loULF5Z99tlnMAdpLyMnIICM3MgGe8AT14CsW7eu+6wSj+ERMJvhmcX2R2I2ZjO8AsN7ZF43wzkbcxnOuYz6UQkgoz7BPh+/Lzx9Bt6FzZvNLuD1+alm02fgXdi82ewCXp+fajZ9Bp7h5s1lhnCetlMBAcQC2amALzzDu0DMxmyGV2B4j8zrxmyGV2A4j8xrZjjnMupHJYCM+gT7fPy+8PQZeBc2bza7gNfnp5pNn4F3YfNmswt4fX6q2fQZeIabN5cZwnmad0CsgZkLvPbaa2XVqlVlyZIlZf/995/5hjyz5wJm03PSnm3QbHpG2fMNmU3PSXu2QbPpGWVPN2QuPeW0sf8X8A6IpUCAAAECBAgQIECAwMAEBJCBUdsRAQIECBAgQIAAAQICiDVAgAABAgQIECBAgMDABASQgVHbEQECBAgQIECAAAECAog1QIAAAQIECBAgQIDAwAQEkIFR2xEBAgQIECBAgAABAgKINbBDgffff79cf/31ZfXq1eWVV14pBx54YFm8eHG59NJLy2677UathwKbN28uP/zhD8u6devKY489Vl5//fXyjW98o9x+++1T9pKZS6a2h+2M1abqPO68887yhz/8obz00ktl7ty55Ygjjijf+973ysknnzyp14x3pnasQHvYzIYNG8pVV13VvW7qbUI/8IEPlEMOOaScddZZ5Zvf/GbZY489tu4t452p7WE7Y72p+vo56aSTuh6fe+65cthhh5nNLEx848aN5eCDD97hns8999zu+/3EI/M6yNTOQtt2OaQCAsiQDma2D+uCCy4ot9xySzn77LPL8ccfXx566KFy2223lfr3N99882wf3ljtf+KbQv2clU9+8pPlt7/97bQBJDOXTO1YgfawmTPOOKM8+OCD5fTTTy/HHntsqWGxvg6eeuqp8rOf/az7QXfikfHO1PawnbHa1O9///suuH/6058u8+bNK/WHoLVr15Zf/vKX5Qtf+EK59957zWYIJv7Pf/6zHHXUUd0vst5+++0pASTzWsjUDkHrQ3cIE99rTj311FK/tm37qKHwuOOO85oZuqmN7wEJIOM72xl39uSTT3bfMC666KJyww03bN3OsmXLyo033lgef/zxcuSRR854+544WeAf//hH+etf/1oOOOCAsmXLlvLBD35whwEkM5dMrXlML1B/oP3Upz416bfp7777bjn66KPLX/7yl/LGG2+UOXPmlIx3ptZs8gLf+ta3ul+SPP300+VjH/uY2eQJe/qM6667rvzkJz8pX/va17r/3fYdkMxrIVPb0wbGaGMTAeSKK64oV1999bSdZawztWNEqZUeCAggPUAct03UL07XXnttefHFFye9XVtPQamnOFx++eXlmmuuGbe2h6KfnQWQzFwytUPR+IgdxHe+853yox/9qLz88svd6YkZ70ztiLEMxeHWd0XqqaIPP/xw9+5IxjtTOxTNDvlB/OlPfyqf+MQnyk033VTqf9dT5rYNIBnvTO2Qs8za4W0bQKpnfey5555TjidjnamdtcbteCgFBJChHMvsHtTChQu7dznqtQjbP/bdd99yzDHHlPvuu292D3JM976zAJKZS6Z2TCn72tZXv/rV8utf/7r8/e9/764LyXhnavvaxJhs/J133in1Tz2955FHHikXXnhh9y7i888/3/1wlfHO1I4JX1/bqKf61HcJ6ym8NXxs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\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "coords_found = peakFind.peakFind2D(simIm, 0.5)\n",
+    "\n",
+    "fg, ax = plt.subplots(1,1)\n",
+    "ax.imshow(simIm)\n",
+    "_ = ax.scatter(coords_found[:,1],coords_found[:,0],c='r',marker='x')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Use Gaussian fitting for sub-pixel fitting\n",
+    " - Each peak is fit to a 2D Gaussian function\n",
+    " - The average of the sigma values is printed"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4XuydCZhUxdX+jwsRUNkkAi6ICyiCiGhQQAQTEDCigmjcooIYcQU3BE0+IPkrilHEBXEDYhQFUaKggIgIZMSNCAiiLDLiwgRBYJQlDsj/ecvcSU9Pd9+6XdW3b9d963l8vnxM3XOrfnX63Hpr3WP37t27hYkESIAESIAESIAESIAESIAEQiCwBwVICJT5ChIgARIgARIgARIgARIgAUWAAoSOQAIkQAIkQAIkQAIkQAIkEBoBCpDQUPNFJEACJEACJEACJEACJEACFCD0ARIgARIgARIgARIgARIggdAIUICEhpovIgESIAESIAESIAESIAESoAChD5AACZAACZAACZAACZAACYRGgAIkNNR8EQmQAAmQAAmQAAmQAAmQAAUIfYAESIAESIAESIAESIAESCA0AhQgoaHmi0iABEiABEiABEiABEiABChA6AMkQAIkQAIkQAIkQAIkQAKhEaAACQ01X0QCJEACJEACJEACJEACJEABQh8gARIgARIgARIgARIgARIIjQAFSGio+SISIAESIAESIAESIAESIAEKEPoACZAACZAACZAACZAACZBAaAQoQEJDzReRAAmQAAmQAAmQAAmQAAlQgNAHSIAESIAESIAESIAESIAEQiNAARIaar6IBEiABEiABEiABEiABEiAAoQ+QAIkQAIkQAIkQAIkQAIkEBoBCpDQUPNFJEACJEACJEACJEACJEACFCD0ARIgARIgARIgARIgARIggdAIUICEhpovIgESIAESIAESIAESIAESoAChD5AACZAACZAACZAACZAACYRGgAIkNNR8EQmQAAmQAAmQAAmQAAmQAAUIfYAESIAESIAESIAESIAESCA0AhQgoaHmi0iABEiABEiABEiABEiABChA6AMkQAIkQAIkQAIkQAIkQAKhEaAACQ01X0QCJEACJEACJEACJEACJEABQh8gARIgARIgARIgARIgARIIjQAFSGio+SISIAESIAESIAESIAESIAEKEPoACZAACZAACZAACZAACZBAaAQoQEJDzReRAAmQAAmQAAmQAAmQAAlQgNAHSIAESIAESIAESIAESIAEQiNAARIaar6IBEiABEiABEiABEiABEiAAoQ+QAIkQAIkQAIkQAIkQAIkEBoBCpDQUPNFJEACJEACJEACJEACJEACFCD0ARIgARIgARIgARIgARIggdAIUICEhpovIgESIAESIAESIAESIAESoAChD5AACZAACZAACZAACZAACYRGgAIkNNR8EQmQAAmQAAmQAAmQAAmQAAUIfYAESIAESIAESIAESIAESCA0AhQgoaHmi0iABEiABEiABEiABEiABChA6AMkQAIkQAIkQAIkQAIkQAKhEaAACQ01X0QCJEACJEACJEACJEACJEABQh8gARIgARIgARIgARIgARIIjQAFSGio+SISIAESIAESIAESIAESIAEKEPpA1gS2bdsmTz/9tEydOlU+/vhj2bhxo+yzzz5y6KGHysknnyw9e/aU3/72t7Lnnntm/Y6oPTh+/Hjp3bu3DBkyRIYOHRq14slDDz0kjz/+uKxatUp+/PFH6dChg7z99ttyxRVXyN/+9jeZM2eOdOzYMdRyFxcXy+GHH15ellBfzpfFigBjEmOSbYcPM3Y2atRIvvjiC9m9e7ftatAeCUSOAAVI5JqkMAq0YMEC6dWrl3zzzTdStWpVad26tRx00EGyY8cOWblypSxbtkxVpEWLFrJ48eLCqJRGKaMsQF5++WU577zzpHbt2vKb3/xG9t13XznmmGNk0KBBaQVIGB88ChANx2IWYwKMSdEbFIlqTAribLYEiE4cDCMeB6l7VPPqsIxq2Vmu/xGgAKE3BCawaNEiadOmjfznP/+R22+/Xe644w7Zf//9K9hBgHjggQdk3Lhx8v333wd+R1Qf2LJli6xbt07q1q2r/otSuuyyy+Tvf/+7zJ49W379619XKBrKjLI3bNhQqlevXv63MD54ZWVlsnr1avVevJ+JBGwTYExiTLLtU569MAUI4iTiJQaOmNIToABxwzsoQNxox9Bqganh4447Ts1wDB8+XI2uZ0oLFy6UE088MbTyxflFEB1YYrVmzRqBsNBJYQgQnXIwDwlkS4AxKVtyuX/OhZgUpgDJfYu48QYKEDfakQLEjXYMrRavvfaanHXWWXLYYYfJ559/ntX+Dth46aWXBEsmvv76a9m1a5ccddRR8rvf/U5uueUWtY8kMWGvxbBhw9RsCj4GySldJ/q9996Te+65R/71r39JSUmJWpqEEXgsT7rzzjtlv/32Kzc1c+ZMNWMDYfXtt9/KAQccIEcccYR07txZ7ffwUrol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\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Sigma means [s_0, s_1]: [1.75424659 2.69865438]\n"
+     ]
+    }
+   ],
+   "source": [
+    "optPeaks, optI, fittingValues = peakFind.fit_peaks_gauss2D(simIm, coords_found, 5, \n",
+    "                                                           (1.5, 2.5), ((-1.5, -1.5,0,0),(1.5,1.5,3,3)))\n",
+    "\n",
+    "# Plot the gaussian widths\n",
+    "f2, ax2 = plt.subplots(1, 2)\n",
+    "ax2[0].plot(optPeaks[:, 2],'go')\n",
+    "ax2[0].plot(optPeaks[:, 3],'ro')\n",
+    "ax2[0].set(title='Gaussian fit sigmas',xlabel='index sorted by peak intensity')\n",
+    "ax2[0].legend(labels=['width 0', 'width 1'])\n",
+    "stdMeans = np.mean(optPeaks[:, 2:4], axis=0)\n",
+    "\n",
+    "# Print out the average of the fitted sigmas\n",
+    "print('Sigma means [s_0, s_1]: {}'.format(stdMeans))\n",
+    "\n",
+    "# Plot the fitted center (relative from the intensity peak)\n",
+    "ax2[1].plot(fittingValues[:, 0], 'o')\n",
+    "ax2[1].plot(fittingValues[:, 1], 'o')\n",
+    "ax2[1].set(title=\"Gaussian fit relative centers\", xlabel='index sorted by peak intensity')\n",
+    "_ = ax2[1].legend(labels=['center 0', 'center 1'])\n",
+    "ax2[1].set(ylim=(-0.5, 0.5))\n",
+    "ax2[1].set(yticks=(-0.5, -0.25, 0, 0.25, 0.5))\n",
+    "fg.tight_layout()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Plot to compare the known and fitted coordinates\n",
+    " - coords are the expected positions we used to generate the image\n",
+    " - coords_found are the peaks found with full pixel precision\n",
+    " - optPeaks are the optimized peak positions using Gaussian fitting\n",
+    " \n",
+    "## Zoom in to peaks to see how well the fit worked"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "scrolled": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support. ' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        fig.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>');\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option);\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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kggggAACCIQlQAAJS55xHQECCPugWgHn0irnv6+++kpTpkzRP//5Tw0dOlRnnnmme2zLli3lnOlwbjzf++PckL527Vr3bInftlVNbO9AVL4dAaTactIAAQQQQAABbkJnD4QqQAAJlT+agz/yyCO688473cuujj32WM6ARLOMzBoBBBBAwGIBzoBYXHwDlk4AMaAIUZvCf//7X33ve98ru7ncz30dftr6ceEeED9atEUAAQQQsF2AAGL7Dgh3/QSQcP0jOfqyZcvcp105LyN87LHH3CDiXJLl5SlYftr6wSGA+NGiLQIIIICA7QIEENt3QLjrJ4CE62/06M69G4cddlilOfbt29d96/lTTz2l66+/3r0Uy3nSVVXvAVm4cGHZDet+2vrBIYD40aItAggggIDtAgQQ23dAuOsngITrb/Tol112mXvjuXOzedOmTVVcXKy3335bkydP1qmnnqr33ntPeXl57hpuvvlmjRs3zn0TeqdOndw3pjtvQu/Ro4fGjh1bYZ1+2noFIoB4laIdAggggAACvAmdPRCuAAEkXH+jR3/hhRfcsxzOU6/WrVunAw44QMccc4x+9rOfuWc7nP9d+tm5c6eGDRumCRMmaOXKlWrSpIm6d+8u52xJaUhJpa1XIAKIVynaIYAAAgggQABhD4QrQAAJ15/RAxIggAQESTcIIIAAAlYIcAmWFWU2dpEEEGNLw8T8CBBA/GjRFgEEEEDAdgECiO07INz1E0DC9Wf0gAQIIAFB0g0CCCCAgBUCBBArymzsIgkgxpaGifkRIID40aItAggggIDtAgQQ23dAuOsngITrz+gBCRBAAoKkGwQQQAABKwQIIFaU2dhFEkCMLQ0T8yNAAPGjRVsEEEAAAdsFCCC274Bw108ACdef0QMSIIAEBEk3CCCAAAJWCBBArCizsYskgBhbGibmR4AA4keLtggggAACtgsQQGzfAeGunwASrj+jByRAAAkIkm4QQAABBKwQIIBYUWZjF0kAMbY0TMyPAAHEjxZtEUAAAQRsFyCA2L4Dwl0/ASRcf0YPSIAAEhAk3SCAAAIIWCFAALGizMYukgBibGmYmB8BAogfLdoigAACCNguQACxfQeEu34CSLj+jB6QAAEkIEi6QQABBBCwQoAAYkWZjV0kAcTY0jAxPwIEED9atEUAAQQQsF2AAGL7Dgh3/QSQcP0ZPSABAkhAkHSDAAIIIGCFAAHEijIbu0gCiLGlYWJ+BAggfrRoiwACCCBguwABxPYdEO76CSDh+jN6QAIEkIAg6QYBBBBAwAoBAogVZTZ2kQQQY0vDxPwIEED8aNEWAQQQQMB2AQKI7Tsg3PUTQML1Z/SABAggAUHSDQIIIICAFQIEECvKbOwiCSDGloaJ+REggPjRoi0CCCCAgO0CBBDbd0C46yeAhOvP6AEJEEACgqQbBBBAAAErBAggVpTZ2EUSQIwtDRPzI0AA8aNFWwQQQAAB2wUIILbvgHDXTwAJ15/RAxIggAQESTcIIIAAww0uIwAAIABJREFUAlYIEECsKLOxiySAGFsaJuZHgADiR4u2CCCAAAK2CxBAbN8B4a6fABKuP6MHJEAACQiSbhBAAAEErBAggFhRZmMXSQAxtjRMzI8AAcSPFm0RiK9A/eQ2HauvNSvRWJvUXGuT7bRTBylPW3RYYo7q6gt1SK7SIjVUcaJWfCFYGQLVCBBA2CJhChBAwtRn7MAECCCBUdIRApEVcMLHcE1TU21ST/1Bj6uPpHGSVks6XFIP3ahhGqO7tEJ11UenE0IiW20mnq4AASRdQY5PR4AAko4exxojQAAxphRMBIHQBJwzGwM0S7lKapdydJ2e1nN6WNICSYXqqtv1tK5TrnZrlxIapA7umRI+CNgoQACxsermrJkAYk4tmEkaAgSQNPA4FIEYCbTIOUVjdvX9NmTk6FA103otUwM11zotL/t6Tw1VUeLDGK2cpSDgT4AA4s+L1sEKEECC9aS3kAQIICHBM2xkBMrfG1HVpKN+b8Sm5JGaowfVVc+WneloW3b+Q5ovlTszco3a6w7VTSyPTA2ZKAJBChBAgtSkL78CBBC/YrQ3UoAAEl5ZKtz0mzxSa+Xc9FtbeSrRYZrj/oIX9V9sw9MNZuTv7o3YqGFqp1cTp2txcoN2aLNqqI6OSuTr0uQH6qu5WqH8yN4bsSR5pYq0XtJ4NdDXaqFl7sVXpZ9CSUVqrvVqKOkmFai+ChIvBYNMLwhETIAAErGCxWy6BJCYFdTW5RBAwql8xZt+H9Dj6stNv+GUYr+j7rk3YqZyK5wBqOreCGmQOkby3ojPkjdohZzLqgZ5qMIANdXJOjrxlIe2NEEgfgIEkPjVNEorIoBEqVrMtUoBAkg4m6NDYo0G7J7BTb/h8Psa9bQDd6r/lteqvTfifnXW9EQ9X32b0tiWMyDOpWb7OtNoSh2YRzQECCDRqFNcZ0kAiWtlLVsXASScgufUqqUjt5+oMbu56TecCngfdX6tYTp/68xq7414U210UmKA944Nahnne0Ccs40F2q3xGq5iHVdJvb4+0U3qo6XK4dHCBu1Jk6dCADG5OvGfGwEk/jW2YoUEkHDKXFL/BM1af08sbvotvZflHXWo8q/LUb2XZc8v5t/3fG9Ee30e2ZuzWyRP1hj9rtozPVF6CpazN4dpppqp+NtHC19T6VLH0hvvl6u++qojISScfxIjNSoBJFLlit1kCSCxK6mdCyKAhFP3ovzuWrJhmedfbE296be6X/DqJ07XbcneuluTInmT9p5Lkz7xfG9EgY6N5M3ZcX0PyJ51zS4LVft/v0mOBumUSN7DE86/YvaOSgCxt/YmrJwAYkIVmEPaAgSQtAlT6uA/+b/WFxsme/7F1tSbfgsT2zVk9xsef8GL3k3ae27OXuk5KDZVk0jenB3XhyI4Z7Baqk25lyhW/X4TJ5ws0YLInsFK6R8iDkpJgACSEhsHBSRAAAkIkm7CFSCAhONfVPeXWrLxC8+/2Jp6BmR+zmCdv+tDT7/gDdNJmpJoFg54iqPuOQPyU8+XyhXohUieAXF4Kj4WupnWqZ12qI5qaLMO1dxIPhbapvqluMU5LAUBAkgKaBwSmAABJDBKOgpTgAASjn5JneM1a9NAz7/Ymvjit9Iblx1BLy+wi+Jfl/kLejg/H0GNassZrKC86MebAAHEmxOtMiNAAMmMK71mWYAAkmXwb4dLHHCAmjtPwUreGdmbfkv/uiyN83Qm5xAV6sREcTjgKY7KPQQpwhlymC338BjCbc00CCDWlNrIhRJAjCwLk/IrQADxKxZM+w5apQHJWZF+D8ievy5fKGmgp3tZ8nW12iV2BAOYpV6qu8le6lF29oenKGWpKD6GsekpZj5YaJqmAAEkTUAOT0uAAJIWHwebIkAACacScbjp14YzIM7u4D0S4fyMBDXqPN2nC5LzY/0el6Cs6MebAAHEmxOtMiNAAMmMK71mWYAAkmXwcsNF/aZfG+4B2Xt3bEru++bs8HYRI1cncGpyg+7W5GovdYzym+yrM+D7wQoQQIL1pDd/AgQQf160NlSAAGJoYSIyrXnJ3+sCLYjtU7AiUgamWYXAnnt4ZipX0i7lfPsywoclLZBUqK66vdzejd5joil8OAIEkHDcGXWPAAGEnRALAQJILMoY2iIKk1s0RBNj+x6Q0GAZOBCB7y513KhhaqdXdaqWaKO+UYlqqrZaKl+Xarr6am4kX5QZCBKd+BYggPgm44AABQggAWLSVXgCBJDw7OMwcnU3adfXabpNt0X2TehxqJHtayh/qWNVFs6ZkkVqqOJELdu5WL8HAQKIBySaZEyAAJIxWjrOpgABJJva8Ryr9Be8d3TKPl9e56yaX/DiWXtWhYCNAgQQG6tuzpoJIObUgpmkIUAASQOPQxFAAAEErBMggFhXcqMWTAAxqhxMJlUBAkiqchyHAAIIIGCjAAHExqqbs2YCiDm1YCZpCBBA0sDjUAQQQAAB6wQIINaV3KgFE0CMKgeTSVWAAJKqHMchgAACCNgoQACxsermrJkAYk4tmEkaAgSQNPA4FAEEEEDAOgECiHUlN2rBBBCjysFkUhUggKQqx3EIIIAAAjYKEEBsrLo5ayaAmFMLZpKGAAEkDTwORQABBBCwToAAYl3JjVowAcSocjCZVAUIIKnKcRwCCCCAgI0CBBAbq27Omgkg5tSCmaQhQABJA49DEUAAAQSsEyCAWFdyoxZMADGqHEwmVQECSKpyHIcAAgggYKMAAcTGqpuzZgKIObVgJmkIEEDSwONQBBBAAAHrBAgg1pXcqAUTQIwqB5NJVYAAkqocxyGAAAII2ChAALGx6uasmQBiTi2YSRoCBJA08DgUAQQQQMA6AQKIdSU3asEEEKPKwWRSFSCApCrHcQgggAACNgoQQGysujlrJoCYUwtmkoYAASQNPA5FAAEEELBOgABiXcmNWjABxKhyMJlUBQggqcpxHAIIIICAjQIEEBurbs6aCSDm1IKZpCFAAEkDj0MRQAABBKwTIIBYV3KjFkwAMaocTCZVAQJIqnIchwACCCBgowABxMaqm7NmAog5tWAmaQgQQNLA41AEEEAAAesECCDWldyoBRNAjCoHk0lVgACSqhzHIYAAAgjYKEAAsbHq5qyZAGJOLZhJGgIEkDTwOBQBBBBAwDoBAoh1JTdqwQQQo8rBZFIVIICkKsdxCCCAAAI2ChBAbKy6OWsmgJhTC2aShgABJA08DkUAAQQQsE6AAGJdyY1aMAHEqHIwmVQFCCCpynEcAggggICNAgQQG6tuzpoJIObUgpmkIUAASQOPQxFAAAEErBMggFhXcqMWTAAxqhxMJlUBAkiqchyHAAIIIGCjAAHExqqbs2YCiDm1YCZpCBBA0sDjUAQQQAAB6wQIINaV3KgFE0CMKgeTSVWAAJKqHMchgAACCNgoQACxsermrJkAYk4tmEkaAgSQNPA4FAEEEEDAOgECiHUlN2rBBBCjysFkUhUggKQqx3EIIIAAAjYKEEBsrLo5ayaAmFOLSMxkypQp6ty5szvX//znPzrqqKPK5r1r1y4NHz5cEyZM0IoVK9S0aVN1795dffr0UW5uboX1+WnrBYYA4kWJNggggAACCOwRIICwE8IUIICEqR+xsb/55hu1bt3aDRclJSWVAsgtt9yiMWPGqFu3burYsaNmzpypJ598Us7XR48eXWG1ftp6YSKAeFGiDQIIIIAAAgQQ9kD4AgSQ8GsQmRkMHTpUI0aMUNeuXd3/W/4MyMcff+yGk169emnkyJFla+rdu7dGjRqljz76SK1atXK/7qetVxwCiFcp2iGAAAIIIMAZEPZAuAIEkHD9IzP6F198oeOOO06PPvqonP9/0KBBFQJI//79NWTIEC1dulQtWrQoW1dRUZEKCgrUr18/DR482P26n7ZegQggXqVohwACCCCAAAGEPRCuAAEkXP/IjH7ppZdq7dq17mVVTvjYO4B06dLFPcuxZs2aSmtq1KiR2rRpo4kTJ7rf89PWKxABxKsU7RBAAAEEECCAsAfCFSCAhOsfidH//ve/ywkgc+fOVdu2bTVw4MBKAcS5vKpmzZqaP39+pTUVFhZqx44d7qVXzsdP230BrV69Ws5/5T+LFi3Stddeq3bqrPxEg0i4MkkEEEAAAQTCEuAm9LDkGdcRIICwD/YrsHXrVh1//PE655xzNG7cOLftvgJIy5Yt5ZzpcM6Q7P1xbkh3zp4sXrzY/ZaftvuaXOn4+/oeAYQNjQACCCCAQPUCBJDqjWiROQECSOZsY9Hz3Xffrccee0yff/65DjnkkCoDiJ+zGn7a7guRMyCx2FosAgEEEEAgRAECSIj4DM0ZEPZA1QKrVq1ybyC/7bbb3Pd5lH7++Mc/uk+2mjx5spo3b+628XNfh5+2XuvDPSBepWiHAAIIIIAA94CwB8IV4AxIuP5Gj75w4UL35vH9fWrXrq3Nmze7T7lyHtPr5SlYftp6BSKAeJWiHQIIIIAAAgQQ9kC4AgSQcP2NHn3Dhg2aNGlSpTn+9a9/1YsvvuieBWnSpIl+/OMfu0/AcsJKVe8BccLMCSec4Pblp61XIAKIVynaIYAAAgggQABhD4QrQAAJ1z+So+/rJnRnITfffLN7o7rzJvROnTppxowZ7pvQe/ToobFjx1ZYq5+2XpAIIF6UaIMAAggggMAeAe4BYSeEKUAACVM/omNXFUB27typYcOGacKECVq5cqV7dsS5d6Rv377Ky8ursFo/bb0weQ0gtesfqNZdjlPz1k2Ud0DFOXkZhzYI7Ny+U8s+WqmP3v5EJcVbAUEAAQQiKUAAiWTZYjNpAkhsSmn3QrwEkERCunLARTr6lJaqXe8g5ebm2o3G6lMS2LVrl0o2bNFns5foxUF/VzKZUjcchAACCIQqQAAJld/6wQkg1m+BeAB4CSDHnn6ULrnjXDU6/FDVVC0llIjH4llFVgWSSuobbdN/V6/Vaw9N0qJpe95vwwcBBBCIkgABJErVit9cCSDxq6mVK/ISQC6+42yd8uNC5R9QXznKsdKJRQcjsFu7tXF7sWb/7wK9/tC7wXRKLwgggEAWBQggWcRmqEoCBBA2RSwEvASQq4dcqhPPOl51cvJjsWYWEa7A5t0btXDyv/SX/q+FOxFGRwABBFIQIICkgMYhgQkQQAKjpKMwBbwEkOseukKtTjtWB6lOmFNl7JgIbNFmffzBIj19x8sxWRHLQAABmwQIIDZV27y1EkDMqwkzSkGAAJICGoekJUAASYuPgxFAIGQBAkjIBbB8eAKI5RsgLssngMSlktFZBwEkOrVipgggUFmAAMKuCFOAABKmPmMHJkAA+Y7ylddf1u9+f6cmv/q+mjRuEpgxHVUUIICwIxBAIMoCBJAoVy/6cyeARL+GrEASASSYAPLOlLf12eJP1eum3uyragQIIGwRBBCIsgABJMrVi/7cCSDRryErIIBU2APOW+a3f7NdBx14kBLO2xd9fH57z+16feJr+uxD3m1RHRsBpDohvo8AAiYLEEBMrk7850YAiX+NrVhh2GdAPv28pia9X1sbN+Uov+5unfOjEh3z/W8iZx/FAFKypUS1D6qddWsCSNbJGRABBAIUIIAEiElXvgUIIL7JOMBEgbACyBcr8tTvvsM07x8HVmI5qc1WDblnrY5sujOrZHvfA3LXwL762xuvaObbczT8j3/Q5GnvaueuXTqj4xka9Lv7VC+/nju/n/foqrkL5laaa/l7SRZ8tEBjnhithR//Q9u2b1PBkS11Q9duuuyiyyudhRk94VG9/PqLKt5QrKNaHKXeN/9Gb016U3MXzNGU16ZWaO+136NPPkoXn3eJLj7vUo0aP1KfL/lMP7vsavW/4+6sGjuDEUCyTs6ACCAQoAABJEBMuvItQADxTcYBJgqEEUCWLa+hq355hNYX51ZJ0qD+Lr3wxMqshpCqAsgPj22lIw5vrFNO7qily5bquZee0YXnXqThv3/Inf+MOdM1avwf9Y9/LtCwQQ+WremcH53rXs717vuT1PuuXjrumOPVpfN5OvCAWprywWRNnz1dv+3VVzded1PZMfcM7q+//u8LOqPTmW7Q+b81q/T8K8/piMObqKRkc4UA4qdfJ4C0bNFSa9et1VWXX61mTZqpYcODdfYZ52R9WxJAsk7OgAggEKAAASRATLryLUAA8U3GASYKhBFArrmp8T7PfOzt45wJeXb8qqyxVRVArv3pz3VPnwFl8xj80P169sU/a+6781SnTl3361VdgrVt2zadefFpOvGHJ2rMw+Mr3Fvy6zt/pakzpuqDt2Yqv26+Pl/8uS6++gKdd/b5Gjl0VNl4H8yapu6//oWOOPyIsgDip1+nIyeAOJ9nxj2nkwvbZc10XwMRQELlZ3AEEEhTgACSJiCHpyVAAEmLj4NNEch2AHHu+bj0mqael//qcyuydk9IVQHkrRffUUHzgrI5T3rvHd3a9xa99pc3dPRRR+83gEye+q5u+e3NGvWH0Tqp8OQK635v2hT1u+8ujXvkcZ156o80/qmxemj0g3r+T39VmxMKK7S98Kfnaeu2rWUBxE+/pQHkmO8fq1efe92zfaYaEkAyJUu/CCCQDQECSDaUGaMqAQIIeyMWAtkOIKPGN9Cjjzf0bNfrpq91643rPbdPp2FVAeTjGf9WzZoHlHU9Z/5sXXfztfrz2GfVrm37/QaQx58erwdHDdvvtIbc84CuuOQnunfoPXrhlb9ozrvzVL9e/QrH/KpPTy367JOyAOKn39IAcu6PumjUsNHpEAVyLAEkEEY6QQCBkAQIICHBM6wrQABhI8RCINsBZPBDB+vp5yv+cr0/yOuuKlb/O77KinVVAeTfsz5VXl5epQDy9Nhn1L7tKfsNIKVnNQbe9Xsd2eTIfa6jZcFRanRoI9075G698LfnPQUQP/2WBhDnJvQH73s4K5b7G4QAEnoJmAACCKQhQABJA49D0xYggKRNSAcmCGQ7gETxDIiXANLn3jv02luvVnoPyNtTJurXd96qhwePcG9c39/HzyVYfvolgJjwk8YcEEAgLgIEkLhUMprrIIBEs27Mei+BbAeQKN4D4iWAlF4+NXfy/LLH8zrUzrs2zrrkDB168KF64cmXKr134+v1X6lB/YbuzemfLf5Ml1x9oc4/+wKNGPrHskrt6yZ0P/0SQPixRwABBIITIIAEZ0lP/gUIIP7NOMJAgWwHEIcgak/B8hJAXvzfF3T34P66qMslOr3j6e4lWz867aw9j+GdOkm33fVrHdzwYF120RXuI32/Wv+VPnHu6Zg2WQunfVx2iZdzU/rLr71U9hjeVf9dredffk6NDz/CDTNTXn2/bBf56bf0PSBcgmXgDyFTQgCBSAkQQCJVrthNlgASu5LauaAwAojzEsKf/aJJZN4D4iWA7Ni5Q/c/eJ8mvfe2vl7/tZLJpMq/iPBfi/6l8U+N0byF87Rx40Y1aNDQfcng2Wecra5XXlv2eF6nn0cfHyXnfpTiDev1g5ZH6ze33K6//u15LS5arDf/+naFjeq1XwKInT/frBoBBIIXIIAEb0qP3gUIIN6taGmwQBgBxOEw8U3oBpdJF191gQ479DD9adRTJk/T09y4Cd0TE40QQMBQAQKIoYWxZFoEEEsKHfdlhhVASl0//U9Nvft+bW3YmKN6+bt19pklWXvvh4m1dV4wWKtWrQpTmzrjfd10W/dKb003cf5e5kQA8aJEGwQQMFWAAGJqZeyYFwHEjjrHfpVhB5DYA/tc4BPPTNB709/Tqe1PVb169fXp54v00qsvumc/Xn3u76r77ZvXfXZrVHMCiFHlYDIIIOBTgADiE4zmgQoQQALlpLOwBAggYcnve9wPF8zVqMf/qM8Xf6ZNmzapQf0GOvWU03Rbz9/oe40ON2uyKc6GAJIiHIchgIARAgQQI8pg7SQIINaWPl4LJ4DEq55RWA0BJApVYo4IIFCVAAGEvRGmAAEkTH3GDkyAABIYJR15FCCAeISiGQIIGClAADGyLNZMigBiTanjvVACSLzra+LqCCAmVoU5IYCAVwECiFcp2mVCgACSCVX6zLoAASTr5NYPSACxfgsAgECkBQggkS5f5CdPAIl8CVmAI0AAYR9kW4AAkm1xxkMAgSAFCCBBatKXXwECiF8x2hspQAAxsiyxnhQBJNblZXEIxF6AABL7Ehu9QAKI0eVhcl4FCCBepWgXlAABJChJ+kEAgTAECCBhqDNmqQABhL0QCwECSCzKGKlFEEAiVS4miwACewkQQNgSYQoQQMLUZ+zABAgggVHSkUcBAohHKJohgICRAgQQI8tizaQIINaUOt4LJYCEV9+f9+jqDv7ncc8FOomjTz5Kt97YS71u6h1ov146O+uSM9SusL0eGDisyuYEEC+StEEAAVMFCCCmVsaOeRFA7Khz7FdJAMlsiWd9OEvz/jFX11/dTfl18ysMRgB5ObP49I4AAghkQIAAkgFUuvQsQADxTEVDkwUIIJmtziNjHtbYJx7T5FffV5PGTSoMtm3bNvd/16pVK9BJlGwpUY0aNVSzRs1A+/XSGWdAvCjRBgEEoixAAIly9aI/dwJI9GvICkJ6D0juV1+q1r/+oZIzzqmyBrWnTtK2H7bRroMPiXSd9hdAIr2wKiZPAIljVVkTAgiUFyCAsB/CFCCAhKnP2IEJZPsMiBM+mvS8VjW/WKo1A4dr0/mXVlpL3bde1fcG9tE3RxZo5ZhnshZC1n25TiPGPqyp099X8cZiNf5eY11y/o/Vo9vNqpFXo2yedw3sq7+98YqmvTFdQx8ZoumzP1AymdSZp56lfrf318END3bblrbbe4FPj31G7dueon1dguXcv3HxeZfososu18OjH9J/ln6uwxsdrtt63q7zz75A//70X3pgxFB9/O9/Kj8/Xzde10M//9l1FYbY+x4QJxT83+r/2+ee2ftekb/9/RU9++IzWrz0P0rk5OjEH56oX/forTYnFFY4fn3xev1hxFBNnvaudu7apZNOPEl3//YedfvV9dwDEthPJx0hgICJAgQQE6tiz5wIIPbUOtYrzXYAcc5sNO77KyV271YyJ6dSCCkNH6XfXzVs9H7PlARVnA0bN+iyn1+qtWv/q6uu6KoWR7bQrLkzNen9d9TlrC764x9GVwogx3z/WB3e6Hs6rcPpWly0WM+/8hf9oOXRevF/XnYvf/rHPxfo8afHa/LUd/W73/RXg/oN3D46tT9Vhxx8SJUB5Actf6Cv1n+lq6/oqnr59fXsi3/W8pXL9ciQkbpv2CA3nDih5KXXXtQnn32iZ8Y9p5ML25XNb+8A8u77k+RcllX+8/aUie687u07UNdcea37LSdQPPncEzr3rC5qX9heW7dv08uvvaQV/7dcTz32ZzdkOJ9vdnyjq35xpTv2T3/8Mx39/WM0f+E897/t32zXmZ1+xE3oQW1M+kEAAeMECCDGlcSqCRFArCp3fBeb7QDiSO4dMkrPhFT19WzoDx81TBOeHq9HBo/UBedeWDbkgAfu1fMvP6cJf3zCDRrOp/TMhnNGYsTQP5a1/fMLT+v+B3+vAXcOUtefXON+fX+XYFV1BiQnJ0cv/c8rOv6YH7p9fLb4M11y9YVKJBIa98gEndHpDPfrzhmbH118urp0Pl8P3f9wlQFkbz8nGF3X81p1bNdJYx4aJ2e8f/77n7ryhsvV99d36Zc/7152iBNcLr7qAh16yKF64YmX3K//5eXnNPCBe91QdUPXbmVtH3hkiBtgLrvwcgJINjYtYyCAQCgCBJBQ2Bn0WwECCFshFgJhBJB9hZCSDqer9qxpVZ4ZyTT2+Vd20c6dOzTpb1MqDLVqzSr3l3znbMTAu35fIYA8/6e/Vrg06Ztvtqv9Oe3cMwWPj/xTygGkTas2ev6JFyvMo83pJ6h+vfp67/VpFb5+3k/OVd06dfXiU989UWp/j+FdvWaVfnL95W5fLzzxourUqev2N/SRwXr2r89o0t8m64C9bop/6NHh7pmQee/9Q3Vq11H3X/9C8z+arzmT5qpmzQPK5vPlV1+q03mnEEAyvVnpHwEEQhUggITKb/3gBBDrt0A8AMIKIHuHkFLNfV2WlQ3pVp2OU6d2nTT2kccrDdfmjNZq27qtexbE+ZSeAZnz7jz3F/nyH+dsgXNPxFsvvp1yALnw3Iv08OARFfo9/cJOatK4qZ57/PkKX/9ptytUvKFY77wyuezrVQWQrdu2qmv3n8kJVU5gadbkyLJjbuz9S02bOXW/1O/+73tqekRTOaGnRl6eXn/+zUrtTz6rUJ1PP5szINnYtIyBAAKhCBBAQmFn0G8FCCBshVgIhBlAHMDGt3VXnRnvl1lu7nSmVo2YkHXb6gJI+bMapQFk7uT5qpdfL/AA4tyE/uB9311S5QzgBJAjmxxZ6aWFTgBxbggvf+ZmXwHEuUm+9123avLUyZow6kl1OLlDhXn/slc39x6Oxx4cW6V9Yeu27iODu1xxjmrWrKnX//JGpbYn/aiNzj7jHAJI1ncwAyKAQLYECCDZkmacfQkQQNgXsRAIM4CUv+ejFDOsMyBVXYLlXLJ05sWnu/d0OPd2OJ/SAOLlEqwRYx7RmCdG7/M9IPt7ClbQAWTk2BF67E+PVrjpvPwGvm/4ID3z1z9r+luz3Ps99vfhEqxY/OizCAQQSFGAAJIiHIcFIkAACYSRTsIWCCuA7H3Dedj3gDw4apj7xKqRD4zSeZ3PLyvLoD8M0HMvPas/jXpSp55yWoUAUtVN6OWfLDX+qbF6aPSD+tszr+q4o4+vUO5sBZA3J72h3/TrrZ9dfrV+/7v79rnlnBvTr/rlT3X5xT/RkHuGuje8l/989fVXZY8XdjwcF25CD/unl/ERQCAMAQJIGOqMWSpAAGEvxEIgjABi4lOwyj+G9+qfXKPmzZprzrxZenvK29U/hrfjGVpStNh9OtRRBd/Xy//zStnN2TOOEoXCAAAfQUlEQVTnzFC3W693n6B1UZeL3TeUn3JSB/eX+WwEEOfyrDMvOs29dMp5wlVeXl6Ffes8QveY7x/jfq30SWCtf9javY/DeWzw6v+u0dwFc9z3nJTef+I8hvfK66/Q50s+05WX/lTH/OBYzfvHhzyGNxb/IrAIBBCoToAAUp0Q38+kAAEkk7r0nTWBbAcQU98D4oCv/XKtRozZ8yJCJ5Ac/r3DdekFl1X7IsIPZk1TUkn3/Rf9br/bfcdH+Y9zGdYrf3/JfWzu7t275eVFhEFdgrVy1Up1vvTMKvfT3i8ifOvdN/Xci8+47/jYsXOHDj34MLU6rpUuu+iKssf/Op19vf4r94WIU6ZN1q7du90nf/W/4x794lZeRJi1H14GQgCBUAQIIKGwM+i3AgQQtkIsBLIdQEx+E7rXgpbeA/LvWZ9WOqPgtQ+b223RZn38wSI9fcd3jw622YO1I4BAtAQIINGqV9xmSwCJW0UtXU+2A4jD7ISQWv/6x37fcO6cKdn2wzbatdfZBBPKRABJrwoEkPT8OBoBBMIVIICE62/76AQQ23dATNYfRgCJOh0BJL0KEkDS8+NoBBAIV4AAEq6/7aMTQGzfATFZPwHEfyEJIP7Nyh9BAEnPj6MRQCBcAQJIuP62j04AsX0HxGT9BJCYFDJCyyCARKhYTBUBBCoJEEDYFGEKEEDC1GfswAQIIIFR0pFHAQKIRyiaIYCAkQIEECPLYs2kCCDWlDreCyWAxLu+Jq6OAGJiVZgTAgh4FSCAeJWiXSYECCCZUKXPrAsQQLJObv2ABBDrtwAACERagAAS6fJFfvIEkMiXkAU4AgQQ9kG2BQgg2RZnPAQQCFKAABKkJn35FSCA+BWjvZECBBAjyxLrSRFAYl1eFodA7AUIILEvsdELJIAYXR4m51WAAOJVinZBCRBAgpKkHwQQCEOAABKGOmOWChBA2AuxECCAxKKMkVoEASRS5WKyCCCwlwABhC0RpgABJEx9xg5MgAASGKV1HTkvZJy7YI6mvDbV19oJIL64aIwAAoYJEEAMK4hl0yGAWFbwuC6XABLXykrvTHlbny3+VL1u6p2RRRJAMsJKpwggYLgAAcTwAsV8egSQmBfYluURQOJb6d/ec7ten/j/7d0JvE7V/sfxrzJG3UghXIVGieT+E4oMuTcylyGVmUiUIdFAGW4oyTwU6pApkQYZLyEZSuiKTElEGeqah/xfa7nPued0nOOsc55nP8P+7NfL63bP+e291nqv7Xi+Z++194favHprSAZJAAkJKwdFAIEIFyCARPgExXj3CCAxPsF+GR4BJHZnmgASu3PLyBBAIHwCBJDw2dOyRADhLIgJAQLI/6bx+InjGjtxtD6e97F+2rtbl+e4XPfcfa+eaddZefPks4W//f6bajaqrssuy66Z785StqzZ7NfPnj2rxq0aaPvO7fpw8kfKl/dafbl2pR5r20Sv9OijI0ePKG56nH75db9uKHyDOj/ZVeXuKp/kHPrgo5maND1OW7d/rwyXXKKSt5XUU2066o7bSyWqPXPmjN6ZMkGzPpmlnbt2KGuWrCpa+AY1b9JCVSpU1aNtGmvVV6uSHH/h7H+pwLUF7Ne/+uYrjXx7uNZt+FonTp5Q4UJF1LRxM9WpUTfRfmZsI98eoRmzp+ng4YO2nU5tn9Yn8z5mDUhM/BRgEAgg4CJAAHHRojbYAgSQYItyvLAIREIAmTLzPfvB/Orc16hh3UZhcTh1+pQNC5s2/1v1az2kG4vcpD379mjy9DhlN2EjbrZyXZnL9u2L1V+oWfvHbF97dX/Zfm3Y2Dc1dMybGtx3iB64v7r9WiCA3HzDLfrP0f+oQe0G9utTP5ii/b/s14SR76p0ydLx4331jf4aP/lt3V+pmu4qdZeOnzyh9z+coR9/2qUJI/5X+8cff6h91ye0aOlClS9T3oYkKYM2btqgHNlz2D4t/3KZ7c/X67/SgN6D4tuoet/9uizbZVrwr/nq2L2Dbr25mKpV/ruyZcmqRZ8v1LKVy9SlQze1eqx1/D4vD+hlQ1H5Mvfovnvu0097ftKUD6aoQL78OnrsKIvQw3LG0igCCIRLgAASLnnaNQIEEM6DmBCIhABS99Fa+va7b1Xs5mKa+e7ssLiOe3esBg9/TXFjJie62mACSb3H66hFk5b2qkVge3XIP/V23DiNen2Mcl6ZU4+0aqTq1Wok+rAfCCAmFMydMV9X577a7r7/1/2qVq+qil5fVNMnvG+/tv7b9XqoaV11e6q7WjzaMr4d8wH/wYYP2H2nvj3Dfn32J7PU7aUu9mrFc0/3TOR17tw5ZciQwX4tuVuwTpw4oYoP3mOvrox8fUx8vdnnqWfba8nyJfr80xW64vIrtG3HVlVv8A9VrlBFwwaMiK814eeJzm2UP19+AkhYzlgaRQCBcAkQQMIlT7sEEM6BmBEggJyfyjpNaipTpkwaNXhskrk14cJcNXj/nQ/iv2eumDzctJ4NE+Z7f5w7pw8nzVGOHJfH1wQCSIM6DfVyjz6JjvtC356aNmuqVnz2pa7KdZX6D+6rSdPiNP+DhcqSNWui2teGDbRXQtYs/tpe4Wj7TGutWLXc7mv+f3JbcgFk4ZIFatelrYa+OlylS/0t0e6Lly5Sj1e6a/TgsapY/j6NmThapv3J46bqzhJ3Jqr9x0PVdPLkCQJIzPw0YCAIIJAaAQJIapSoCZUAV0BCJctxPRUggJznLlH+NrsOIrnt2rzXavGcpYm+/f22LXqwUXWZqw6Txk5JdDuVKQwEkO6dnlOzR1ok2tdcPTFXUaaNn6ESt5VUq44ttHRFyu/TWDBrsQrmLyjzwf+SDBn08bS5KZ4ryQWQse+M0aChA1Lct98L/1S9mvX1Yv8XNHXme1o5f7W90pNwM7eBmStEvAfE07+yNIYAAmEWIICEeQJ83jwBxOcnQKwMPxwBxKz5mPbBlHhCc/tVYDO3YQW2h+s09GxNSPFyt6rYTcX0VJtOF5zazFmyJAkY5ratgW++autf7PqSHnn40UT7BgLIc0/3UNPGzVMMIC06NNPadWs0YtCoZE+tUiXuVNasWdMdQMZMGKXXhg+ya0UKFSh0wfaKFC6qPFfn0Yv9nrdrVr5csEZX/uXKRLXmKsp3WzYRQGLlhwHjQACBVAkQQFLFRFGIBAggIYLlsN4KhCOADB0zRMPGDr3oQJ9s1SFkL9H7c+NmncXpM2c0d8a8i/bLFJgP3vWb1lWFchV18uRJrf5qlV2oXuS6IvH7u9yC9crA3oqb9q6WffpF/FqR5DoSuAXri3mr7AL55LauL3bWh5/OTvIekM8WzdVTzz6p1/u+oer310hxvNyClarTgSIEEPCRAAHER5MdgUMlgETgpNAld4FwBJBIvAIyevxIvT7iNfV/8VXVfbBeIkhzi9WhwweVK+dV9usmcNR7rLYO/3ZYH075WGfPnNWDjR7Qtfnya+rb05UpYyZbd7FF6CaszJg409aap1U1bPGw6j5YX/1e6J9oYbj5/oGDB+xaEbOZUGHCRfNHWujZTs8l6WtgEXrg9qlVC9fqL1f8Jb7OLGyvVLOCrr7qak0dPyNJiDl46IByXpnL9sEsQn/g4b+rSsWqLEJ3/+vFHgggEIMCBJAYnNQoGhIBJIomi64mLxCOAPLn3kTCU7BOnTqpZk821ZqvV9vH0t5ZorQyZsyo3Xt2a9HSBfp7lQf09BPP2K73GfSyvVox5o1xurdsBfu1BUvmq32XJ9SmaVs9075LogASeAyvfcTwuXMyAWzf/n2aMOId/a3U/8VzDBw6QOPeGaMSt5VQ5Xur2DUXe/f9bN+1YULQ5LHnb1sz/22eQLX480X20bjmMbyXXnqpvt200d6iFXg08PRZU/V8356qUa2m7i17rx3PffdUOv8Y3iXz1an7UzbU1KlRT/nzXasDhw7o32ZNx9KFWrd0g60320v/fFFT3p9s26p0TyXt3vuTHQOP4eUnCwII+FGAAOLHWY+cMRNAImcu6Ek6BAgg/8MzIWTCexP00Wdz7Mv9zAfwvNfkVZnSd6th3ca6seiNWrbyc7V8qrmaPPyonu/yYiJ582SrGR9O17ujJ9v1IglfRPifI0c0aUac9v+yz76I0ISU8+/vSLx9uuAT++4REwROnzmtq6+6RsVvLW5DQoVy58OO2cyLCM07Q2Z9NFM/7P7BXsUwx23epKUq3VvZ1pj9+wx6RfMXf6aDhw7a4JLwRYQbN23UmAkjtWbdGv3+++/KmTOXfTRwlQpV1PihJvFXYcyLCEe8NUzTZ0/TocOHdEORG3kRYTr+zrErAghEtwABJLrnL9p7TwCJ9hmk/1aAABK6EyEQQPr07KuH/vsSwtC1Fj1HPqYj2vD5Jr3T+fw7UNgQQACBaBIggETTbMVeXwkgsTenvhxRJASQSHgTeigmnwByYVUCSCjONo6JAAJeCRBAvJKmnQsJEEA4L2JCIBICSExAXmAQBBACSKye24wLAT8LEED8PPvhHzsBJPxzQA+CIEAACQJiMocggBBAQnd2cWQEEAiXAAEkXPK0awQIIJwHyQrs3LlT119//QW/36JFC40bNy7+e2aB78CBA+3XfvzxRxUsWFAtW7ZU165d7ZONEm4utamdHgJIaqWoC5YAt2AFS5LjIIBAOAQIIOFQp82AAAGEc+GiAaRWrVqqX79+orqiRYuqTJky8V9r166dRo4cqWbNmqls2bJasWKFxo8fL/P14cOHJ9rXpTa100MASa0UdcESIIAES5LjIIBAOAQIIOFQp00CCOfARQUCV0B69uypPn36JFu/YcMGlShRQh06dNCQIUPi6zp27KihQ4fqm2++UfHixe3XXWov2sEEBQQQFy1qgyFAAAmGIsdAAIFwCRBAwiVPu0aAKyCcB8kKJAwgJoSYLVu2bEnqzff69eun7du3J7pla8eOHSpcuLB69Oihvn372v1cal2mhgDiokVtMAQIIMFQ5BgIIBAuAQJIuORplwDCOZCiQCCA5MiRQ0eOHLG15tarTp06qX379vH7VqtWzV7l+Pnnn5McL0+ePLrjjjs0d+5c+z2XWpfpSU0AafjKgypZ5TbluPQKZVAGl8NTi0AigXM6pyNnf9e6BRs15YU56CCAAAJRJ0AAibopi6kOcwUkpqYzuIPZtWuXmjdvrtq1a6tQoULas2ePXWS+Zs0adenSxS46N5u5vSpz5sxau3Ztkg6UKlVKp0+ftrdeudYmN5q9e/fK/Em4bdq0SU2aNNH/qbKuyJDzgrtWbXOP7q5bSlfmzKnMykIICe7p4pujmfBxSid1+NAhfTHzK80f/blvxs5AEUAgdgQIILEzl9E4EgJINM5aGPtsnmBVqVIlLVu2TFu2bFGRIkXsH3Olwyw8//NmFqTv379fW7dutd9yqU1umL169VLv3r0v+O2UAkiW7JlVq9v9urlMEV12xWVJns4VRlaajiIB83fg2O/H9N3KbZo9YJ5OHj0VRb2nqwgggMB5AQIIZ0I4BQgg4dSP0rbnzJmjmjVravTo0WrdunXUXAEx3CaE3NvkLl1V4EplvixzlM4A3Q6nwKljp3Rg92EtjfuS8BHOiaBtBBBIlwABJF187JxOAQJIOgH9uPv69evtU6/MwnKzwNxlXYdLrYttataAuByPWgQQQAABBGJZgAASy7Mb+WMjgET+HEVcD2fOnKl69erZ9SDmhYQmhPTv3z9VT8FyqXUZOAHERYtaBBBAAAG/CxBA/H4GhHf8BJDw+kd06wcPHlSuXLkS9fH48eMqV66cNm7cqG3bttk3npsnYJknXSX3HpB169bp9ttvt8dxqXXBIYC4aFGLAAIIIOB3AQKI38+A8I6fABJe/4huvW7dujp27Jh943mBAgXsU7AmTpxor3SYKx7du3eP73/btm3tmhDzJnQTUJYvX27fhN6mTRuNGjUq0ThdalMLRABJrRR1CCCAAAIIsAidcyC8AgSQ8PpHdOtvvfWWDRybN2+WuRpi3gdiHqtr3nBuFqEn3M6cOaMBAwbY27J2795tA0vLli3VrVs3ZcyYMc21qQUigKRWijoEEEAAAQQIIJwD4RUggITXn9aDJEAACRIkh0EAAQQQ8IUAt2D5YpojdpAEkIidGjrmIkAAcdGiFgEEEEDA7wIEEL+fAeEdPwEkvP60HiQBs+akfPnyKqa/KbuuCNJROQwCCCCAAAKxKXBUv+tbrbYvFjZrN9kQ8FKAAOKlNm2FTGDYsGH2KVxsCCCAAAIIIJB6gbi4OD3yyCOp34FKBIIgQAAJAiKHCL/AwoULVaVKFZmF8yVLlgx/h2K4B5s2bVKTJk1k/tG65ZZbYnik4R0azt7444yzNwLetZLac9o8Vn/nzp32ZcK5c+f2roO0hIAkAginQUwIBNaArF271j6piy10AliHzjbhkXHG2RsBb1rhfPbG2bSCtXfWtJR2AQJI2u3YM4IE+IHr3WRg7Y01zjh7I+BNK5zP3jgTQLxzpqX0CRBA0ufH3hEiwD9u3k0E1t5Y44yzNwLetML57I0zAcQ7Z1pKnwABJH1+7B0hAvzj5t1EYO2NNc44eyPgTSucz944E0C8c6al9AkQQNLnx94RIrB3716NHj1abdq0Ub58+SKkV7HZDay9mVeccfZGwJtWOJ+9cTatYO2dNS2lXYAAknY79kQAAQQQQAABBBBAAAFHAQKIIxjlCCCAAAIIIIAAAgggkHYBAkja7dgTAQQQQAABBBBAAAEEHAUIII5glCOAAAIIIIAAAggggEDaBQggabdjTwQQQAABBBBAAAEEEHAUIIA4glGOAAIIIIAAAggggAACaRcggKTdjj0jQODs2bMaOHCgxo0bpx9//FEFCxZUy5Yt1bVrV1166aUR0MPI7cKRI0c0aNAgrV27VmvWrNHPP/+sxx9/XBMmTEjSaRdnl9rI1Qlez4xtXFycFi1apB07dih79uwqVqyYnnvuOVWpUiVRQy52LrXBG03kHmnTpk3q3bu3PZ/NY0gvueQSFS5cWE2bNtUTTzyhLFmyxHfexc6lNnJ1Qtszc25XrlzZNvL999+raNGiWKeTfOfOnbr++usveJQWLVrYf/MCm8s56lKbziGwOwIpChBAOEGiWqBdu3YaOXKkmjVrprJly2rFihUaP368zNeHDx8e1WMLdecD/8CZ96bceeed+uijj5INIC7OLrWhHmMkHL9+/fpasmSJ6tWrp1KlSskEP3OObty4USNGjLAfjgObi51LbSQ4hLoP8+bNs4H6rrvuUoECBWQ+aC1fvlzvvfeeqlevrjlz5uAcgkk4deqUSpQoYX8BdPTo0SQBxOU8dakNwVAi6pCBn8+1atWS+RmScDMBr0yZMpzPETVjdMZVgADiKkZ9xAhs2LDB/sPXoUMHDRkyJL5fHTt21NChQ/XNN9+oePHiEdPfSOvIyZMn9euvvyp//vw6c+aMMmXKdMEA4uLsUhtpHqHqj/kQXLp06US/gT9+/LhKliypX375Rfv371fGjBnlYudSG6pxRctxn3zySfvLiO+++0433XQTzkGeuP79++uNN95Q48aN7f8mvALicp661AZ5CBF5uEAA6dmzp/r06ZNsH13cXGojEoVOxZQAASSmptNfgzE/mPv166ft27cnulRtbnMxt1706NFDffv29RdKGkebUgBxcXapTWNXY2a3zp076/XXX9euXbvsrYMudi61MQOWxoGYqyLmlsyVK1faqyMudi61aexeVO/2ww8/6NZbb9WwYcNk/tvcApcwgLj4udRGNVoqO58wgBgbs2XLli3J3i5uLrWp7CZlCKRZgACSZjp2DLdAtWrV7FUOs3bhz1uePHl0xx13aO7cueHuZlS0n1IAcXF2qY0KmBB2slGjRpoxY4YOHz5s14W42LnUhnAIEXnoY8eOyfwxtwOtWrVK7du3t1f3tm7daj/A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\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "fg, ax = plt.subplots(1,1)\n",
+    "ax.imshow(simIm)\n",
+    "ax.scatter(coords_found[:,1], coords_found[:,0],c='b',marker='o')\n",
+    "ax.scatter(optPeaks[:,1], optPeaks[:,0],c='r',marker='x')\n",
+    "ax.scatter(coords[:,1], coords[:,0],c='k',marker='+')\n",
+    "_ = ax.legend(['integer', 'optimized', 'expected'])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Find the error in the fitting\n",
+    " - Gausssian fitting can be heavily influenced by the tails\n",
+    " - Some error is expected."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "scrolled": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support. ' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        fig.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>');\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option);\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4XuydB3hURReGPyD03nvvJYRA6KFDQv2RIqIgRREQQQQE6b0ICEgHRQGR3hQUSIBQQ+gltNB7D70TEv5nZlncQJIt9+7du7vfPM///DE798yZd4bNnDsz34n35s2bN2AhARIgARIgARIgARIgARIgAQ0IxGMAogFlNkECJEACJEACJEACJEACJCAJMADhRCABEiABEiABEiABEiABEtCMAAMQzVCzIRIgARIgARIgARIgARIgAQYgnAMkQAIkQAIkQAIkQAIkQAKaEWAAohlqNkQCJEACJEACJEACJEACJMAAhHOABEiABEiABEiABEiABEhAMwIMQDRDzYZIgARIgARIgARIgARIgAQYgHAOkAAJkAAJkAAJkAAJkAAJaEaAAYhmqNkQCZAACZAACZAACZAACZAAAxDOARIgARIgARIgARIgARIgAc0IMADRDDUbIgESIAESIAESIAESIAESYADCOUACJEACJEACJEACJEACJKAZAQYgmqFmQyRAAiRAAiRAAiRAAiRAAgxAOAdIgARIgARIgARIgARIgAQ0I8AARDPUbIgESIAESIAESIAESIAESIABCOcACZAACZAACZAACZAACZCAZgQYgGiGmg2RAAmQAAmQAAmQAAmQAAkwAOEcIAESIAESIAESIAESIAES0IwAAxDNULMhEiABEiABEiABEiABEiABBiCcAyRAAiRAAiRAAiRAAiRAApoRYACiGWo2RAIkQAIkQAIkQAIkQAIkwACEc4AESIAESIAESIAESIAESEAzAgxANEPNhkiABEiABEiABEiABEiABBiAcA6QAAmQAAmQAAmQAAmQAAloRoABiGao2RAJkAAJkAAJkAAJkAAJkAADEM4BEiABEiABEiABEiABEiABzQgwANEMNRsiARIgARIgARIgARIgARJgAMI5QAIkQAIkQAIkQAIkQAIkoBkBBiCaoWZDJEACJEACJEACJEACJEACDEA4B0iABEiABEiABEiABEiABDQjwABEM9RsiARIgARIgARIgARIgARIgAEI5wAJkAAJkAAJkAAJkAAJkIBmBBiAaIaaDZEACZAACZAACZAACZAACTAA4RwgARIgARIgARIgARIgARLQjAADEM1QsyESIAESIAESIAESIAESIAEGIJwDJEACJEACJEACJEACJEACmhFgAKIZajZEAiRAAiRAAiRAAiRAAiTAAIRzgARIgARIgARIgARIgARIQDMCDEA0Q82GSIAESIAESIAESIAESIAEGIBwDpAACZAACZAACZAACZAACWhGgAGIZqjZEAmQAAmQAAmQAAmQAAmQAAMQzgESIAESIAESIAESIAESIAHNCDAA0Qw1GyIBEiABEiABEiABEiABEmAAwjlAAiRAAiRAAiRAAiRAAiSgGQEGIJqhZkMkQAIkQAIkQAIkQAIkQAIMQDgHSIAESIAESIAESIAESIAENCPAAEQz1GyIBEiABEiABEiABEiABEiAAQjnAAmQAAmQAAmQAAmQAAmQgGYEGIBohpoNkQAJkAAJkAAJkAAJkAAJMADhHCABEiABEiABEiABEiABEtCMAAMQzVCzIRIgARIgARIgARIgARIgAQYgnAMkQAIkQAIkQAIkQAIkQAKaEWAAohlqNkQCJEACJEACJEACJEACJMAAhHOABEiABEiABEiABEiABEhAMwIMQDRDzYZIgARIgARIgARIgARIgAQYgHAOkAAJkAAJkAAJkAAJkAAJaEaAAYhmqNkQCZAACZAACZAACZAACZAAAxDOARIgARIgARIgARIgARIgAc0IMADRDDUbIgESIAESIAESIAESIAESYADCOUACJEACJEACJEACJEACJKAZAQYgmqFmQyRAAiRAAiRAAiRAAiRAAgxAOAdIgARIgARIgARIgARIgAQ0I8AARDPUbIgESIAESIAESIAESIAESIABCOcACZAACZAACZAACZAACZCAZgQYgGiGmg2RAAmQAAmQAAmQAAmQAAkwAOEcIAESIAESIAESIAESIAES0IwAAxDNULMhEiABEiABEiABEiABEiABBiCcAyRAAiRAAiRAAiRAAiRAApoRYACiGWo2RAIkQAIkQAIkQAIkQAIkwACEc4AESIAESIAESIAESIAESEAzAgxANENtvqHw8HAEBAQgT548SJo0qfkHWIMESIAESIAESIAESEBTAs+fP8fFixfh7++PDBkyaNq2qzTGAERHI7lw4UK0bt1aRx7RFRIgARIgARIgARIggZgI/Pnnn2jVqhXh2ECAAYgN0Oz1SHBwMHx9fSEmdNGiRe3VDO2SAAmQAAmQAAmQAAnYSODkyZPyhfHOnTtR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\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# Plot the RMS error for each fitted peak\n",
+    "# First sort each set of coordinates to match them\n",
+    "err = []\n",
+    "for a, b in zip(coords[np.argsort(coords[:,0]),:], optPeaks[np.argsort(optPeaks[:,0]),0:2]):\n",
+    "    err.append(np.sqrt(np.sum(a - b)**2))\n",
+    "    \n",
+    "fg, ax = plt.subplots(1, 1)\n",
+    "ax.plot(err)\n",
+    "_ = ax.set(xlabel='coorindate', ylabel='RMS error')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# How does peakFind2D work with the Roll?\n",
+    " - A very confusing point is the indexing used in meshgrid\n",
+    " - If you use indexing='ij' then the peak position needs to be plotted in matplotlib backwards (row,col)\n",
+    " - If you change the meshgrid indexing='xy' then this issue is less confusing BUT....\n",
+    " - Default indexing used to be 'ij' when I wrote this (and lots of other) code. So, now I stick with that convention."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Copy doubleRoll from ncempy.algo.peakFind\n",
+    "# to look at the algorithm\n",
+    "def doubleRoll(image,vec):\n",
+    "    return np.roll(np.roll(image, vec[0], axis=0), vec[1], axis=1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Create a single 2D Gaussian peak"
+   ]
+  },
+  {
+   "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4Xu3de8xdVd3g8VVADKIkKpPqWKSAl7wiItRBuQgmSOof3qKios2IsQpijEQjiWBiSxQUCIooF63BTOAPL2gUjKCCMlpIuAni2CiMgCBVwBl4B61y62QfBbn09tuXs9de6/Mk5p3RvdbZ6/PbWr59znmeBevXr1+ffBEgQIAAAQIECBAgQGAOAgsEyByUvQQBAgQIECBAgAABAjMBAeJBIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtReiAABAgQIECBAgAABAeIZIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtReiAABAgQIECBAgAABAeIZIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtReiAABAgQIECBAgAABAeIZIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtReiAABAgQIECBAgAABAeIZIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtReiAABAgQIECBAgAABAeIZIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtReiAABAgQIECBAgAABAeIZIECAAAECBAgQIEBgbgICZG7UXogAAQIECBAgQIAAAQHiGSBAgAABAgQIECBAYG4CAmRu1F6IAAECBAgQIECAAAEB4hkgQIAAAQIECBAgQGBuAgJkbtRe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RWbM4gLxFZ4zZnEBKwgMLyBAhjf2CgQIECBAgAABAgQI/EtAgHgUCBAgQIAAAQIECBCYm4AAmRu1FyJAgAABAgQIECBAQIB4BggQIECAAAECBAgQmJuAAJkbtRciQIAAAQIECBAgQECAeAYIECBAgAABAgQIEJibgACZG7UXyl3goYceSieffHJatWpVuu2229JOO+2Uli9fnj7+8Y+nrbfeOvfbn/v9XX311encc89Nl156abr55pvT9ttvn3bffff0iU98Ir32ta+d+/1M9QUbv4MPPnh2+zfeeGN6wQteMNWjDHrfzY+TPf7449MPfvCD9Oc//zk9+9nPTvvss8/sR2YvXLhw0Nee4ubN/4Y1Xpdccklq7Bqjgw46KB133HHpRS960RSP1Ns933fffemUU05J11xzTWr+d+xPf/pTes973pO+/vWvP+k1/LnQG7uNCDxOQIB4IAj8S+Coo45KZ555Znrve9+b9ttvv3T55Zenc845JzX//pe//GVOTxB429veli677LL01re+Ne29996p+UO98fr1r3+dzjjjjPTBD36Q2WYE7r///rTnnnvOgvevf/2rANmIVxNmBx54YNpuu+3S4YcfnhYtWpTuuuuudMUVV8z+0uCFL3yhZ+0xAn/5y1/SS1/60tQ8X81/D3fZZZd00003zf73bcGCBemGG26YGdb6dcstt8xMmt/ztGTJknThhRduNED8uVDrU+LcQwsIkKGF7T8JgeYP5OYfBD/84Q+n00477dF7/shHPpJOP/30dP3116c99thjEmeZ102uXr06veIVr0hPfepTH33JdevWpZe//OWzfzi888470zbbbDOv25nk65x44onpC1/4QnrXu941+7++A/LkMa5fvz698pWvTM3fRDfB+/SnP32Ss57nTTd/AfChD30off/7309veMMbHn3p888/PzV/cfD5z38+HX300fO8paxe6x//+Ee6++670/Oe97z04IMPpqc85SkbDBB/LmQ1NjdTmIAAKWygjtNOoHlbwgknnJB+//vfz/5m7JGv5q1Fu+66azr22GPTZz7zmXabV7bqYx/7WDr11FPTH/7wh9nb2HxtWODWW29NL3nJS9KXvvSl1Py/V65cKUA2QPXIW9QuuOCC9PrXvz79/e9/T1tttVXadtttPVobEfjsZz87eyvkVVddNftLgke+mu8Y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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 0x15cb65dc7c8>"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "known_peak = [6, 5]\n",
+    "\n",
+    "YY, XX = np.meshgrid(range(0,12),range(0,12),indexing='ij')\n",
+    "gg = gaussND.gauss2D(XX,YY,known_peak[1], known_peak[0],1,1)\n",
+    "gg = np.round(gg,decimals=3)\n",
+    "\n",
+    "plt.figure()\n",
+    "plt.imshow(gg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Roll the array 1 pixel in each direction\n",
+    " - Compare the original and the rolled version\n",
+    " - The peak will be moved by 1 pixel in each direction in each case\n",
+    " - Here I ignore the next nearest neighbors (-1,-1) for simplicity. (peakFind.doubleRoll2D does not ignore these).\n",
+    " - The peak will always be larger than the element-by-element comparison in each roll"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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vZcDHT9+vPeL8szMTGzfvj1WrVqVHM8F5wVee+21XsPx2WefRfVXvOr7QKqPN66+ab76hdkjTWBiYiKOHTu25EVV07x169bez+zpNFej6wvYc/UNl4ugjua1VUfzeoqmAbEHCBAgQIAAAQIECBBoWMAzIA2Dux0BAgQIECBAgACBkgU0ICVn39oJECBAgAABAgQINCygAWkY3O0IECBAgAABAgQIlCygASk5+9ZOgAABAgQIECBAoGEBDUjD4G5HgAABAgQIECBAoGQBDUjJ2bd2AgQIECBAgAABAg0LaEAaBnc7AgQIECBAgAABAiULaEBKzr61EyBAgAABAgQIEGhYQAPSMLjbESBAgAABAgQIEChZQANScvatnQABAgQIECBAgEDDAhqQhsHdjgABAgQIECBAgEDJAhqQkrNv7QQIECBAgAABAgQaFtCANAzudgQIECBAgAABAgRKFtCAlJx9aydAgAABAgQIECDQsIAGpGFwtyNAgAABAgQIECBQsoAGpOTsWzsBAgQIECBAgACBhgU0IA2Dux0BAgQIECBAgACBkgU0ICVn39oJECBAgAABAgQINCygAWkY3O0IECBAgAABAgQIlCygASk5+9ZOgAABAgQIECBAoGEBDUjD4G5HgAABAgQIECBAoGQBDUjJ2bd2AgQIECBAgAABAg0LaEAaBnc7AgQIECBAgAABAiULaEBKzr61EyBAgAABAgQIEGhYQAPSMLjbESBAgAABAgQIEChZQANScvatnQABAgQIECBAgEDDAhqQhsHdjgABAgQIECBAgEDJAhqQkrNv7QQIECBAgAABAgQaFtCANAzudgQIECBAgAABAgRKFtCAlJx9aydAgAABAgQIECDQsIAGpGFwtyNAgAABAgQIECBQsoAGpOTsWzsBAgQIECBAgACBhgU0IA2Dux0BAgQIECBAgACBkgU0ICVn39oJECBAgAABAgQINCygAWkY3O0IECBAgAABAgQIlCygASk5+9ZOgAABAgQIECBAoGEBDUjD4G5HgAABAgQIECBAoGQBDUjJ2bd2AgQIECBAgAABAg0LaEAaBnc7AgQIECBAgAABAiUL/A+LGu4DrMA+owAAAABJRU5ErkJggg==\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<matplotlib.legend.Legend at 0x15cb66dcb48>"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Compare only nearest neighbors\n",
+    "roll01 = gg > doubleRoll(gg, [0, 1])\n",
+    "roll10 = gg > doubleRoll(gg, [1, 0])\n",
+    "roll11 = gg > doubleRoll(gg, [1, 1])\n",
+    "roll_1_1 = gg > doubleRoll(gg, [-1, -1])\n",
+    "\n",
+    "fg,ax = plt.subplots(2,2)\n",
+    "ax[0,0].imshow(roll01)\n",
+    "ax[0,1].imshow(roll10)\n",
+    "ax[1,0].imshow(roll11)\n",
+    "ax[1,1].imshow(roll_1_1)\n",
+    "\n",
+    "for aa in ax.ravel():\n",
+    "    aa.scatter(known_peak[1], known_peak[0])\n",
+    "\n",
+    "ax[0,0].legend(['known peak position'])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Compare each rolled image\n",
+    " - use logical and to find the pixel which was highest in every comparison\n",
+    " - The local peak will be the only one left"
+   ]
+  },
+  {
+   "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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",
+       "        // 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>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4Xu3deaxnVbk3+FWC8CJKt0IHvRZaDGquyMxFJoEE6DJpplZQwUqAWMpgCAQDHcC0VURAgYDMFJaBP4q8rwgYBSOooEQL0gwK4ktF4WUQpBAwF27QUsbO/l3hMtS0ztpn77X38/klxntlr7We5/Msrfqe8/udM+OVV155JXkRIECAAAECBAgQIECgA4EZAkgHyo4gQIAAAQIECBAgQGAiIIC4CAQIECBAgAABAgQIdCYggHRG7SACBAgQIECAAAECBAQQd4AAAQIECBAgQIAAgc4EBJDOqB1EgAABAgQIECBAgIAA4g4QIECAAAECBAgQINCZgADSGbWDCBAgQIAAAQIECBAQQNwBAgQIECBAgAABAgQ6ExBAOqN2EAECBAgQIECAAAECAog7QIAAAQIECBAgQIBAZwICSGfUDiJAgAABAgQIECBAQABxBwgQIECAAAECBAgQ6ExAAOmM2kEECBAgQIAAAQIECAgg7gABAgQIECBAgAABAp0JCCCdUTuIAAECBAgQIECAAAEBxB0gQIAAAQIECBAgQKAzAQGkM2oHESBAgAABAgQIECAggLgDBAgQIECAAAECBAh0JiCAdEbtIAIECBAgQIAAAQIEBBB3gAABAgQIECBAgACBzgQEkM6oHUSAAAECBAgQIECAgADiDhAgQIAAAQIECBAg0JmAANIZtYMIECBAgAABAgQIEBBA3AECBAgQIECAAAECBDoTEEA6o3YQAQIECBAgQIAAAQICiDtAgAABAgQIECBAgEBnAgJIZ9QOIkCAAAECBAgQIEBAAHEHCBAgQIAAAQIECBDoTEAA6YzaQQQIECBAgAABAgQICCDuAAECBAgQIECAAAECnQkIIJ1RO4gAAQIECBAgQIAAAQHEHSBAgAABAgQIECBAoDMBAaQzagcRIECAAAECBAgQICCAuAMECBAgQIAAAQIECHQmIIB0Ru0gAgQIECBAgAABAgQEEHeAAAECBAgQIECAAIHOBASQzqgdRIAAAQIECBAgQICAAOIOECBAgAABAgQIECDQmYAA0hm1gwgQIECAAAECBAgQEEDcAQIECBAgQIAAAQIEOhMQQDqjdhABAgQIECBAgAABAgKIO0CAAAECBAgQIECAQGcCAkhn1A4iQIAAAQIECBAgQEAAcQcIECBAgAABAgQIEOhMQADpjNpBBAgQIECAAAECBAgIIO4AAQIECBAgQIAAAQKdCQggnVE7iAABAgQIECBAgAABAcQdIECAAAECBAgQIECgMwEBpDNqBxEgQIAAAQIECBAgIIC4AwQIECBAgAABAgQIdCYggHRG7SACBAgQIECAAAECBAQQd4AAAQIECBAgQIAAgc4EBJDOqB1EgAABAgQIECBAgIAA4g4QIECAAAECBAgQINCZgADSGbWDCBAgQIAAAQIECBAQQNwBAgQIECBAgAABAgQ6ExBAOqN2EAECBAgQIECAAAECAog7QIAAAQIECBAgQIBAZwICSGfUDiJAgAABAgQIECBAQABxBwgQIECAAAECBAgQ6ExAAOmM2kEECBAgQIAAAQIECAgg7gABAgQIECBAgAABAp0JCCCdUTuIAAECBAgQIECAAAEBxB0gQIAAAQIECBAgQKAzAQGkM2oHESBAgAABAgQIECAggLgDBAgQIECAAAECBAh0JiCAdEbtIAIECBAgQIAAAQIEBBB3gAABAgQIECBAgACBzgQEkM6oHUSAAAECBAgQIECAgADiDhAgQIAAAQIECBAg0JmAANIZtYOmU+Dpp59ON954Y5o1a1ZaZ511pvMoexMgQIAAgcELLFu2LD388MNp9uzZaYMNNhh8PxoYloAAMqx5qXYFAldeeWWaM2cOHwIECBAgQCBDYNGiRenzn/98xgqPEigXEEDKDe1QgcDixYvTrrvumjZP/5bWTetVUJESCBAgQIBAvQJ/Tf+R/me6I/3qV79Ku+yyS72FqmyUAgLIKMcar6lf//rXabvttks7pD3TejPeHQ9AxwQIECBAIEPgP17593R7uindddddadttt81Y6VEC5QICSLmhHSoQEEAqGIISCBAgQGAwAgLIYEY1ykIFkFGONV5TAki8meuYAAECBKYuIIBM3c7KcgEBpNzQDhUICCAVDEEJBAgQIDAYAQFkMKMaZaECyCjHGq8pASTezHVMgAABAlMXEECmbmdluYAAUm5ohwoEBJAKhqAEAgQIEBiMgAAymFGNslABZJRjjdeUABJv5jomQIAAgakLCCBTt7OyXEAAKTe0QwUCAkgFQ1ACAQIECAxGQAAZzKhGWagAMsqxxmtKAIk3cx0TIECAwNQFBJCp21lZLiCAlBvaoQIB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RGAVAgKIK9KngADSp37Qs59++un0wQ9+cPJB88WLF6c11lhjItG8Lat5e9YXvvCFtHDhwiwdASSLy8MjFCgJIM0vIfz0//B7QEZ4LbREYIUCAojL0aeAANKnfuCzzzvvvHTcccdNfgrWZz7zmfSnP/0pnX/++WnddddNd911V9poo42ydASQLC4Pj1CgJIA0HH4T+ggvhZYIrERAAHE9+hQQQPrUD372okWLJr/347777kvveMc70t57753OOOOMtMkmm2TLCCDZZBaMTKA0gLzKseSp96Wf/K8t07N/f0f63/7b39L/uelvs3/vx5tp/RjekV027YxCQAAZxRgH24QAMtjRKfz1AgKI+xBdoK0AMh2OAsh0qNqTQJmAAFLmZ3WZgABS5md1JQICSCWDUEZvAgJIb/QOJjBIAQFkkGMbTdECyGhGGbsRAST2/HWfkgDiFhAgkCMggORoebZtAQGkbVH79SIggPTC7tCKBASQioahFAIDEBBABjCkEZcogIx4uJFaE0AiTVuvyxMQQNwLAgRyBASQHC3Pti0ggLQtar9eBASQXtgdWpGAAFLRMJRCYAACAsgAhjTiEgWQEQ83UmsCSKRp69V3QNwBAgRKBQSQUkHrSwQEkBI9a6sREECqGYVCehLwHZCe4B1LYKACAshABzeSsgWQkQwyehsCSPQboH8BxB0gQCBHQADJ0fJs2wICSNui9utFQADphd2hFQkIIBUNQykEBiAggAxgSCMuUQAZ8XAjtSaARJq2XpcnIIC4FwQI5AgIIDlanm1bQABpW9R+vQgIIL2wO7QiAQGkomEohcAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm6k1gSQSNPWKwECBAiUCgggpYLWlwgIICV61lYjIIBUMwqFECBAgMAABASQAQxpxCUKICMebqTWBJBI09YrAQIECJQKCCClgtaXCAggJXrWViMggFQzCoUQIECAwAAEBJABDGnEJQogIx5upNYEkEjT1isBAgQIlAoIIKWC1pcICCAletZWIyCAVDMKhRAgQIDAAAQEkAEMacQlCiAjHm7NrT366KPp1FNPTTfddFNaunRp2nDDDdPuu++eTjnllPThD384u3QBJJvMAgIECBAILCCABB5+Ba0LIBUMIVoJf/nLX9LHPvax9Pzzz6ejjjoqbbzxxumBBx5Il1xySZoxY0a6995708yZM7NYBJAsLg8TIECAQHABAST4Bei5fQGk5wFEPP7iiy9OX/7yl9MPf/jDtO+++75GcM0116QDDzwwnXvuuem4447LohFAsrg8TIAAAQLBBQSQ4Beg5/YFkJ4HEPH4b3zjG+mkk05Kd9xxR9p+++1fI7jtttvSzjvvnBYsWJC+9KUvZdEIIFlcHiZAgACB4AICSPAL0HP7AkjPA4h4fBM8dthhh7Tjjjums88+O82aNWvyFqzjjz8+Pffcc5Ngst5662XRCCBZXB4mQIAAgeACAkjwC9Bz+wJIzwOIevxll12WTj755NR8HuTV12677ZauvfbatP7666+UpfnQevOv17+WLFmS5syZk3ZIe6b1Zrw7Kqu+CRAgQIDAagkIIKvF5KFpEhBApgnWtisX+P73v58uvfTSNHv27LTZZptNPnh+1llnTT6cfuONN6Z11113hRvMmzcvzZ8/f7n/XABx8wgQIECAwKoFBJBVG3li+gQEkOmztfMKBJrvcnz2s59Nzdumtthii9ee+slPfjIJJN/85jfTiSeeuEI/3wFxtQgQIECAQJmAAFLmZ3WZgABS5mf1FASa3/fx1FNPpfvuu+8tq5vPfjRvxbr++uuzdvYZkCwuDxMgQIBAcAEBJPgF6Ll9AaTnAUQ8/iMf+cik7d///vdvaP+VV15J73rXu9Kuu+6abrjhhiwaASSLy8MECBAgEFxAAAl+AXpuXwDpeQARj99///3TddddlxYvXpx22mmn1wiuvvrqdNBBB01+G/rXv/71LBoBJIvLwwQIECAQXEAACX4Bem5fAOl5ABGPv/XWW9Mee+yR1l577XT00UenTTfddPIh9OYnY73nPe9Jv/nNb9J73/veLBoBJIvLwwQIECAQXEAACX4Bem5fAOl5AFGP/+1vf5tOPfXUdOedd6bHH398Ejz23nvvyXc+PvjBD2azCCDZZBYQIECAQGABASTw8CtoXQCpYAhKKBcQQMoN7UCAAAECcQQEkDizrrFTAaTGqagpW0AAySazgAABAgQCCwgggYdfQesCSAVDUEK5gABSbmgHAgQIEIgjIIDEmXWNnQogNU5FTdkCAkg2mQUECBAgEFhAAAk8/ApaF0AqGIISygUEkHJDOxAgQIBAHAEBJM6sa+xUAKlxKmrKFhBAssksIECAAIHAAgJI4OFX0LoAUsEQlFAuIICUG9qBAAECBOIICCBxZl1jpwJIjVNRU7aAAJJNZgEBAgQIBBYQQAIPv4LWBZAKhqCEcgEBpNzQDgQIECAQR0AAiTPrGjsVQGqcipqyBQSQbDILCBAgQCCwgAASePgVtC6AVDAEJZQLCCDlhnYgQIAAgTgCAkicWdfYqQBS41TUlC0ggGSTWUCAAAECgQUEkMDDr6B1AaSCISihXEAAKTe0AwECBAjEERBA4sy6xk4FkBqnoqZsAQEkm8wCAgQIEAgsIIAEHn4FrQsgFQxBCeUCAki5oR0IECBAII6AABJn1jV2KoDUOBU1ZQsIINlkFhAgQIBAYAEBJPDwK2hdAKlgCEooFxBAyg3tQIAAAQJxBASQOLOusVMBpMapqClbQADJJrOAAAECBAILCCCBh19B6wJIBUNQQrmAAFJuaAcCBAgQiCMggMSZdY2dCiA1TkVN2QICSDaZBQQIECAQWEAACTz8CloXQCoYghLKBQSQckM7ECBAgEAcAQEkzqxr7FQAqXEqasoWEECyySwgQIAAgcACAkjg4VfQugBSwRCUUC4ggJQb2oEAAQIE4ggIIHFmXWOnAkiNU1FTtoAAkk1mAQECBAgEFhBAAg+/gtYFkAqGoIRyAQGk3NAOBAgQIBBHQACJM+saOxVAapyKmrIFBJBsMgsIECBAILCAABJ4+BW0LoBUMAQllAsIIOWGdiBAgACBOAICSJxZ19ipAFLjVNSULSCAZJNZQIAAAQKBBQSQwMOvoHUBpIIhKKFcQAApN7QDAQIECMQREEDizLrGTgWQGqeipmwBASSbzAICBAgQCCwggAQefgWtCyAVDEEJ5QICSLmhHQgQIEAgjoAAEmfWNXYqgNQ4FTVlCwgg2WQWECBAgEBgAQEk8PAraF0AqWAISigXEEDKDe1AgAABAnEEBJA4s66xUwGkxqmoKVtAAMkms4AAAQIEAgsIIIGHX0HrAkgFQ1BCuYAAUm5oBwIECBCIIyCAxJl1jZ0KIDVORU3ZAgJINpkFBAgQIBBYQAAJPPwKWhdAKhiCEsoFBJByQzsQIECAQBwBASTOrGvsVACpcSpqyhYQQLLJLCBAgACBwAICSODhV9C6AFLBEJRQLiCAlBvagQABAgTiCAggcWZdY6cCSI1TUVO2gACSTWYBAQIECAQWEEACD7+C1gWQCoaghHIBAaTc0A4ECBAgEEdAAIkz6xo7FUBqnIqasgUEkGwyCwgQIEAgsIAAEnj4FbQugFQwBCWUCwgg5YZ2IECAAIE4AgJInFnX2KkAUuNU1JQtIIBkk1lAgAABAoEFBJDAw6+gdQGkgiEooVxAACk3tAMBAgQIxBEQQOLMusZOBZAap6KmbAEBJJvMAgIECBAILCCABB5+Ba0LIBUMQQnlAgJIuaEdCBAgQCCOgAASZ9Y1diqA1DgVNWULCCDZZBYQIECAQGABASTw8CtoXQCpYAhKKBcQQMoN7UCAAAECcQQEkDizrrFTAaTGqagpW0AAySazgAABAgQCCwgggYdfQesCSAVDUEK5gABSbmgHAgQIEIgjIIDEmXWNnQogNU5FTdkCAkg2mQUECBAgEFhAAAk8/ApaF0AqGIISygUEkHJDOxAgQIBAHAEBJM6sa+xUAKlxKmrKFhBAssksIECAAIHAAgJI4OFX0LoAUsEQlFAuIICUG9qBAAECBOIICCBxZl1jpwJIjVNRU7aAAJJNZgEBAgQIBBYQQAIPv4LWBZAKhqCEcgEBpNzQDgQIECAQR0AAiTPrGjsVQGqcipqyBQSQbDILCBAgQCCwgAASePgVtC6AVDAEJZQLCCDlhnYgQIAAgTgCAkicWdfYqQBS41TUlC0ggGSTWUCAAAECgQUEkMDDr6B1AaSCISihXEAAKTe0AwECBAjEERBA4sy6xk4FkBqnoqZsAQEkm8wCAgQIEAgsIIAEHn4FrQsgFQxBCeUCAki5oR0IECBAII6AABJn1jV2KoDUOBU1ZQsIINlkFhAgQIBAYAEBJPDwK2hdAKlgCGMp4bnnnktnn312uuuuu9Kdd96ZnnjiiXTooYemK6644i0tvvTSS+mss85KCxcuTI8++mjaaKON0ty5c9MJJ5yQ1lhjjWwSASSbzAICBAgQCCwggAQefgWtCyAVDGEsJTz88MNp4403Tu973/vSdtttl66//voVBpCjjz46XXLJJenwww9PO++8c7r11lvT5Zdfnpr//KKLLsomEUCyySwgQIAAgcACAkjg4VfQugBSwRDGUsI//vGP9PTTT6f3v//96cUXX0xvf/vblxtA7r333rTVVlulY445Jp133nmvtX/sscemCy64IN1zzz1piy22yGIRQLK4PEyAAAECwQUEkOAXoOf2BZCeBzDW41cWQE455ZR0+umnpwcffHDyHZNXXw899FDaZJNN0sknn5xOO+20LBoBJIvLwwQIECAQXEAACX4Bem5fAOl5AGM9fmUBZPbs2ZPvcjSfEXnza8MNN0zbbLNNuuGGG7JoBJAsLg8TIECAQHABAST4Bei5fQGk5wGM9fiVBZDm7VVrrbXW5MPqb35tu+226YUXXkjN27RW9Fq6dGlq/vX615IlS9KcOXPSDmnPtN6Md4+VVV8ECBAgQKAVAQGkFUabTFFAAJkinGUrF1hZANl0001T852O5oPnb341H0h/8skn0wMPPLDCA+bNm5fmz5+/3H8ugLiZBAgQIEBg1QICyKqNPDF9AgLI9NmG3tl3QEKPX/MECBAgULmAAFL5gEZengAy8gH31Z7PgPQl71wCBAgQILBqAQFk1UaemD4BAWT6bEPvvLIA0vyUqzPOOMNPwQp9QzRPgAABAn0KCCB96jtbAHEHpkVgZQGk+QlYzU+6WtHvAbn77rvTlltumVWXn4KVxeVhAgQIEAguIIAEvwA9ty+A9DyAsR1/4YUXpmeeeSa9/PLL6Wtf+9okaHzqU5+atLnffvu9FiyOPPLItGDBgslvQt9ll13S4sWLJ78J/YgjjkiXXnppNosAkk1mAQECBAgEFhBAAg+/gtYFkAqGMKYSZs2alR555JHlttQEjMMOO2zyz5rvkJx55plp4cKF6bHHHkszZ85Mc+fOTSeeeGJac801s0kEkGwyCwgQIEAgsIAAEnj4FbQugFQwBCWUCwgg5YZ2IECAAIE4AgJInFnX2KkAUuNU1JQtIIBkk1lAgAABAoEFBJDAw6+gdQGkgiEooVxAACk3tAMBAgQIxBEQQOLMusZOBZAap6KmbAEBJJvMAgIECBAILCCABB5+Ba0LIBUMQQnlAgJIuaEdCBAgQCCOgAASZ9Y1diqA1DgVNWULCCDZZBYQIECAQGABASTw8CtoXQCpYAhKKBcQQMoN7UCAAAECcQQEkDizrrFTAaTGqagpW0AAySazgAABAgQCCwgggYdfQesCSAVDUEK5gABSbmgHAgQIEIgjIIDEmXWNnQogNU5FTdkCAkg2mQUECBAgEFhAAAk8/ApaF0AqGIISygUEkHJDOxAgQIBAHAEBJM6sa+xUAKlxKmrKFhBAssksIECAAIHAAgJI4OFX0LoAUsEQlFAuIICUG9qBAAECBOIICCBxZl1jpwJIjVNRU7aAAJJNZgEBAgQIBBYQQAIPv4LWBZAKhqCEcgEBpNzQDgQIECAQR0AAiTPrGjsVQGqcipqyBQSQbDILCBAgQCCwgAASePgVtC6AVDAEJZQLCCDlhnYgQIAAgTgCAkicWdfYqQBS41TUlC0ggGSTWUCAAAECgQUEkMDDr6B1AaSCISihXEAAKTe0AwECBAjEERBA4sy6xk4FkBqnoqZsAQEkm8wCAgQIEAgsIIAEHn4FrQsgFQxBCeUCAki5oR0IECBAII6AABJn1jV2KoDUOBU1ZQsIINlkFhAgQIBAYAEBJPDwK2hdAKlgCEooFxBAyg3tQIAAAQJxBASQOLOusVMBpMapqClbQADJJrOAAAECBAILCCCBh19B6wJIBUNQQrmAAFJuaAcCBAgQiCMggMSZdY2dCiA1TkVN2QICSDaZBQQIECAQWEAACTz8CloXQCoYghLKBQSQckM7ECBAgEAcAQEkzqxr7FQAqXEqasoWEECyySwgQIAAgcACAkjg4VfQugBSwRCUUC4ggJQb2oEAAQIE4ggIIHFmXWOnAkiNU1FTtoAAkk1mAQECBAgEFhBAAg+/gtYFkAqGoIRyAQGk3NAOBAgQIBBHQACJM+saOxVAapyKmrIFBJBsMgsIECBAILCAABJ4+BW0LoBUMAQllAsIIOWGdiBAgACBOAICSJxZ19ipAFLjVNSULSCAZJNZQIAAAQKBBQSQwMOvoHUBpIIhKKFcQAApN7QDAQIECMQREEDizLrGTgWQGqeipmwBASSbzAICBAgQCCwggAQefgWtCyAVDEEJ5QICSLmhHQgQIEAgjoAAEmfWNXYqgNQ4FTVlCwgg2WQWECBAgEBgAQEk8PAraF0AqWAISigXEEDKDe1AgAABAnEEBJA4s66xUwGkxqmoKVtAAMkms4AAAQIEAgsIIIGHX0HrAkgFQ1BCuYAAUm5oBwIECBCIIyCAxJl1jZ0KIDVORU3ZAgJINpkFBAgQIBBYQAAJPPwKWhdAKhiCEsoFBJByQzsQIECAQBwBASTOrGvsVACpcSpqyhYQQLLJLCBAgACBwAICSODhV9C6AFLBEJRQLiCAlBvagQABAgTi1DoR0gAADUpJREFUCAggcWZdY6cCSI1TUVO2gACSTWYBAQIECAQWEEACD7+C1gWQCoaghHIBAaTc0A4ECBAgEEdAAIkz6xo7FUBqnIqasgUEkGwyCwgQIEAgsIAAEnj4FbQugFQwBCWUCwgg5YZ2IECAAIE4AgJInFnX2KkAUuNU1JQtIIBkk1lAgAABAoEFBJDAw6+gdQGkgiEooVxg8eLFadddd02bp39L66b1yje0AwECBAgQGLHAX9N/pP+Z7ki/+tWv0i677DLiTrVWo4AAUuNU1JQtcOWVV6Y5c+Zkr7OAAAECBAhEFli0aFH6/Oc/H5lA7z0ICCA9oDuyfYGnn3463XjjjWnWrFlpnXXWKTpgyZIlkzDT/I/yv/7rvxbtFWUxs/xJM2OWL5C/wj1jtiKBZcuWpYcffjjNnj07bbDBBvlQVhAoEBBACvAsHafAq58nueuuu9K22247ziZb7opZPigzZvkC+SvcM2b5AlYQmH4BAWT6jZ0wMAF/YOcPjBmzfIH8Fe4Zs3yB/BXuWb6ZFQRyBQSQXDHPj17AHz75I2bGLF8gf4V7xixfIH+Fe5ZvZgWBXAEBJFfM86MX8IdP/oiZMcsXyF/hnjHLF8hf4Z7lm1lBIFdAAMkV8/zoBZYuXZoWLFiQjjjiiPS+971v9P220SCzfEVmzPIF8le4Z8zyBawgMP0CAsj0GzuBAAECBAgQIECAAIF/CgggrgIBAgQIECBAgAABAp0JCCCdUTuIAAECBAgQIECAAAEBxB0gQIAAAQIECBAgQKAzAQGkM2oHESBAgAABAgQIECAggLgDBAgQIECAAAECBAh0JiCAdEbtoNoFXnrppXTWWWelhQsXpkcffTRttNFGae7cuemEE05Ia6yxRu3ld17fnXfemRYtWpRuvvnm9NBDD6V11103bb755umkk05Ke+21V+f1DPXAxm/PPfeclH///fenzTbbbKitTGvdzY+TPfXUU9OPfvSj9Oc//zmtv/76aYcddpj8yOwNN9xwWs8e4ubN/4Y1XjfddFNq7Bqj3XffPZ1yyinpwx/+8BBbaq3m5557Lp199tnprrvuSs3/jj3xxBPp0EMPTVdcccVbzvDnQmvsNiLwBgEBxIUg8E+Bo48+Ol1yySXp8MMPTzvvvHO69dZb0+WXX56a//yiiy7i9CaBAw88MN1yyy3p05/+dNp2221T84d64/W73/0uXXzxxemoo45itgqB559/Pm211VaTwPvXv/5VAFmBVxPMdtttt7TOOuukww47LM2cOTM99dRT6bbbbpt80eBDH/qQu/Y6gb/85S/pYx/7WGruV/Pfw4033jg98MADk/99mzFjRrr33nsnhlFfDz/88MSk+T1P2223Xbr++utXGED8uRD1luh7ugUEkOkWtv8gBJo/kJu/CB5zzDHpvPPOe63mY489Nl1wwQXpnnvuSVtsscUgeumqyMWLF6ftt98+rb322q8duWzZsrT11ltP/nL45JNPpjXXXLOrcgZ5zhlnnJG+9a1vpUMOOWTy774D8tYxvvLKK+njH/94ar4S3QTed77znYOcdZdFN18A+PKXv5x++MMfpn333fe1o6+55prUfOHg3HPPTccdd1yXJVV11j/+8Y/09NNPp/e///3pxRdfTG9/+9uXG0D8uVDV2BQzMgEBZGQD1c7UBJq3JZx++unpwQcfnHxl7NVX89aiTTbZJJ188snptNNOm9rmwVZ95StfSeecc0764x//OHkbm9fyBR555JH00Y9+NF144YWp+b/nz58vgCyH6tW3qF133XVpn332SX//+9/T2972trTWWmu5WisQ+MY3vjF5K+Qdd9wx+SLBq6/mO0bNd3ebt6196Utf4pfSSgOIPxdcEQLTJyCATJ+tnQckMHv27Ml3OZr3Ar/51bx3eptttkk33HDDgDrqr9SDDz44XX311emZZ56ZfC7Ea/kC+++//+S7RM1b/ZrwIYAs3+nEE0+cvM3qF7/4xeQLAY1X8zai5rsiTdDdaaedXLE3CTTBo/l8zI477jj5rMOsWbMmb8E6/vjjJ2+VbP75euutx20VAcSfC64I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\" width=\"640\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<matplotlib.collections.PathCollection at 0x15cb6716f08>"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "final = roll01 & roll10 & roll11 & roll_1_1\n",
+    "\n",
+    "fg,ax = plt.subplots(1,1)\n",
+    "ax.imshow(final)\n",
+    "ax.scatter(known_peak[1],known_peak[0])\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Find the peak using where\n",
+    " - We have a bool array above.\n",
+    " - np.where will return the elements of the True values which correspond to the peak position(s)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[[6]\n",
+      " [5]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "peak_position = np.array(np.where(final))\n",
+    "print(peak_position)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "ncempy dev",
+   "language": "python",
+   "name": "ncempy"
+  },
+  "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.5"
+  },
+  "widgets": {
+   "application/vnd.jupyter.widget-state+json": {
+    "state": {},
+    "version_major": 2,
+    "version_minor": 0
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}


Test patch:
diff --git a/ncempy/test/test_algo_peakfind.py b/ncempy/test/test_algo_peakfind.py
new file mode 100644
index 0000000..a349027
--- /dev/null
+++ b/ncempy/test/test_algo_peakfind.py
@@ -0,0 +1,69 @@
+"""
+Tests for the algo.peak_find module.
+"""
+
+import pytest
+from pathlib import Path
+
+import numpy as np
+
+import ncempy.io.emd
+import ncempy.algo.peak_find
+
+
+class Test_peak_find:
+    """ Test the algo.peak_find module.
+
+    """
+
+    @pytest.fixture
+    def data_location(self):
+        """Get the location of the test data files"""
+        test_path = Path(__file__).resolve()
+        root_path = test_path.parents[1]
+        return root_path / Path('data')
+
+    @pytest.fixture
+    def one_peak_2d(self):
+        """Generate an image with a single peak in it for simple testing"""
+        im = np.zeros((64, 32), dtype=np.uint8)
+        im[31, 15] = 1
+        return im
+
+    @pytest.fixture
+    def one_peak_3d(self):
+        """Generate an image with a single peak in it for simple testing"""
+        im = np.zeros((64, 32, 16), dtype=np.uint8)
+        im[31, 15, 7] = 1
+        return im
+
+    @pytest.fixture
+    def one_gaussian_2d(self):
+        """Generate an image with a single gaussian in it for simple testing"""
+        peaks = np.asarray(((10, 11), (33, 14)))
+        im = ncempy.algo.peak_find.peaksToImage(peaks, (64, 32), (1, 2), (5, 5))
+        return im
+    
+    def test_doubleRoll(self, one_peak_2d):
+        assert one_peak_2d[31, 15] == 1
+        one_peak_roll = ncempy.algo.peak_find.doubleRoll(one_peak_2d, (1, 1))
+        assert one_peak_roll[32, 16] == 1
+
+    def test_tripleRoll(self, one_peak_3d):
+        assert one_peak_3d[31, 15, 7] == 1
+        one_peak_roll = ncempy.algo.peak_find.doubleRoll(one_peak_3d, (1, 1))
+        assert one_peak_roll[32, 16, 8] == 1
+
+    def test_peakFind2D(self, one_gaussian_2d):
+        peaks = ncempy.algo.peak_find.peakFind2D(one_gaussian_2d, 0.5)
+        assert np.all(peaks == ((10, 11), (33, 14)))
+
+    def test_lattice2D_norm(self):
+        u = (1, 0)
+        v = (0, 1)
+        a = 1.5
+        b = 1.75
+        n = (3, 3)
+        lat = ncempy.algo.peak_find.lattice2D_norm(u, v, a, b, (0, 0), n)
+        assert np.allclose(lat[1, :], (1.5, 0))
+