def slope_error_hist(thickness_cropped, fitted, pixelSize, delta=1, sourcedistance=1.0, saveFigFlag=True, str4title=''): errorThickness = thickness_cropped - fitted plt.figure(figsize=(15, 8)) plt.subplot(121) slope_error_h = np.diff(errorThickness, axis=0) / pixelSize[0] * delta argNotNAN = np.isfinite(slope_error_h) factor_seh, unit_seh = wpu.choose_unit(slope_error_h[argNotNAN]) sigma_seh = np.std(slope_error_h[argNotNAN].flatten()) plt.hist(slope_error_h[argNotNAN].flatten() * factor_seh, 100, histtype='stepfilled') plt.xlabel(r'Slope Error [$ ' + unit_seh + ' rad$ ]') plt.title('Horizontal, SDV = ' + '{:.2f}'.format(sigma_seh * factor_seh) + ' $' + unit_seh + ' rad$') plt.subplot(122) slope_error_v = np.diff(errorThickness, axis=1) / pixelSize[1] * delta argNotNAN = np.isfinite(slope_error_v) factor_sev, unit_sev = wpu.choose_unit(slope_error_v[argNotNAN]) sigma_sev = np.std(slope_error_v[argNotNAN].flatten()) plt.hist(slope_error_v[argNotNAN].flatten() * factor_sev, 100, histtype='stepfilled') plt.xlabel(r'Slope Error [$ ' + unit_sev + ' rad$ ]') plt.title('Vertical, SDV = ' + '{:.2f}'.format(sigma_sev * factor_sev) + ' $' + unit_sev + ' rad$') if delta != 1: str4title += ' WF slope error' else: str4title += ' Thickness slope error' plt.suptitle(str4title, fontsize=18, weight='bold') if saveFigFlag: wpu.save_figs_with_idx(fname2save, extension='png') wpu.log_this('Slope Error Hor SDV = ' + '{:.3f}'.format(sigma_seh * factor_seh) + unit_seh + ' rad') wpu.log_this('Slope Error Ver SDV = ' + '{:.3f}'.format(sigma_sev * factor_sev) + unit_sev + ' rad') plt.show(block=True) return sigma_seh, sigma_sev
def plot_DPC(dpc01, dpc10, pixelsize, titleStr='', saveFigFlag=False, saveFileSuf='graph'): ''' TODO: Write Docstring Plot differencial phase signal ''' if titleStr is not '': titleStr = ', ' + titleStr factor, unit_xy = wpu.choose_unit(np.sqrt(dpc01.size) * pixelsize[0]) dpc01_plot = dpc01 * pixelsize[1] / np.pi dpc10_plot = dpc10 * pixelsize[0] / np.pi vlim01 = np.max((np.abs(wpu.mean_plus_n_sigma(dpc01_plot, -5)), np.abs(wpu.mean_plus_n_sigma(dpc01_plot, 5)))) vlim10 = np.max((np.abs(wpu.mean_plus_n_sigma(dpc10_plot, -5)), np.abs(wpu.mean_plus_n_sigma(dpc10_plot, 5)))) plt.figure(figsize=(12, 6)) plt.subplot(121) plt.imshow(dpc01_plot, cmap='RdGy_r', vmin=-vlim01, vmax=vlim01, extent=wpu.extent_func(dpc01_plot, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('DPC - Horizontal', fontsize=18, weight='bold') # 01 plt.subplot(122) plt.imshow(dpc10_plot, cmap='RdGy_r', vmin=-vlim10, vmax=vlim10, extent=wpu.extent_func(dpc10_plot, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('DPC - Vertical', fontsize=18, weight='bold') plt.suptitle('Differential Phase ' + r'[$\pi$ rad]' + titleStr, fontsize=18, weight='bold') plt.tight_layout(rect=[0, 0, 1, 1]) if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf) plt.show(block=False)
def plot_intensities_harms(int00, int01, int10, pixelsize, titleStr, saveFigFlag=False, saveFileSuf='graph'): # Plot Real image (intensity) if titleStr is not '': titleStr = ', ' + titleStr factor, unit_xy = wpu.choose_unit(np.sqrt(int00.size) * pixelsize[0]) plt.figure(figsize=(14, 6)) plt.subplot(131) plt.imshow(int00, cmap='viridis', vmax=wpu.mean_plus_n_sigma(int00, 4), extent=wpu.extent_func(int00, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('00', fontsize=18, weight='bold') plt.subplot(132) plt.imshow(int01, cmap='viridis', vmax=wpu.mean_plus_n_sigma(int01, 4), extent=wpu.extent_func(int01, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('01', fontsize=18, weight='bold') plt.subplot(133) plt.imshow(int10, cmap='viridis', vmax=wpu.mean_plus_n_sigma(int10, 4), extent=wpu.extent_func(int10, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('10', fontsize=18, weight='bold') plt.suptitle('Absorption obtained from the Harmonics' + titleStr, fontsize=18, weight='bold') plt.tight_layout(rect=[0, 0, 1, 1]) if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf) plt.show(block=False)
def plot_DPC(dpc01, dpc10, pixelsize, titleStr='', saveFigFlag=False, saveFileSuf='graph'): ''' TODO: Write Docstring Plot differencial phase signal ''' if titleStr is not '': titleStr = ', ' + titleStr factor, unit_xy = wpu.choose_unit(np.sqrt(dpc01.size)*pixelsize[0]) dpc01_plot = dpc01*pixelsize[1]/np.pi dpc10_plot = dpc10*pixelsize[0]/np.pi vlim01 = np.max((np.abs(wpu.mean_plus_n_sigma(dpc01_plot, -5)), np.abs(wpu.mean_plus_n_sigma(dpc01_plot, 5)))) vlim10 = np.max((np.abs(wpu.mean_plus_n_sigma(dpc10_plot, -5)), np.abs(wpu.mean_plus_n_sigma(dpc10_plot, 5)))) plt.figure(figsize=(12, 6)) plt.subplot(121) plt.imshow(dpc01_plot, cmap='RdGy_r', vmin=-vlim01, vmax=vlim01, extent=wpu.extent_func(dpc01_plot, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('DPC - Horizontal', fontsize=18, weight='bold') # 01 plt.subplot(122) plt.imshow(dpc10_plot, cmap='RdGy_r', vmin=-vlim10, vmax=vlim10, extent=wpu.extent_func(dpc10_plot, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('DPC - Vertical', fontsize=18, weight='bold') plt.suptitle('Differential Phase ' + r'[$\pi$ rad]' + titleStr, fontsize=18, weight='bold') plt.tight_layout(rect=[0, 0, 1, 1]) if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf) plt.show(block=False)
def plot_intensities_harms(int00, int01, int10, pixelsize, titleStr, saveFigFlag=False, saveFileSuf='graph'): # Plot Real image (intensity) if titleStr is not '': titleStr = ', ' + titleStr factor, unit_xy = wpu.choose_unit(np.sqrt(int00.size)*pixelsize[0]) plt.figure(figsize=(14, 6)) plt.subplot(131) plt.imshow(int00, cmap='viridis', vmax=wpu.mean_plus_n_sigma(int00, 4), extent=wpu.extent_func(int00, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('00', fontsize=18, weight='bold') plt.subplot(132) plt.imshow(int01, cmap='viridis', vmax=wpu.mean_plus_n_sigma(int01, 4), extent=wpu.extent_func(int01, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('01', fontsize=18, weight='bold') plt.subplot(133) plt.imshow(int10, cmap='viridis', vmax=wpu.mean_plus_n_sigma(int10, 4), extent=wpu.extent_func(int10, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('10', fontsize=18, weight='bold') plt.suptitle('Absorption obtained from the Harmonics' + titleStr, fontsize=18, weight='bold') plt.tight_layout(rect=[0, 0, 1, 1]) if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf) plt.show(block=False)
def plot_dark_field(darkField01, darkField10, pixelsize, titleStr='', saveFigFlag=False, saveFileSuf='graph'): ''' TODO: Write Docstring Plot Dark field ''' if titleStr is not '': titleStr = ', ' + titleStr factor, unit_xy = wpu.choose_unit(np.sqrt(darkField01.size) * pixelsize[0]) plt.figure(figsize=(14, 6)) plt.subplot(121) plt.imshow(darkField01, cmap='viridis', vmax=wpu.mean_plus_n_sigma(darkField01, 4), extent=wpu.extent_func(darkField01, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('Horizontal', fontsize=18, weight='bold') # 01 plt.subplot(122) plt.imshow(darkField10, cmap='viridis', vmax=wpu.mean_plus_n_sigma(darkField01, 4), extent=wpu.extent_func(darkField10, pixelsize) * factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('Vertical', fontsize=18, weight='bold') # 10 plt.suptitle('Dark Field', fontsize=18, weight='bold') plt.tight_layout(rect=[0, 0, 1, 1]) if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf) plt.show(block=False)
def plot_dark_field(darkField01, darkField10, pixelsize, titleStr='', saveFigFlag=False, saveFileSuf='graph'): ''' TODO: Write Docstring Plot Dark field ''' if titleStr is not '': titleStr = ', ' + titleStr factor, unit_xy = wpu.choose_unit(np.sqrt(darkField01.size)*pixelsize[0]) plt.figure(figsize=(14, 6)) plt.subplot(121) plt.imshow(darkField01, cmap='viridis', vmax=wpu.mean_plus_n_sigma(darkField01, 4), extent=wpu.extent_func(darkField01, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('Horizontal', fontsize=18, weight='bold') # 01 plt.subplot(122) plt.imshow(darkField10, cmap='viridis', vmax=wpu.mean_plus_n_sigma(darkField01, 4), extent=wpu.extent_func(darkField10, pixelsize)*factor) plt.xlabel(r'$[{0} m]$'.format(unit_xy)) plt.ylabel(r'$[{0} m]$'.format(unit_xy)) plt.colorbar(shrink=0.5) plt.title('Vertical', fontsize=18, weight='bold') # 10 plt.suptitle('Dark Field', fontsize=18, weight='bold') plt.tight_layout(rect=[0, 0, 1, 1]) if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf) plt.show(block=False)
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()
# u1_xy = circ(X, Y, wx, wy) # u1_xy = circ(X, Y, wx, wy)*tFuncLens(X, Y, wavelength, fx=(1/5.0+1/zz)**-1)* \ # u1_xy = gaussianBeam(.2e-3, wavelength, z=0.0, L=Ly, npoints=My) # u1_xy = circ(X, Y, wx, wy)* \ # gaussianBeam(10e-6, wavelength, 5.000, Lx, X.shape[0]) #u1_xy = circ(X, Y, wx, wy, 0, 80e-6) + circ(X, Y, wx, wy, 0,-80e-6) # double slit ##=========================================================# # %% Plot u1 ##=========================================================# factorX, unitStrX = wpu.choose_unit(X) factorY, unitStrY = wpu.choose_unit(Y) unitStrX = unitStrX + ' m' unitStrY = unitStrY + ' m' # ## U1 wpu.plot_profile(X * factorX, Y * factorY, np.abs(u1_xy**2), r'$x [' + unitStrX + ']$', r'$y [' + unitStrY + ']$', r'Intensity [a.u.]', xo=0.0, yo=0.0, xunit=unitStrX, yunit=unitStrY)
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
def plot_residual_1d(xvec, data, fitted, str4title='', saveFigFlag=False, saveAsciiFlag=False): # Plot Horizontal profile errorThickness = -data + fitted argNotNAN = np.isfinite(errorThickness) factorx, unitx = wpu.choose_unit(xvec) factory1, unity1 = wpu.choose_unit(data) factory2, unity2 = wpu.choose_unit(errorThickness) ptp = np.ptp(errorThickness[argNotNAN].flatten() * factory2) wpu.print_red('PV: {0:4.3g} '.format(ptp) + unity2[-1] + 'm') sigmaError = np.std(errorThickness[argNotNAN].flatten() * factory2) wpu.print_red('SDV: {0:4.3g} '.format(sigmaError) + unity2[-1] + 'm') str4title += '\n' + \ r'PV $= {0:.2f}$ '.format(ptp) + '$' + unity2 + ' m$, '\ 'SDV $= {0:.2f}$ '.format(sigmaError) + '$' + unity2 + ' m$' plt.figure(figsize=(10, 7)) ax1 = plt.gca() ax1.plot(xvec[argNotNAN] * factorx, data[argNotNAN] * factory1, '-ko', markersize=5, label='1D data') ax1.plot(xvec[argNotNAN] * factorx, fitted[argNotNAN] * factory1, '-+r', label='Fit parabolic') ax2 = ax1.twinx() # trick to add both axes to legend ax2.plot(np.nan, '-ko', label='1D data') ax2.plot(np.nan, '-+r', label='Fit parabolic') ax2.plot(xvec[argNotNAN] * factorx, errorThickness[argNotNAN] * factory2, '-+', markersize=5, label='fit residual') plt.title(str4title) for tl in ax2.get_yticklabels(): tl.set_color('b') ax2.legend(loc=1, fontsize='small') # trick to add both axes to legend ax1.grid(color='gray') ax1.set_xlabel(r'[$' + unitx + ' m$]') ax1.set_ylabel(r'Thickness ' + r'[$' + unity1 + ' m$]') # ax2.set_ylim([-20, 20]) ax2.set_ylim(-1.1 * np.max(np.abs(errorThickness[argNotNAN]) * factory2), 1.1 * np.max(np.abs(errorThickness[argNotNAN]) * factory2)) ax2.set_ylabel(r'Residual' + r'[$' + unity2 + ' m$]') ax2.grid(b='off') plt.xlim(-1.1 * np.max(xvec * factorx), 1.1 * np.max(xvec * factorx)) plt.tight_layout(rect=(0, 0, 1, .98)) if saveFigFlag: wpu.save_figs_with_idx(fname2save, extension='png') if saveAsciiFlag: csv_fname = wpu.get_unique_filename(fname2save, 'csv') np.savetxt(csv_fname, np.transpose([xvec, data, fitted, fitted - data]), delimiter=',\t', header="xvec, data, fitted, residual, " + str4title, fmt='%.6g') plt.show(block=False)
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()
def integrate_DPC_cumsum(data_DPC, wavelength, grazing_angle=0.0, projectionFromDiv=1.0, labels=[], xlabel='x', ylabel='Height', titleStr='', saveFileSuf=''): ls_cycle, lc_cycle = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'], ncurves=data_DPC.shape[1] - 1, cmap_str='gist_rainbow_r') if grazing_angle // .00001 > 0: projection = 1 / np.sin(grazing_angle) * projectionFromDiv else: projection = projectionFromDiv xvec = data_DPC[:, 0] * projection plt.figure(figsize=(12, 12 * 9 / 16)) list_integrated = [xvec] header = [xlabel + ' [m]'] for j_line in range(1, data_DPC.shape[1]): integrated = ( np.cumsum(data_DPC[:, j_line] - np.mean(data_DPC[:, j_line])) * (xvec[1] - xvec[0])) integrated *= -1 / 2 / np.pi * wavelength * np.abs(projection) # TODO: check here!! if j_line == 1: factor_x, unit_x = wpu.choose_unit(xvec) factor_y, unit_y = wpu.choose_unit(integrated) list_integrated.append(integrated) header.append(labels[j_line - 1]) plt.plot(xvec * factor_x, integrated * factor_y, next(ls_cycle), c=next(lc_cycle), label=labels[j_line - 1]) marginx = 0.1 * np.ptp(xvec * factor_x) plt.xlim( [np.min(xvec * factor_x) - marginx, np.max(xvec * factor_x) + marginx]) plt.xlabel(xlabel + r' [$' + unit_x + ' m$]') plt.ylabel(ylabel + r' [$' + unit_y + ' m$]') plt.legend(loc=0, fontsize=12) if grazing_angle // .00001 > 0: plt.title(titleStr + 'Mirror Height,\n' + 'grazing angle {:.2f} mrad,\n'.format(grazing_angle * 1e3) + 'projection due divergence = ' + r'$ \times $ {:.2f}'.format(projectionFromDiv)) else: plt.title(titleStr + 'Integration Cumulative Sum') plt.tight_layout() wpu.save_figs_with_idx(saveFileSuf) plt.show() data2saveV = np.asarray(list_integrated).T header.append(ylabel + ' [m]') if grazing_angle // .00001 > 0: header.append('grazing_angle = {:.4g}'.format(grazing_angle)) if projectionFromDiv // 1 != 1: header.append('projection due divergence = ' + '{:.2f}x'.format(projectionFromDiv)) wpu.save_csv_file(data2saveV, wpu.get_unique_filename( saveFileSuf + '_integrated_' + xlabel, 'csv'), headerList=header) return np.asarray(list_integrated).T
def curv_from_height(height, virtual_pixelsize, grazing_angle=0.0, projectionFromDiv=1.0, labels=[], xlabel='x', ylabel='Curvature', titleStr='', saveFileSuf=''): ls_cycle, lc_cycle = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'], ncurves=height.shape[1] - 1, cmap_str='gist_rainbow_r') if grazing_angle//.00001 > 0: projection = 1/np.sin(grazing_angle)*projectionFromDiv else: projection = projectionFromDiv projected_pixel = virtual_pixelsize*projection xvec = wpu.realcoordvec(height.shape[0]-2, projected_pixel) print('projected_pixel') print(projected_pixel) plt.figure(figsize=(12, 12*9/16)) list_curv = [xvec] header = [xlabel + ' [m]'] for j_line in range(1, height.shape[1]): curv = np.diff(np.diff(height[:, j_line]))/projected_pixel**2 if j_line == 1: factor_x, unit_x = wpu.choose_unit(xvec) #factor_y, unit_y = wpu.choose_unit(curv) list_curv.append(curv) header.append(labels[j_line - 1]) plt.plot(xvec*factor_x, curv, next(ls_cycle), c=next(lc_cycle), label=labels[j_line - 1]) marginx = 0.1*np.ptp(xvec*factor_x) plt.xlim([np.min(xvec*factor_x)-marginx, np.max(xvec*factor_x)+marginx]) plt.xlabel(xlabel + r' [$' + unit_x + ' m$]') plt.ylabel(ylabel + r'[$m^{-1}$]') plt.legend(loc=0, fontsize=12) if grazing_angle//.00001 > 0: plt.title(titleStr + 'Mirror Curvature,\n' + 'grazing angle {:.2f} mrad,\n'.format(grazing_angle*1e3) + 'projection due divergence = ' + r'$ \times $ {:.2f}'.format(projectionFromDiv)) else: plt.title(titleStr + 'Curvature') plt.tight_layout() wpu.save_figs_with_idx(saveFileSuf) plt.show() data2saveV = np.asarray(list_curv).T header.append(ylabel + ' [1/m]') if grazing_angle//.00001 > 0: header.append(', grazing_angle = {:.4g}'.format(grazing_angle)) if projectionFromDiv//1 != 1: header.append('projection due divergence = ' + '{:.2f}x'.format(projectionFromDiv)) wpu.save_csv_file(data2saveV, wpu.get_unique_filename(saveFileSuf + '_curv_' + xlabel, 'csv'), headerList=header) return np.asarray(list_curv).T
def integrate_DPC_cumsum(data_DPC, wavelength, grazing_angle=0.0, projectionFromDiv=1.0, remove2ndOrder=False, labels=[], xlabel='x', ylabel='Height', titleStr='', saveFileSuf=''): ls_cycle, lc_cycle = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'], ncurves=data_DPC.shape[1] - 1, cmap_str='gist_rainbow_r') if grazing_angle//.00001 > 0: projection = 1/np.sin(grazing_angle)*projectionFromDiv else: projection = projectionFromDiv xvec = data_DPC[:, 0]*projection plt.figure(figsize=(12, 12*9/16)) list_integrated = [xvec] header = [xlabel + ' [m]'] for j_line in range(1, data_DPC.shape[1]): integrated = (np.cumsum(data_DPC[:, j_line] - np.mean(data_DPC[:, j_line])) * (xvec[1]-xvec[0])) # TODO: removed mean 20181020 # integrated = (np.cumsum(data_DPC[:, j_line])) * (xvec[1]-xvec[0]) integrated *= -1/2/np.pi*wavelength*np.abs(projection) p02 = np.polyfit(xvec, integrated, 2) fitted_pol2 = p02[0]*xvec**2 + p02[1]*xvec + p02[2] if remove2ndOrder: integrated -= fitted_pol2 titleStr += 'Removed 2nd order, ' # TODO: check here!! if j_line == 1: factor_x, unit_x = wpu.choose_unit(xvec) factor_y, unit_y = wpu.choose_unit(integrated) list_integrated.append(integrated) header.append(labels[j_line - 1]) lc = next(lc_cycle) plt.plot(xvec*factor_x, integrated*factor_y, next(ls_cycle), c=lc, label=labels[j_line - 1]) if not remove2ndOrder: plt.plot(xvec*1e6, (fitted_pol2)*factor_y, '--', color=lc, lw=3) marginx = 0.1*np.ptp(xvec*factor_x) plt.xlim([np.min(xvec*factor_x)-marginx, np.max(xvec*factor_x)+marginx]) plt.xlabel(xlabel + r' [$' + unit_x + ' m$]') plt.ylabel(ylabel + r' [$' + unit_y + ' m$]') plt.legend(loc=0, fontsize=12) if grazing_angle//.00001 > 0: plt.title(titleStr + 'Mirror Height,\n' + 'grazing angle {:.2f} mrad,\n'.format(grazing_angle*1e3) + 'projection due divergence = ' + r'$ \times $ {:.2f}'.format(projectionFromDiv)) else: plt.title(titleStr + 'Integration Cumulative Sum') plt.tight_layout() wpu.save_figs_with_idx(saveFileSuf) plt.show() data2saveV = np.asarray(list_integrated).T header.append(ylabel + ' [m]') if grazing_angle//.00001 > 0: header.append('grazing_angle = {:.4g}'.format(grazing_angle)) if projectionFromDiv//1 != 1: header.append('projection due divergence = ' + '{:.2f}x'.format(projectionFromDiv)) wpu.save_csv_file(data2saveV, wpu.get_unique_filename(saveFileSuf + '_integrated_' + xlabel, 'csv'), headerList=header) return np.asarray(list_integrated).T
def curv_from_height(height, virtual_pixelsize, grazing_angle=0.0, projectionFromDiv=1.0, labels=[], xlabel='x', ylabel='Curvature', titleStr='', saveFileSuf=''): ls_cycle, lc_cycle = wpu.line_style_cycle(['-'], ['o', 's', 'd', '^'], ncurves=height.shape[1] - 1, cmap_str='gist_rainbow_r') if grazing_angle // .00001 > 0: projection = 1 / np.sin(grazing_angle) * projectionFromDiv else: projection = projectionFromDiv projected_pixel = virtual_pixelsize * projection xvec = wpu.realcoordvec(height.shape[0] - 2, projected_pixel) print('projected_pixel') print(projected_pixel) plt.figure(figsize=(12, 12 * 9 / 16)) list_curv = [xvec] header = [xlabel + ' [m]'] for j_line in range(1, height.shape[1]): curv = np.diff(np.diff(height[:, j_line])) / projected_pixel**2 if j_line == 1: factor_x, unit_x = wpu.choose_unit(xvec) #factor_y, unit_y = wpu.choose_unit(curv) list_curv.append(curv) header.append(labels[j_line - 1]) plt.plot(xvec * factor_x, curv, next(ls_cycle), c=next(lc_cycle), label=labels[j_line - 1]) marginx = 0.1 * np.ptp(xvec * factor_x) plt.xlim( [np.min(xvec * factor_x) - marginx, np.max(xvec * factor_x) + marginx]) plt.xlabel(xlabel + r' [$' + unit_x + ' m$]') plt.ylabel(ylabel + r'[$m^{-1}$]') plt.legend(loc=0, fontsize=12) if grazing_angle // .00001 > 0: plt.title(titleStr + 'Mirror Curvature,\n' + 'grazing angle {:.2f} mrad,\n'.format(grazing_angle * 1e3) + 'projection due divergence = ' + r'$ \times $ {:.2f}'.format(projectionFromDiv)) else: plt.title(titleStr + 'Curvature') plt.tight_layout() wpu.save_figs_with_idx(saveFileSuf) plt.show() data2saveV = np.asarray(list_curv).T header.append(ylabel + ' [1/m]') if grazing_angle // .00001 > 0: header.append(', grazing_angle = {:.4g}'.format(grazing_angle)) if projectionFromDiv // 1 != 1: header.append('projection due divergence = ' + '{:.2f}x'.format(projectionFromDiv)) wpu.save_csv_file(data2saveV, wpu.get_unique_filename(saveFileSuf + '_curv_' + xlabel, 'csv'), headerList=header) return np.asarray(list_curv).T
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