# Experimental parameters # ========================================================================== (list_sample_files, list_ref_files, list_dark_files, pixelSize, stepSize) = intial_setup() # ========================================================================== # % % Load one image and crop # ========================================================================== img = dxchange.read_tiff(list_sample_files[0]) [colorlimit, cmap ] = wpu.plot_slide_colorbar(img, title='Raw Image', xlabel=r'x [$\mu m$ ]', ylabel=r'y [$\mu m$ ]', extent=wpu.extent_func(img, pixelSize) * 1e6) img_croped, idx4crop = wpu.crop_graphic(zmatrix=img, verbose=True, kargs4graph={ 'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1] }) # ========================================================================== # %% Load tiff files to numpy array # ==========================================================================
searchRegion = easyqt.get_int( "Enter Size of Region for Searching\n the Peak [in Pixels]", title='Experimental Values', default_value=20) os.chdir(originalDir) # ============================================================================= # %% Crop # ============================================================================= idx4crop = [0, -1, 0, -1] [colorlimit, cmap] = wpu.plot_slide_colorbar( img, title='SELECT COLOR SCALE,\n' + 'Raw Image, No Crop', xlabel=r'x [$\mu m$ ]', ylabel=r'y [$\mu m$ ]', extent=wpu.extent_func(img, pixelSize) * 1e6) idx4crop = wpu.graphical_roi_idx(img, verbose=True, kargs4graph={ 'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1] }) wpu.print_blue("MESSAGE: idx for cropping") wpu.print_blue(idx4crop) img = wpu.crop_matrix_at_indexes(img, idx4crop)
# ========================================================================== # Experimental parameters # ========================================================================== (list_sample_files, list_ref_files, list_dark_files, pixelSize, stepSize) = intial_setup() # ========================================================================== # % % Load one image and crop # ========================================================================== img = dxchange.read_tiff(list_sample_files[0]) [colorlimit, cmap] = wpu.plot_slide_colorbar(img, title='Raw Image', xlabel=r'x [$\mu m$ ]', ylabel=r'y [$\mu m$ ]', extent=wpu.extent_func(img, pixelSize)*1e6) img_croped, idx4crop = wpu.crop_graphic(zmatrix=img, verbose=True, kargs4graph={'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1]}) # ========================================================================== # %% Load tiff files to numpy array # ========================================================================== img_stack, ref_stack = files_to_array(list_sample_files, list_ref_files, list_dark_files,
if (figx.axes[0].images != []): data = figx.axes[0].images[0].get_array().data [xi, xf, yi, yf] = figx.axes[0].images[0].get_extent() ax = figx.axes[0].images[0].get_axes() title = figx.axes[0].images[0].axes.properties()['title'] xlabel = figx.axes[0].images[0].axes.properties()['xlabel'] ylabel = figx.axes[0].images[0].axes.properties()['ylabel'] cmap = figx.axes[0].images[0].properties()['cmap'].name [[vmin, vmax], cmap] = wpu.plot_slide_colorbar(data, title=title, xlabel=xlabel, ylabel=ylabel, extent=[xi, xf, yi, yf]) # plot surface fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') pixelsize = [(xf - xi) / data.shape[1], (yf - yi) / data.shape[0]] wpu.realcoordmatrix() xxGrid, yyGrid = np.meshgrid(np.linspace(xi, xf, data.shape[1]), np.linspace(yi, yf, data.shape[0]), indexing='xy')
def main_single_gr_Talbot(img, imgRef, phenergy, pixelsize, distDet2sample, period_harm, saveFileSuf, unwrapFlag=True, plotFlag=True, saveFigFlag=False): global inifname # name of .ini file [period_harm_Vert, period_harm_Hor] = period_harm # img, imgRef = wpu.align_two_images(img, imgRef) # Crop img_size_o = np.shape(img) # take index from ini file idx4crop = list(map(int, (wpu.get_from_ini_file(inifname, 'Parameters', 'Crop').split(',')))) # Plot Real Image wiht default crop tmpImage = wpu.crop_matrix_at_indexes(img, idx4crop) plt.figure() plt.imshow(tmpImage, cmap='viridis', extent=wpu.extent_func(tmpImage, pixelsize)*1e6) plt.xlabel(r'$[\mu m]$') plt.ylabel(r'$[\mu m]$') plt.colorbar() plt.title('Raw Image with initial Crop', fontsize=18, weight='bold') plt.pause(.1) # ask if the crop need to be changed newCrop = easyqt.get_yes_or_no('New Crop?') if saveFigFlag and not newCrop: wpu.save_figs_with_idx(saveFileSuf + '_Talbot_image') plt.close(plt.gcf()) if newCrop: [colorlimit, cmap] = wpu.plot_slide_colorbar(img, title='SELECT COLOR SCALE,\n' + 'Raw Image, No Crop', xlabel=r'x [$\mu m$ ]', ylabel=r'y [$\mu m$ ]', extent=wpu.extent_func(img, pixelsize)*1e6) idx4crop = wpu.graphical_roi_idx(img, verbose=True, kargs4graph={'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1]}) wpu.set_at_ini_file(inifname, 'Parameters', 'Crop', '{}, {}, {}, {}'.format(idx4crop[0], idx4crop[1], idx4crop[2], idx4crop[3])) img = wpu.crop_matrix_at_indexes(img, idx4crop) # Plot Real Image AFTER crop plt.imshow(img, cmap='viridis', extent=wpu.extent_func(img, pixelsize)*1e6) plt.xlabel(r'$[\mu m]$') plt.ylabel(r'$[\mu m]$') plt.colorbar() plt.title('Raw Image with New Crop', fontsize=18, weight='bold') if saveFigFlag: wpu.save_figs_with_idx(saveFileSuf + '_Talbot_image') plt.show(block=True) else: img = tmpImage imgRef = wpu.crop_matrix_at_indexes(imgRef, idx4crop) # calculate harmonic position after crop period_harm_Vert = int(period_harm_Vert*(idx4crop[1] - idx4crop[0]) / img_size_o[0]) period_harm_Hor = int(period_harm_Hor*(idx4crop[3] - idx4crop[2]) / img_size_o[1]) # Obtain harmonic periods from images (period_harm_Vert, _) = wgi.exp_harm_period(img, [period_harm_Vert, period_harm_Hor], harmonic_ij=['1', '0'], searchRegion=20, isFFT=False, verbose=True) (_, period_harm_Horz) = wgi.exp_harm_period(img, [period_harm_Vert, period_harm_Hor], harmonic_ij=['0', '1'], searchRegion=20, isFFT=False, verbose=True) # Calculate everything harmPeriod = [period_harm_Vert, period_harm_Hor] [int00, int01, int10, darkField01, darkField10, phaseFFT_01, phaseFFT_10] = wgi.single_2Dgrating_analyses(img, imgRef, harmonicPeriod=harmPeriod, plotFlag=plotFlag, unwrapFlag=unwrapFlag, verbose=True) virtual_pixelsize = [0, 0] virtual_pixelsize[0] = pixelsize[0]*img.shape[0]/int00.shape[0] virtual_pixelsize[1] = pixelsize[1]*img.shape[1]/int00.shape[1] diffPhase01 = phaseFFT_01*virtual_pixelsize[1]/distDet2sample/hc*phenergy diffPhase10 = phaseFFT_10*virtual_pixelsize[0]/distDet2sample/hc*phenergy return [int00, int01, int10, darkField01, darkField10, diffPhase01, diffPhase10, virtual_pixelsize]
totalShift_j = easyqt.get_int('Total Horizontal Shift', title='Title', default_value=0) _, allShifts = align_many_imgs_linearshifts( samplefileName, totalShift=[-totalShift_i, -totalShift_j]) else: img_ref = dxchange.read_tiff(samplefileName) if easyqt.get_yes_or_no('New Crop?'): [colorlimit, cmap] = wpu.plot_slide_colorbar( img_ref, title='SELECT COLOR SCALE,\n' + 'Raw Image, No Crop', xlabel=r'x [$\mu m$ ]', ylabel=r'y [$\mu m$ ]') idxROI = wpu.graphical_roi_idx(img_ref, kargs4graph={ 'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1] }) wpu.set_at_ini_file( inifname, 'Parameters', 'Crop', '{}, {}, {}, {}'.format(idxROI[0], idxROI[1], idxROI[2], idxROI[3])) else:
def main(): wpu._mpl_settings_4_nice_graphs() # ============================================================================= # %% Load Image # ============================================================================= originalDir = os.getcwd() samplefileName = easyqt.get_file_names("Choose one of the scan files")[0] data_dir = samplefileName.rsplit('/', 1)[0] os.chdir(data_dir) try: os.mkdir(data_dir + '/output/') except: pass fname2save = data_dir + '/output/' + samplefileName.rsplit( '_', 1)[0].rsplit('/', 1)[1] wpu.print_blue('MESSAGE: Loading files ' + samplefileName.rsplit('_', 1)[0] + '*.tif') listOfDataFiles = glob.glob(samplefileName.rsplit('_', 2)[0] + '*.tif') listOfDataFiles.sort() nfiles = len(listOfDataFiles) zvec_from = easyqt.get_choice( message='z distances is calculated or from table?', title='Title', choices=['Calculated', 'Tabled']) # %% if zvec_from == 'Calculated': startDist = easyqt.get_float('Starting distance scan [mm]', title='Title', default_value=20) * 1e-3 step_z_scan = easyqt.get_float( 'Step size scan [mm]', title='Title', default_value=5) * 1e-3 image_per_point = easyqt.get_int('Number of images by step', title='Title', default_value=1) zvec = np.linspace( startDist, startDist + step_z_scan * (nfiles / image_per_point - 1), int(nfiles / image_per_point)) zvec = zvec.repeat(image_per_point) strideFile = easyqt.get_int('Stride (Use only every XX files)', title='Title', default_value=1) listOfDataFiles = listOfDataFiles[0::strideFile] zvec = zvec[0::strideFile] print(zvec) elif zvec_from == 'Tabled': zvec = np.loadtxt( easyqt.get_file_names("Table with the z distance values in mm") [0]) * 1e-3 step_z_scan = np.mean(np.diff(zvec)) if step_z_scan > 0: pass else: listOfDataFiles = listOfDataFiles[::-1] zvec = zvec[::-1] img = dxchange.read_tiff(listOfDataFiles[0]) # ============================================================================= # %% Experimental parameters # ============================================================================= pixelSize = easyqt.get_float("Enter Pixel Size [um]", title='Experimental Values', default_value=.6500, decimals=5) * 1e-6 gratingPeriod = easyqt.get_float("Enter CB Grating Period [um]", title='Experimental Values', default_value=4.8) * 1e-6 pattern = easyqt.get_choice(message='Select CB Grating Pattern', title='Title', choices=['Diagonal', 'Edge']) # choices=['Edge', 'Diagonal']) sourceDistanceV = easyqt.get_float( "Enter Distance to Source\n in the VERTICAL [m]", title='Experimental Values', default_value=-0.73) sourceDistanceH = easyqt.get_float( "Enter Distance to Source\n in the Horizontal [m]", title='Experimental Values', default_value=34.0) unFilterSize = easyqt.get_int("Enter Size for Uniform Filter [Pixels]\n" + " (Enter 1 to NOT use the filter)", title='Experimental Values', default_value=1) searchRegion = easyqt.get_int( "Enter Size of Region for Searching\n the Peak [in Pixels]", title='Experimental Values', default_value=20) os.chdir(originalDir) # ============================================================================= # %% Crop # ============================================================================= idx4crop = [0, -1, 0, -1] [colorlimit, cmap] = wpu.plot_slide_colorbar( img, title='SELECT COLOR SCALE,\n' + 'Raw Image, No Crop', xlabel=r'x [$\mu m$ ]', ylabel=r'y [$\mu m$ ]', extent=wpu.extent_func(img, pixelSize) * 1e6) idx4crop = wpu.graphical_roi_idx(img, verbose=True, kargs4graph={ 'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1] }) wpu.print_blue("MESSAGE: idx for cropping") wpu.print_blue(idx4crop) # ============================================================================= # %% Dark indexes # ============================================================================= darkRegionSelctionFlag = easyqt.get_yes_or_no( 'Do you want to select ' + 'region for dark calculation?\n' + 'Press ESC to use [0, 20, 0, 20]') if darkRegionSelctionFlag: idx4cropDark = wpu.graphical_roi_idx(img, verbose=True, kargs4graph={ 'cmap': cmap, 'vmin': colorlimit[0], 'vmax': colorlimit[1] }) else: idx4cropDark = [0, 20, 0, 20] # dark_im = dxchange.read_tiff(listOfDataFiles[0])*0.0 + avgDark img = wpu.crop_matrix_at_indexes(img, idx4crop) # ============================================================================== # %% Harmonic Periods # ============================================================================== if pattern == 'Diagonal': period_harm_Vert = np.int( np.sqrt(2) * pixelSize / gratingPeriod * img.shape[0]) period_harm_Horz = np.int( np.sqrt(2) * pixelSize / gratingPeriod * img.shape[1]) elif pattern == 'Edge': period_harm_Vert = np.int(2 * pixelSize / gratingPeriod * img.shape[0]) period_harm_Horz = np.int(2 * pixelSize / gratingPeriod * img.shape[1]) # Obtain harmonic periods from images (period_harm_Vert, _) = wgi.exp_harm_period(img, [period_harm_Vert, period_harm_Horz], harmonic_ij=['1', '0'], searchRegion=40, isFFT=False, verbose=True) (_, period_harm_Horz) = wgi.exp_harm_period( img, [period_harm_Vert, period_harm_Horz], harmonic_ij=['0', '1'], searchRegion=40, isFFT=False, verbose=True) wpu.log_this('Input files: ' + samplefileName.rsplit('_', 1)[0] + '*.tif', preffname=fname2save) wpu.log_this('\nNumber of files : ' + str(nfiles)) wpu.log_this('Stride : ' + str(strideFile)) wpu.log_this('Z distances is ' + zvec_from) if zvec_from == 'Calculated': wpu.log_this('Step zscan [mm] : {:.4g}'.format(step_z_scan * 1e3)) wpu.log_this('Start point zscan [mm] : {:.4g}'.format(startDist * 1e3)) wpu.log_this('Pixel Size [um] : {:.4g}'.format(pixelSize * 1e6)) wpu.log_this('Grating Period [um] : {:.4g}'.format(gratingPeriod * 1e6)) wpu.log_this('Grating Pattern : ' + pattern) wpu.log_this('Crop idxs : ' + str(idx4crop)) wpu.log_this('Dark idxs : ' + str(idx4cropDark)) wpu.log_this('Vertical Source Distance: ' + str(sourceDistanceV)) wpu.log_this('Horizontal Source Distance: ' + str(sourceDistanceH)) wpu.log_this('Uniform Filter Size : {:d}'.format(unFilterSize)) wpu.log_this('Search Region : {:d}'.format(searchRegion)) # ============================================================================= # %% Calculate everything # ============================================================================= # ============================================================================= # %% multiprocessing # ============================================================================= ncpus = cpu_count() wpu.print_blue("MESSAGE: %d cpu's available" % ncpus) tzero = time.time() p = Pool(ncpus - 5) indexes = range(len(listOfDataFiles)) parameters = [] for i in indexes: parameters.append([ i, listOfDataFiles, zvec, idx4cropDark, idx4crop, period_harm_Vert, sourceDistanceV, period_harm_Horz, sourceDistanceH, searchRegion, unFilterSize ]) res = p.map(_func, parameters) p.close() wpu.print_blue('MESSAGE: Time spent: {0:.3f} s'.format(time.time() - tzero)) ''' res = [] for i in range(len(listOfDataFiles)): res.append(_func(i)) print(res) ''' # ============================================================================= # %% Sorting the data # ============================================================================= contrastV = np.asarray([x[0] for x in res]) contrastH = np.asarray([x[1] for x in res]) p0 = np.asarray([x[2] for x in res]) pv = np.asarray([x[3] for x in res]) ph = np.asarray([x[4] for x in res]) pattern_period_Vert_z = pixelSize / (pv[:, 0] - p0[:, 0]) * img.shape[0] pattern_period_Horz_z = pixelSize / (ph[:, 1] - p0[:, 1]) * img.shape[1] # ============================================================================= # %% Save csv file # ============================================================================= outputfname = wpu.get_unique_filename(fname2save, 'csv') wpu.save_csv_file(np.c_[zvec.T, contrastV.T, contrastH.T, pattern_period_Vert_z.T, pattern_period_Horz_z.T], outputfname, headerList=[ 'z [m]', 'Vert Contrast', 'Horz Contrast', 'Vert Period [m]', 'Horz Period [m]' ]) wpu.log_this('\nOutput file: ' + outputfname) # ============================================================================= # %% Plot # ============================================================================= # contrast vs z fig = plt.figure(figsize=(10, 7)) plt.plot(zvec * 1e3, contrastV * 100, '-ko', label='Vert') plt.plot(zvec * 1e3, contrastH * 100, '-ro', label='Hor') plt.xlabel(r'Distance $z$ [mm]', fontsize=14) plt.ylabel(r'Visibility $\times$ 100 [%]', fontsize=14) plt.title('Visibility vs detector distance', fontsize=14, weight='bold') plt.legend(fontsize=14, loc=0) wpu.save_figs_with_idx(fname2save) plt.show(block=False) # ============================================================================= # %% Plot Harmonic position and calculate source distance # ============================================================================= # from wavepytools.diag.coherence.fit_singleGratingCoherence_z_scan import fit_period_vs_z #xshi 20190719 from fit_singleGratingCoherence_z_scan import fit_period_vs_z (sourceDistance_from_fit_V, patternPeriodFromData_V) = fit_period_vs_z(zvec, pattern_period_Vert_z, contrastV, direction='Vertical', threshold=.002, fname4graphs=fname2save) (sourceDistance_from_fit_H, patternPeriodFromData_H) = fit_period_vs_z(zvec, pattern_period_Horz_z, contrastH, direction='Horizontal', threshold=0.0005, fname4graphs=fname2save)