Example #1
0
def fit_nominal_lens_2d(thickness,
                        pixelsize,
                        radius4fit,
                        p0=[20e-6, 1.005e-6, -.005e-6, -.005e-6],
                        bounds=([10e-6, -2.05e-6, -2.05e-6,
                                 -2.05e-6], [50e-6, 2.05e-6, 2.05e-6,
                                             2.05e-6]),
                        saveFigFlag=False,
                        str4title='',
                        kwargs4fit={}):

    #    thickness = center_CM_2darray(thickness)

    xmatrix, ymatrix = wpu.grid_coord(thickness, pixelSize)
    r2 = np.sqrt(xmatrix**2 + ymatrix**2)
    args4fit = np.where(r2.flatten() < radius4fit)

    mask = xmatrix * np.nan
    mask[np.where(r2 < radius4fit)] = 1.0

    data2fit = thickness.flatten()[args4fit]

    xxfit = xmatrix.flatten()[args4fit]
    yyfit = ymatrix.flatten()[args4fit]

    xyfit = [xxfit, yyfit]

    # FIT

    popt, pcov = curve_fit(_2Dparabol_4_fit,
                           xyfit,
                           data2fit,
                           p0=p0,
                           bounds=bounds,
                           method='trf',
                           **kwargs4fit)

    wpu.print_blue("Nominal Parabolic 2D Fit")
    wpu.print_blue("Curv Radius, xo, yo, offset")
    wpu.print_blue(popt)

    wpu.print_blue("Nominal Parabolic 2D Fit: Radius of 1 face  / nfaces, " +
                   "x direction: {:.4g} um".format(popt[0] * 1e6))

    lim_x = np.argwhere(xmatrix[0, :] <= -radius4fit * 1.01)[-1, 0]
    lim_y = np.argwhere(ymatrix[:, 0] <= -radius4fit * 1.01)[-1, 0]

    fitted = _2Dparabol_4_fit([xmatrix, ymatrix], popt[0], popt[1], popt[2],
                              popt[3])

    if (lim_x <= 1 or lim_y <= 1):
        thickness_cropped = thickness * mask
        fitted_cropped = fitted * mask
    else:
        thickness_cropped = (thickness[lim_y:-lim_y + 1, lim_x:-lim_x + 1] *
                             mask[lim_y:-lim_y + 1, lim_x:-lim_x + 1])
        fitted_cropped = (fitted[lim_y:-lim_y + 1, lim_x:-lim_x + 1] *
                          mask[lim_y:-lim_y + 1, lim_x:-lim_x + 1])

    return (thickness_cropped, fitted_cropped, popt)
Example #2
0
def center_lens_array_max(array, pixelSize, radius):
    '''
    crop the array in order to have the max at the center of the array
    '''

    array = np.copy(array)

    xx, yy = wpu.grid_coord(array, pixelSize)
    r2 = np.sqrt(xx**2 + yy**2)

    mask = 0 * xx
    mask[np.where((r2 < radius * 1.1) & (r2 > radius * .9))] = 1.0

    mean_at_r2 = np.mean(array * mask)
    mask2 = 0 * xx
    mask2[np.where(array > mean_at_r2)] = 1.0

    i, j = np.mgrid[0:array.shape[0], 0:array.shape[1]]

    center_i = int(np.average(i, weights=array * mask2))
    center_j = int(np.average(j, weights=array * mask2))

    if 2 * center_i > array.shape[0]:
        array = array[2 * center_i - array.shape[0]:, :]
    else:
        array = array[0:2 * center_i, :]

    if 2 * center_j > array.shape[1]:
        array = array[:, 2 * center_j - array.shape[1]:]
    else:
        array = array[:, 0:2 * center_j]

    return array
Example #3
0
def center_lens_array_max_fit(array, pixelSize, radius4fit=100e-6):
    '''
    crop the array in order to have the max at the center of the array. It uses
    a fitting procedure of a 2D parabolic function to determine the center

    '''

    radius4fit = _biggest_radius(array, pixelSize, radius4fit * .8)

    array = np.copy(array)

    xx, yy = wpu.grid_coord(array, pixelSize)

    (_, _, fitParameters) = fit_parabolic_lens_2d(array,
                                                  pixelSize,
                                                  radius4fit=radius4fit)

    center_i = np.argmin(np.abs(yy[:, 0] - fitParameters[2]))
    center_j = np.argmin(np.abs(xx[0, :] - fitParameters[1]))

    if 2 * center_i > array.shape[0]:
        array = array[2 * center_i - array.shape[0]:, :]
    else:
        array = array[0:2 * center_i, :]

    if 2 * center_j > array.shape[1]:
        array = array[:, 2 * center_j - array.shape[1]:]
    else:
        array = array[:, 0:2 * center_j]

    return array
def _plot_profile(data, pixelsize, title, arg4main={'cmap': 'viridis'}):

    xxGrid, yyGrid = wpu.grid_coord(data, pixelsize)

    wpu.plot_profile(xxGrid*1e6, yyGrid*1e6, data[::-1, :],
                     xlabel=r'$x [\mu m]$', ylabel=r'$y [\mu m]$',
                     title=title,
                     xunit='\mu m', yunit='\mu m',
                     arg4main=arg4main)
Example #5
0
def _lsq_fit_parabola(zz, pixelsize, mode='2D'):

    xx, yy = wpu.grid_coord(zz, pixelsize)

    if np.all(np.isfinite(zz)):  # if there is no nan
        f = zz.flatten()
        x = xx.flatten()
        y = yy.flatten()
    else:
        argNotNAN = np.isfinite(zz)
        f = zz[argNotNAN].flatten()
        x = xx[argNotNAN].flatten()
        y = yy[argNotNAN].flatten()

    if '2D' in mode:
        X_matrix = np.vstack([x**2 + y**2, x, y, x * 0.0 + 1]).T

        beta_matrix = np.linalg.lstsq(X_matrix, f)[0]

        fit = (beta_matrix[0] * (xx**2 + yy**2) + beta_matrix[1] * xx +
               beta_matrix[2] * yy + beta_matrix[3])

    elif '1Dx' in mode:
        X_matrix = np.vstack([x**2, x, y, x * 0.0 + 1]).T

        beta_matrix = np.linalg.lstsq(X_matrix, f)[0]

        fit = (beta_matrix[0] * (xx**2) + beta_matrix[1] * xx +
               beta_matrix[2] * yy + beta_matrix[3])

    elif '1Dy' in mode:
        X_matrix = np.vstack([y**2, x, y, x * 0.0 + 1]).T

        beta_matrix = np.linalg.lstsq(X_matrix, f)[0]

        fit = (beta_matrix[0] * (yy**2) + beta_matrix[1] * xx +
               beta_matrix[2] * yy + beta_matrix[3])

    if np.all(np.isfinite(zz)):
        mask = zz * 0.0 + 1.0
    else:
        mask = zz * 0.0 + 1.0
        mask[~argNotNAN] = np.nan

    R_o = 1 / 2 / beta_matrix[0]
    x_o = -beta_matrix[1] / beta_matrix[0] / 2
    y_o = -beta_matrix[2] / beta_matrix[0] / 2
    offset = beta_matrix[3]

    popt = [R_o, x_o, y_o, offset]

    return fit * mask, popt
        def _fit_lin_surface(zz, pixelsize):

            from numpy.polynomial import polynomial

            xx, yy = wpu.grid_coord(zz, pixelsize)

            f = zz.flatten()
            deg = np.array([1, 1])
            vander = polynomial.polyvander2d(xx.flatten(), yy.flatten(), deg)
            vander = vander.reshape((-1, vander.shape[-1]))
            f = f.reshape((vander.shape[0],))
            c = np.linalg.lstsq(vander, f)[0]

            print(c)

            return polynomial.polyval2d(xx, yy, c.reshape(deg+1))
Example #7
0
def fit_parabolic_lens_2d(thickness, pixelsize, radius4fit, mode='2D'):

    # FIT
    xx, yy = wpu.grid_coord(thickness, pixelSize)
    mask = xx * np.nan

    lim_x = np.argwhere(xx[0, :] <= -radius4fit * 1.01)[-1, 0]
    lim_y = np.argwhere(yy[:, 0] <= -radius4fit * 1.01)[-1, 0]

    if '2D' in mode:

        r2 = np.sqrt(xx**2 + yy**2)
        mask[np.where(r2 < radius4fit)] = 1.0

    elif '1Dx' in mode:
        mask[np.where(xx**2 < radius4fit)] = 1.0
        lim_y = 2

    elif '1Dy' in mode:
        mask[np.where(yy**2 < radius4fit)] = 1.0
        lim_x = 2

    fitted, popt = _lsq_fit_parabola(thickness * mask, pixelSize, mode=mode)

    wpu.print_blue("Parabolic 2D Fit")
    wpu.print_blue("Curv Radius, xo, yo, offset")
    wpu.print_blue(popt)

    wpu.print_blue("Parabolic 2D Fit: Radius of 1 face  / nfaces, " +
                   "x direction: {:.4g} um".format(popt[0] * 1e6))

    if (lim_x <= 1 or lim_y <= 1):
        thickness_cropped = thickness * mask
        fitted_cropped = fitted * mask
    else:
        thickness_cropped = (thickness[lim_y:-lim_y + 1, lim_x:-lim_x + 1] *
                             mask[lim_y:-lim_y + 1, lim_x:-lim_x + 1])
        fitted_cropped = (fitted[lim_y:-lim_y + 1, lim_x:-lim_x + 1] *
                          mask[lim_y:-lim_y + 1, lim_x:-lim_x + 1])

    return (thickness_cropped, fitted_cropped, popt)
Example #8
0
def plot_integration(integrated,
                     pixelsize,
                     titleStr='Title',
                     ctitle=' ',
                     max3d_grid_points=101,
                     plotProfile=True,
                     plot3dFlag=True,
                     saveFigFlag=False,
                     saveFileSuf='graph',
                     **kwarg4surf):
    '''
    TODO: Write Docstring
    '''

    xxGrid, yyGrid = wpu.grid_coord(integrated, pixelsize)

    factor_x, unit_x = wpu.choose_unit(xxGrid)
    factor_y, unit_y = wpu.choose_unit(yyGrid)

    # Plot Integration 2

    if plot3dFlag:

        fig = plt.figure(figsize=(10, 8))
        ax = fig.add_subplot(111, projection='3d')

        rstride = integrated.shape[0] // max3d_grid_points + 1
        cstride = integrated.shape[1] // max3d_grid_points + 1

        surf = ax.plot_surface(xxGrid * factor_x,
                               yyGrid * factor_y,
                               integrated[::-1, :],
                               rstride=rstride,
                               cstride=cstride,
                               cmap='viridis',
                               linewidth=0.1,
                               **kwarg4surf)

        ax_lim = np.max([np.abs(xxGrid * factor_x), np.abs(yyGrid * factor_y)])
        ax.set_xlim3d(-ax_lim, ax_lim)
        ax.set_ylim3d(-ax_lim, ax_lim)

        if 'vmin' in kwarg4surf:
            ax.set_zlim3d(bottom=kwarg4surf['vmin'])
        if 'vmax' in kwarg4surf:
            ax.set_zlim3d(top=kwarg4surf['vmax'])

        plt.xlabel(r'$x [' + unit_x + ' m]$', fontsize=24)
        plt.ylabel(r'$y [' + unit_y + ' m]$', fontsize=24)

        plt.title(titleStr, fontsize=24, weight='bold')
        cbar = plt.colorbar(surf, shrink=.8, aspect=20)
        cbar.ax.set_title(ctitle, y=1.01)

        plt.tight_layout(rect=[0, 0, 1, 1])

        ax.text2D(0.05,
                  0.9,
                  'strides = {}, {}'.format(rstride, cstride),
                  transform=ax.transAxes)

        if saveFigFlag:
            ax.view_init(elev=30, azim=60)
            wpu.save_figs_with_idx(saveFileSuf)
            ax.view_init(elev=30, azim=-120)
            wpu.save_figs_with_idx(saveFileSuf)
            plt.pause(.5)

        plt.show(block=False)

    if plotProfile:
        wpu.plot_profile(xxGrid * factor_x,
                         yyGrid * factor_y,
                         integrated[::-1, :],
                         xlabel=r'$x [' + unit_x + ' m]$',
                         ylabel=r'$y [' + unit_y + ' m]$',
                         title=titleStr,
                         xunit='\mu m',
                         yunit='\mu m',
                         arg4main={
                             'cmap': 'viridis',
                             'lw': 3
                         })

    if saveFigFlag:
        plt.ioff()
        plt.figure(figsize=(10, 8))

        plt.imshow(integrated[::-1, :],
                   cmap='viridis',
                   extent=wpu.extent_func(integrated, pixelsize) * factor_x,
                   **kwarg4surf)

        plt.xlabel(r'$x [' + unit_x + ' m]$', fontsize=24)
        plt.ylabel(r'$y [' + unit_x + ' m]$', fontsize=24)

        plt.title(titleStr, fontsize=18, weight='bold')
        cbar = plt.colorbar()
        cbar.ax.set_title(ctitle, y=1.01)
        wpu.save_figs_with_idx(saveFileSuf)
        plt.close()
        plt.ion()
Example #9
0
def plot_residual_parabolic_lens_2d(thickness,
                                    pixelsize,
                                    fitted,
                                    fitParameters,
                                    saveFigFlag=False,
                                    savePickle=False,
                                    str4title='',
                                    saveSdfData=False,
                                    vlimErrSigma=1,
                                    plotProfileFlag=True,
                                    plot3dFlag=True,
                                    makeAnimation=False):

    xmatrix, ymatrix = wpu.grid_coord(thickness, pixelsize)

    errorThickness = thickness - fitted
    argNotNAN = np.isfinite(errorThickness)

    factorx, unitx = wpu.choose_unit(xmatrix)
    factory, unity = wpu.choose_unit(ymatrix)
    factorz, unitz = wpu.choose_unit(errorThickness[argNotNAN])

    ptp = np.ptp(errorThickness[argNotNAN].flatten() * factorz)
    wpu.print_red('PV: {0:4.3g} '.format(ptp) + unitz[-1] + 'm')

    sigmaError = np.std(errorThickness[argNotNAN].flatten() * factorz)
    wpu.print_red('SDV: {0:4.3g} '.format(sigmaError) + unitz[-1] + 'm')

    str4title += r'Residual, ' + \
                 r'R $= {:.4g} \mu m$,'.format(fitParameters[0]*1e6) + '\n' + \
                 r'PV $= {0:.2f}$ '.format(ptp) + '$' + unitz + '  m$, '\
                 'SDV $= {0:.2f}$ '.format(sigmaError) + '$' + unitz + '  m$'

    # Plot Histogram

    plt.figure(figsize=(7, 8))
    plt.hist(errorThickness[argNotNAN] * factorz,
             100,
             color='r',
             histtype='step')
    plt.xlabel(r'Residual [$' + unitz + '  m$ ]')
    plt.title(str4title)

    if saveFigFlag:
        wpu.save_figs_with_idx(fname2save, extension='png')

    plt.show(block=False)

    # Plot Profiles

    vlimErr = wpu.mean_plus_n_sigma(errorThickness[argNotNAN] * factorz,
                                    vlimErrSigma / 2)
    cmap4graph = plt.cm.Spectral_r
    cmap4graph.set_over('m')
    cmap4graph.set_under('c')

    if plotProfileFlag:

        wpu.plot_profile(xmatrix * factorx,
                         ymatrix * factory,
                         errorThickness * factorz,
                         title=str4title,
                         xlabel=r'[$' + unitx + '  m$ ]',
                         ylabel=r'[$' + unity + '  m$ ]',
                         zlabel=r'[$' + unitz + '  m$ ]',
                         arg4main={
                             'cmap': 'Spectral_r',
                             'vmin': -vlimErr,
                             'vmax': vlimErr,
                             'extend': 'both'
                         })

    if savePickle or saveFigFlag:
        fig = plt.figure(figsize=(10, 7))

        cf = plt.contourf(xmatrix * factorx,
                          ymatrix * factory,
                          errorThickness * factorz,
                          256,
                          cmap=cmap4graph,
                          extend='both')

        plt.clim(-vlimErr, vlimErr)
        plt.contour(cf, levels=cf.levels[::32], colors='gray')

        plt.xlabel(r'[$' + unitx + '  m$ ]', fontsize=22)
        plt.ylabel(r'[$' + unity + '  m$ ]', fontsize=22)
        plt.title(str4title, fontsize=22)
        cbar = plt.colorbar(cf, shrink=.8, aspect=20)
        #        cbar.set_clim(-vlimErr, vlimErr)
        cbar.ax.set_title(r'[$' + unitz + '  m$ ]', y=1.01)

        plt.gca().set_aspect('equal', adjustable='box')
        plt.grid(color='grey')

        if saveFigFlag:
            wpu.save_figs_with_idx(fname2save, extension='png')

        if savePickle:
            wpu.save_figs_with_idx_pickle(fig, fname2save)

        plt.show(block=True)

    # Plot 3D

    if plot3dFlag:

        wpu.print_red('MESSAGE: Ploting 3d in the background')

        fig = plt.figure(figsize=(10, 7), facecolor="white")
        ax = fig.gca(projection='3d')
        plt.tight_layout(pad=2.5)

        surf = ax.plot_trisurf(xmatrix[argNotNAN].flatten() * factorx,
                               ymatrix[argNotNAN].flatten() * factory,
                               errorThickness[argNotNAN].flatten() * factorz,
                               vmin=-vlimErr,
                               vmax=vlimErr,
                               cmap=cmap4graph,
                               linewidth=0.1,
                               shade=False)

        ax.view_init(azim=-120, elev=40)

        plt.xlabel(r'$x$ [$' + unitx + '  m$ ]')
        plt.ylabel(r'$y$ [$' + unity + '  m$ ]')

        plt.title(str4title)

        cbar = plt.colorbar(surf, shrink=.8, aspect=20, extend='both')
        cbar.ax.set_title(r'[$' + unitz + '  m$ ]', y=1.01)

        plt.tight_layout()

        if saveFigFlag:
            wpu.save_figs_with_idx(fname2save, extension='png')

            ax.view_init(azim=690, elev=40)

            wpu.save_figs_with_idx(fname2save, extension='png')

        if makeAnimation:
            #            plt.show(block=False)
            plt.pause(1.0)
            wpu.rocking_3d_figure(ax,
                                  wpu.get_unique_filename(fname2save, 'gif'),
                                  elevOffset=45,
                                  azimOffset=60,
                                  elevAmp=0,
                                  azimAmpl=-1,
                                  dpi=80,
                                  npoints=5)

        plt.pause(1.0)
        plt.close('all')
        #    plt.show(block=True)

    if saveSdfData:
        mask_for_sdf = errorThickness * 0.0
        mask_for_sdf[~argNotNAN] = 1.0
        errorThickness[~argNotNAN] = 00000000
        wpu.save_sdf_file(
            errorThickness, pixelsize,
            wpu.get_unique_filename(fname2save + '_residual', 'sdf'))
        wpu.save_sdf_file(
            mask_for_sdf, pixelsize,
            wpu.get_unique_filename(fname2save + '_residual_mask', 'sdf'))

    return sigmaError / factorz, ptp / factorz
Example #10
0
            (thickness_cropped, fitted,
             fitParameters) = fit_nominal_lens_2d(thickness,
                                                  pixelSize,
                                                  radius4fit=radius4fit,
                                                  p0=p0,
                                                  bounds=bounds,
                                                  saveFigFlag=saveFigFlag,
                                                  str4title=str4graphs,
                                                  kwargs4fit={
                                                      'verbose': 2,
                                                      'ftol': 1e-12,
                                                      'gtol': 1e-12
                                                  })

        xmatrix, ymatrix = wpu.grid_coord(thickness_cropped, pixelSize)

        isNotNAN = np.isfinite(thickness_cropped[thickness_cropped.shape[0] //
                                                 2, :])
        plot_residual_1d(
            xmatrix[0, isNotNAN],
            thickness_cropped[thickness_cropped.shape[0] // 2, isNotNAN],
            fitted[thickness_cropped.shape[0] // 2, isNotNAN],
            str4title=str4graphs + '\nFit center profile Horizontal, ' +
            ' R = {:.4g} um'.format(fitParameters[0] * 1e6),
            saveFigFlag=True,
            saveAsciiFlag=True)

        isNotNAN = np.isfinite(
            thickness_cropped[:, thickness_cropped.shape[1] // 2])
        plot_residual_1d(
def _n_profiles_H_V(arrayH,
                    arrayV,
                    virtual_pixelsize,
                    zlabel=r'z',
                    titleH='Horiz',
                    titleV='Vert',
                    nprofiles=5,
                    filter_width=0,
                    remove2ndOrder=False,
                    saveFileSuf='',
                    saveFigFlag=True):

    xxGrid, yyGrid = wpu.grid_coord(arrayH, virtual_pixelsize)

    fit_coefs = [[], []]
    data2saveH = None
    data2saveV = None
    labels_H = None
    labels_V = None

    plt.rcParams['lines.markersize'] = 4
    plt.rcParams['lines.linewidth'] = 2

    # Horizontal
    if np.all(np.isfinite(arrayH)):

        plt.figure(figsize=(12, 12 * 9 / 16))

        xvec = xxGrid[0, :]
        data2saveH = np.c_[xvec]
        header = ['x [m]']

        ls_cycle, lc_jet = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'],
                                                ncurves=nprofiles,
                                                cmap_str='gist_rainbow_r')

        lc = []
        labels_H = []
        for i, row in enumerate(
                np.linspace(filter_width // 2,
                            np.shape(arrayV)[0] - filter_width // 2 - 1,
                            nprofiles + 2,
                            dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            if filter_width != 0:
                yvec = arrayH[row - filter_width:row + filter_width, :]
                yvec = np.sum(yvec, 0) / filter_width / 2
            else:
                yvec = arrayH[row, :]

            lc.append(next(lc_jet))
            p01 = np.polyfit(xvec, yvec, 1)
            fit_coefs[0].append(p01)

            if remove2ndOrder:
                yvec -= p01[0] * xvec + p01[1]

            plt.plot(xvec * 1e6,
                     yvec,
                     next(ls_cycle),
                     color=lc[i - 1],
                     label=str(row))

            if not remove2ndOrder:
                plt.plot(xvec * 1e6,
                         p01[0] * xvec + p01[1],
                         '--',
                         color=lc[i - 1],
                         lw=3)

            data2saveH = np.c_[data2saveH, yvec]
            header.append(str(row))
            labels_H.append(str(row))

        if remove2ndOrder:
            titleH = titleH + ', 2nd order removed'
        plt.legend(title='Pixel Y', loc=0, fontsize=12)

        plt.xlabel(r'x [$\mu m$]', fontsize=18)
        plt.ylabel(zlabel, fontsize=18)
        plt.title(titleH + ', Filter Width = {:d} pixels'.format(filter_width),
                  fontsize=20)

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_H')

        plt.show(block=False)

        header.append(zlabel +
                      ', Filter Width = {:d} pixels'.format(filter_width))

        wpu.save_csv_file(data2saveH,
                          wpu.get_unique_filename(
                              saveFileSuf + '_WF_profiles_H', 'csv'),
                          headerList=header)

        plt.figure(figsize=(12, 12 * 9 / 16))
        plt.imshow(arrayH,
                   cmap='RdGy',
                   vmin=wpu.mean_plus_n_sigma(arrayH, -3),
                   vmax=wpu.mean_plus_n_sigma(arrayH, 3))
        plt.xlabel('Pixel')
        plt.ylabel('Pixel')
        plt.title(titleH + ', Profiles Position')

        currentAxis = plt.gca()

        _, lc_jet = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'],
                                         ncurves=nprofiles,
                                         cmap_str='gist_rainbow_r')

        for i, row in enumerate(
                np.linspace(filter_width // 2,
                            np.shape(arrayV)[0] - filter_width // 2 - 1,
                            nprofiles + 2,
                            dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            currentAxis.add_patch(
                Rectangle((-.5, row - filter_width // 2 - .5),
                          np.shape(arrayH)[1],
                          filter_width,
                          facecolor=lc[i - 1],
                          alpha=.5))
            plt.axhline(row, color=lc[i - 1])

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_H')

        plt.show(block=True)

    # Vertical
    if np.all(np.isfinite(arrayV)):

        plt.figure(figsize=(12, 12 * 9 / 16))

        xvec = yyGrid[:, 0]
        data2saveV = np.c_[xvec]
        header = ['y [m]']

        ls_cycle, lc_jet = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'],
                                                ncurves=nprofiles,
                                                cmap_str='gist_rainbow_r')

        lc = []
        labels_V = []
        for i, col in enumerate(
                np.linspace(filter_width // 2,
                            np.shape(arrayH)[1] - filter_width // 2 - 1,
                            nprofiles + 2,
                            dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            if filter_width != 0:
                yvec = arrayV[:, col - filter_width:col + filter_width]
                yvec = np.sum(yvec, 1) / filter_width / 2
            else:
                yvec = arrayV[:, col]

            lc.append(next(lc_jet))
            p10 = np.polyfit(xvec, yvec, 1)
            fit_coefs[1].append(p10)

            if remove2ndOrder:
                yvec -= p10[0] * xvec + p10[1]

            plt.plot(xvec * 1e6,
                     yvec,
                     next(ls_cycle),
                     color=lc[i - 1],
                     label=str(col))

            if not remove2ndOrder:
                plt.plot(xvec * 1e6,
                         p10[0] * xvec + p10[1],
                         '--',
                         color=lc[i - 1],
                         lw=3)

            data2saveV = np.c_[data2saveV, yvec]
            header.append(str(col))
            labels_V.append(str(col))

        if remove2ndOrder:
            titleV = titleV + ', 2nd order removed'

        plt.legend(title='Pixel X', loc=0, fontsize=12)

        plt.xlabel(r'y [$\mu m$]', fontsize=18)
        plt.ylabel(zlabel, fontsize=18)

        plt.title(titleV + ', Filter Width = {:d} pixels'.format(filter_width),
                  fontsize=20)
        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_Y')
        plt.show(block=False)

        header.append(zlabel +
                      ', Filter Width = {:d} pixels'.format(filter_width))

        wpu.save_csv_file(data2saveV,
                          wpu.get_unique_filename(
                              saveFileSuf + '_WF_profiles_V', 'csv'),
                          headerList=header)

        plt.figure(figsize=(12, 12 * 9 / 16))
        plt.imshow(arrayV,
                   cmap='RdGy',
                   vmin=wpu.mean_plus_n_sigma(arrayV, -3),
                   vmax=wpu.mean_plus_n_sigma(arrayV, 3))
        plt.xlabel('Pixel')
        plt.ylabel('Pixel')
        plt.title(titleV + ', Profiles Position')

        currentAxis = plt.gca()

        for i, col in enumerate(
                np.linspace(filter_width // 2,
                            np.shape(arrayH)[1] - filter_width // 2 - 1,
                            nprofiles + 2,
                            dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            currentAxis.add_patch(
                Rectangle((col - filter_width // 2 - .5, -.5),
                          filter_width,
                          np.shape(arrayV)[0],
                          facecolor=lc[i - 1],
                          alpha=.5))
            plt.axvline(col, color=lc[i - 1])

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_Y')

        plt.show(block=True)

    return data2saveH, data2saveV, labels_H, labels_V, fit_coefs
Example #12
0
def _n_profiles_H_V(arrayH, arrayV, virtual_pixelsize,
                    zlabel=r'z',
                    titleH='Horiz', titleV='Vert',
                    nprofiles=5, filter_width=0,
                    remove1stOrderDPC=False,
                    saveFileSuf='',
                    saveFigFlag=True):

    xxGrid, yyGrid = wpu.grid_coord(arrayH, virtual_pixelsize)

    fit_coefs = [[], []]
    data2saveH = None
    data2saveV = None
    labels_H = None
    labels_V = None

    plt.rcParams['lines.markersize'] = 4
    plt.rcParams['lines.linewidth'] = 2

    # Horizontal
    if np.all(np.isfinite(arrayH)):

        plt.figure(figsize=(12, 12*9/16))

        xvec = xxGrid[0, :]
        data2saveH = np.c_[xvec]
        header = ['x [m]']

        if filter_width != 0:
            arrayH_filtered = uniform_filter1d(arrayH, filter_width, 0)
        else:
            arrayH_filtered = arrayH

        ls_cycle, lc_jet = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'],
                                                ncurves=nprofiles,
                                                cmap_str='gist_rainbow_r')

        lc = []
        labels_H = []
        for i, row in enumerate(np.linspace(filter_width//2,
                                            np.shape(arrayV)[0]-filter_width//2-1,
                                            nprofiles + 2, dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            yvec = arrayH_filtered[row, :]

            lc.append(next(lc_jet))
            p01 = np.polyfit(xvec, yvec, 1)
            fit_coefs[0].append(p01)

            if remove1stOrderDPC:
                yvec -= p01[0]*xvec + p01[1]

            plt.plot(xvec*1e6, yvec, next(ls_cycle), color=lc[i-1],
                     label=str(row))

            if not remove1stOrderDPC:
                plt.plot(xvec*1e6, p01[0]*xvec + p01[1], '--',
                         color=lc[i-1], lw=3)

            data2saveH = np.c_[data2saveH, yvec]
            header.append(str(row))
            labels_H.append(str(row))

        if remove1stOrderDPC:
            titleH = titleH + ', 2nd order removed'
        plt.legend(title='Pixel Y', loc=0, fontsize=12)

        plt.xlabel(r'x [$\mu m$]', fontsize=18)
        plt.ylabel(zlabel, fontsize=18)
        plt.title(titleH + ', Filter Width = {:d} pixels'.format(filter_width),
                  fontsize=20)

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_H')

        plt.show(block=False)

        header.append(zlabel + ', Filter Width = {:d} pixels'.format(filter_width))

        wpu.save_csv_file(data2saveH,
                          wpu.get_unique_filename(saveFileSuf +
                                                  '_WF_profiles_H', 'csv'),
                          headerList=header)

        plt.figure(figsize=(12, 12*9/16))
        plt.imshow(arrayH, cmap='RdGy',
                   vmin=wpu.mean_plus_n_sigma(arrayH, -3),
                   vmax=wpu.mean_plus_n_sigma(arrayH, 3))
        plt.xlabel('Pixel')
        plt.ylabel('Pixel')
        plt.title(titleH + ', Profiles Position')

        currentAxis = plt.gca()

        _, lc_jet = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'],
                                         ncurves=nprofiles,
                                         cmap_str='gist_rainbow_r')

        for i, row in enumerate(np.linspace(filter_width//2,
                                            np.shape(arrayV)[0]-filter_width//2-1,
                                            nprofiles + 2, dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            currentAxis.add_patch(Rectangle((-.5, row - filter_width//2 - .5),
                                            np.shape(arrayH)[1], filter_width,
                                            facecolor=lc[i-1], alpha=.5))
            plt.axhline(row, color=lc[i-1])

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_H')

        plt.show(block=True)

    # Vertical
    if np.all(np.isfinite(arrayV)):

        plt.figure(figsize=(12, 12*9/16))

        xvec = yyGrid[:, 0]
        data2saveV = np.c_[xvec]
        header = ['y [m]']

        if filter_width != 0:
            arrayV_filtered = uniform_filter1d(arrayV, filter_width, 1)
        else:
            arrayV_filtered = arrayV

        ls_cycle, lc_jet = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'],
                                                ncurves=nprofiles,
                                                cmap_str='gist_rainbow_r')

        lc = []
        labels_V = []
        for i, col in enumerate(np.linspace(filter_width//2,
                                            np.shape(arrayH)[1]-filter_width//2-1,
                                            nprofiles + 2, dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue

            yvec = arrayV_filtered[:, col]

            lc.append(next(lc_jet))
            p10 = np.polyfit(xvec, yvec, 1)
            fit_coefs[1].append(p10)

            if remove1stOrderDPC:
                yvec -= p10[0]*xvec + p10[1]

            plt.plot(xvec*1e6, yvec, next(ls_cycle), color=lc[i-1],
                     label=str(col))

            if not remove1stOrderDPC:
                plt.plot(xvec*1e6, p10[0]*xvec + p10[1], '--',
                         color=lc[i-1], lw=3)

            data2saveV = np.c_[data2saveV, yvec]
            header.append(str(col))
            labels_V.append(str(col))

        if remove1stOrderDPC:
            titleV = titleV + ', 2nd order removed'

        plt.legend(title='Pixel X', loc=0, fontsize=12)

        plt.xlabel(r'y [$\mu m$]', fontsize=18)
        plt.ylabel(zlabel, fontsize=18)

        plt.title(titleV + ', Filter Width = {:d} pixels'.format(filter_width),
                  fontsize=20)
        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_Y')
        plt.show(block=False)

        header.append(zlabel + ', Filter Width = {:d} pixels'.format(filter_width))

        wpu.save_csv_file(data2saveV,
                          wpu.get_unique_filename(saveFileSuf +
                                                  '_WF_profiles_V', 'csv'),
                          headerList=header)

        plt.figure(figsize=(12, 12*9/16))
        plt.imshow(arrayV, cmap='RdGy',
                   vmin=wpu.mean_plus_n_sigma(arrayV, -3),
                   vmax=wpu.mean_plus_n_sigma(arrayV, 3))
        plt.xlabel('Pixel')
        plt.ylabel('Pixel')
        plt.title(titleV + ', Profiles Position')

        currentAxis = plt.gca()

        for i, col in enumerate(np.linspace(filter_width//2,
                                            np.shape(arrayH)[1]-filter_width//2-1,
                                            nprofiles + 2, dtype=int)):

            if i == 0 or i == nprofiles + 1:
                continue


            currentAxis.add_patch(Rectangle((col - filter_width//2 - .5, -.5),
                                            filter_width, np.shape(arrayV)[0],
                                            facecolor=lc[i-1], alpha=.5))
            plt.axvline(col, color=lc[i-1])

        if saveFigFlag:
            wpu.save_figs_with_idx(saveFileSuf + '_Y')

        plt.show(block=True)

    return data2saveH, data2saveV, labels_H, labels_V, fit_coefs
Example #13
0
def plot_integration(integrated, pixelsize,
                     titleStr='Title', ctitle=' ',
                     max3d_grid_points=101,
                     plotProfile=True,
                     plot3dFlag=True,
                     saveFigFlag=False,
                     saveFileSuf='graph',
                     **kwarg4surf):
    '''
    TODO: Write Docstring
    '''

    xxGrid, yyGrid = wpu.grid_coord(integrated, pixelsize)

    factor_x, unit_x = wpu.choose_unit(xxGrid)
    factor_y, unit_y = wpu.choose_unit(yyGrid)

    # Plot Integration 2

    if plot3dFlag:

        fig = plt.figure(figsize=(10, 8))
        ax = fig.add_subplot(111, projection='3d')

        rstride = integrated.shape[0] // max3d_grid_points + 1
        cstride = integrated.shape[1] // max3d_grid_points + 1

        surf = ax.plot_surface(xxGrid*factor_x, yyGrid*factor_y,
                               integrated[::-1, :],
                               rstride=rstride,
                               cstride=cstride,
                               cmap='viridis', linewidth=0.1, **kwarg4surf)

        ax_lim = np.max([np.abs(xxGrid*factor_x), np.abs(yyGrid*factor_y)])
        ax.set_xlim3d(-ax_lim, ax_lim)
        ax.set_ylim3d(-ax_lim, ax_lim)

        if 'vmin' in kwarg4surf:
            ax.set_zlim3d(bottom=kwarg4surf['vmin'])
        if 'vmax' in kwarg4surf:
            ax.set_zlim3d(top=kwarg4surf['vmax'])

        plt.xlabel(r'$x [' + unit_x + ' m]$', fontsize=24)
        plt.ylabel(r'$y [' + unit_y + ' m]$', fontsize=24)

        plt.title(titleStr, fontsize=24, weight='bold')
        cbar = plt.colorbar(surf, shrink=.8, aspect=20)
        cbar.ax.set_title(ctitle, y=1.01)

        plt.tight_layout(rect=[0, 0, 1, 1])

        ax.text2D(0.05, 0.9, 'strides = {}, {}'.format(rstride, cstride),
                    transform=ax.transAxes)

        if saveFigFlag:
            ax.view_init(elev=30, azim=60)
            wpu.save_figs_with_idx(saveFileSuf)
            ax.view_init(elev=30, azim=-120)
            wpu.save_figs_with_idx(saveFileSuf)
            plt.pause(.5)

        plt.show(block=False)

    if plotProfile:
        wpu.plot_profile(xxGrid*factor_x, yyGrid*factor_y,
                         integrated[::-1, :],
                         xlabel=r'$x [' + unit_x + ' m]$',
                         ylabel=r'$y [' + unit_y + ' m]$',
                         title=titleStr,
                         xunit='\mu m', yunit='\mu m',
                         arg4main={'cmap': 'viridis', 'lw': 3})

    if saveFigFlag:
        plt.ioff()
        plt.figure(figsize=(10, 8))

        plt.imshow(integrated[::-1, :], cmap='viridis',
                   extent=wpu.extent_func(integrated, pixelsize)*factor_x,
                   **kwarg4surf)

        plt.xlabel(r'$x [' + unit_x + ' m]$', fontsize=24)
        plt.ylabel(r'$y [' + unit_x + ' m]$', fontsize=24)

        plt.title(titleStr, fontsize=18, weight='bold')
        cbar = plt.colorbar()
        cbar.ax.set_title(ctitle, y=1.01)
        wpu.save_figs_with_idx(saveFileSuf)
        plt.close()
        plt.ion()
Example #14
0
def plot_integration(integrated, pixelsize,
                     titleStr='Title', ctitle=' ', saveFigFlag=False,
                     saveFileSuf='graph'):
    '''
    TODO: Write Docstring
    '''

    xxGrid, yyGrid = wpu.grid_coord(integrated, pixelsize)

    factor_x, unit_x = wpu.choose_unit(xxGrid)
    factor_y, unit_y = wpu.choose_unit(yyGrid)

    wpu.plot_profile(xxGrid*factor_x, yyGrid*factor_y,   integrated[::-1, :],
                     xlabel=r'$x [' + unit_x + ' m]$',
                     ylabel=r'$y [' + unit_y + ' m]$',
                     title=titleStr,
                     xunit='\mu m', yunit='\mu m',
                     arg4main={'cmap': 'viridis', 'lw': 3})

    if saveFigFlag:
        plt.ioff()

        plt.figure(figsize=(10, 8))

        plt.imshow(integrated[::-1, :], cmap='viridis',
                   extent=wpu.extent_func(integrated, pixelsize)*factor_x)

        plt.xlabel(r'$x [' + unit_x + ' m]$', fontsize=24)
        plt.ylabel(r'$y [' + unit_x + ' m]$', fontsize=24)

        plt.title(titleStr, fontsize=18, weight='bold')
        cbar = plt.colorbar()
        cbar.ax.set_title(ctitle, y=1.01)
        wpu.save_figs_with_idx(saveFileSuf)
        #        plt.show(block=False)
        plt.close(plt.gcf())
        plt.ion()

    # Plot Integration 2

    fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')

    rstride = integrated.shape[0] // 101 + 1
    cstride = integrated.shape[1] // 101 + 1

    surf = ax.plot_surface(xxGrid*factor_x, yyGrid*factor_y,
                           integrated[::-1, :],
                           rstride=rstride,
                           cstride=cstride,
                           cmap='viridis', linewidth=0.1)

    ax_lim = np.max([np.abs(xxGrid*factor_x), np.abs(yyGrid*factor_y)])
    ax.set_xlim3d(-ax_lim, ax_lim)
    ax.set_ylim3d(-ax_lim, ax_lim)

    plt.xlabel(r'$x [' + unit_x + ' m]$', fontsize=24)
    plt.ylabel(r'$y [' + unit_y + ' m]$', fontsize=24)

    plt.title(titleStr, fontsize=24, weight='bold')
    cbar = plt.colorbar(surf, shrink=.8, aspect=20)
    cbar.ax.set_title(ctitle, y=1.01)

    fig.tight_layout()

    plt.tight_layout()
    if saveFigFlag:
        wpu.save_figs_with_idx(saveFileSuf)

    ax.text2D(0.05, 0.9, 'strides = {}, {}'.format(rstride, cstride),
              transform=ax.transAxes)

    plt.show(block=False)

    return ax