def propagate(wfr_directory, sdir, focus, analysis = False, crop = [], append = None, descriptor = "", VERBOSE = True): print("info") print("wavefront directory: {}".format(wfr_directory)) print("save directory: {}".format(sdir)) print("focus (i.e. beamline option): {}".format(focus)) print("analysis: {}".format(analysis)) print("crop: {}".format(crop)) print("append: {}".format(append)) for item in descriptor: print(item) wfr = Wavefront() wfr.load_hdf5(wdir) sdir = sdir + "/{}/".format(focus) bl = get_beamline_object(ekev = 4.96, options = focus, crop = crop) if append is not None: for item in append: bl.append(item[0],item[1]) wfr.log(bl, descriptor) bl.propagate(wfr) if analysis: wfr.analysis() wfr.store_hdf5(sdir)
def sliceFocus(wfr, ekev, focus='nano', nslices=500, axisName='x', outdir=None): spb = get_beamline_object(apertures=False, surface=False) el_n = len(spb.propagation_options[0]['optical_elements']) - 1 spb.propagation_options[0]['optical_elements'][el_n].L *= 0.98 slice_interval = 2.2 - copy( spb.propagation_options[0]['optical_elements'][el_n].L / nslices) spb.propagation_options[0]['propagation_parameters'][ el_n] = propagation_parameters(5, 1, 5, 1, mode='fresnel') spb.propagate(wfr) plotIntensity(wfr) if axisName == 'x': data_focslice = np.zeros([nslices, np.shape(wfr.data.arrEhor)[0]]) elif axisName == 'y': data_focslice = np.zeros([nslices, np.shape(wfr.data.arrEhor)[1]]) for n in range(nslices): print("Slice {}/{}".format(n + 1, nslices)) bl = Beamline() bl.append(SRWLOptD(slice_interval), propagation_parameters(1, 1, 1, 1, mode='quadratic')) bl.propagate(wfr) plotIntensity(wfr) data_focslice[-n - 1, :] = wfr.get_intensity()[:, :, 0].sum(-1) #plt.plot(data_focslice[-n-1, :]) plt.show() y = np.linspace( spb.bl.propagation_options[0]['optical_elements'][el_n].L, spb.bl.propagation_options[0]['optical_elements'][el_n].L + nslices * slice_interval, nslices) # ============================================================================= # ax1 = colorbar_plot(data_focslice, # get_mesh(data_focslice, # wfr.get_spatial_resolution()[0]*1e6, # y[1]-y[0]), # aspect = 'auto', # scale = 1, # #norm=mpl.colors.LogNorm(), # xlabel = "x($\mu m$)", # ylabel = "z(m)", # return_axes = True) # # ============================================================================= return data_focslice
def aperture(angle = 1e-03, ekev = 5.0): wfr= construct_SA1_wavefront(512, 512, ekev, 0.25) bl = get_beamline_object(ekev, apertures = True, surface = True, crop = ["d1", "HOM1"], theta_HOM = angle) bl.propagate(wfr) return wfr.get_intensity().sum()
def no_mirror(ekev = 5.0): wfr= construct_SA1_wavefront(512, 512, ekev, 0.25) bl = get_beamline_object(ekev, apertures = False, surface = False, crop = ["d1", "d1"]) bl.propagate(wfr) ii = wfr.get_intensity().sum() plot_intensity_map(wfr) return ii
def propagate_NVE(): wfr_directory = sys.argv[1].replace("*", "/") job_name = "NKB_4980eV_250pC_Source_to_NVE" python_command = propagate_NVE input_directory = dCache + "/NanoKB-Pulse/source/" save_directory = input_directory.replace("/source/", "/NVE/") mkdir_p(save_directory) log_directory = logs focus = "nano" analysis = False filename = __file__ dt = datetime.now().__str__() function = python_command.__name__ description = "Propagate NanoKB Pulses 4.98 keV, 250 pC from Undulator-exit to the NVE" crop = 'NVE' append = None print("info") print("wavefront directory: {}".format(wfr_directory)) print("save directory: {}".format(save_directory)) print("focus (i.e. beamline option): {}".format(focus)) print("analysis: {}".format(analysis)) print("datetime: {}".format(dt)) print("filename: {}".format(filename)) print("function: {}".format(function)) print("description: {}".format(description)) wfr = Wavefront() wfr.load_hdf5(wfr_directory) wfr.set_electric_field_representation('frequency') wfr = scale(wfr) print("wfr domain: {}".format(wfr.params.wDomain)) bl = get_beamline_object(ekev=4.96, options=focus, crop=crop, theta_KB=5e-03, theta_HOM=3.5e-03) wfr.custom_fields['focus'] = focus wfr.custom_fields['job name'] = job_name wfr.custom_fields['input directory'] = wfr_directory wfr.custom_fields['datetime'] = dt wfr.custom_fields['function'] = function.__str__() wfr.custom_fields['filename'] = filename wfr.custom_fields['description'] = description #wfr.custom_fields['bl'] = bl.__str__ bl.propagate(wfr) if analysis: wfr.analysis() wfr.store_hdf5(wfr_directory.replace("/source/", "/NVE/"))
return wfr def z_eff(z1, z2): return z1 * z2 / (z1 + z2) if __name__ == '__main__': z = z_eff(8e-03, 3.5) from wpg.wpg_uti_wf import plot_intensity_map as plotIntensity from felpy.model.src.coherent import construct_gaussian wfr = construct_SA1_wavefront(1024, 1024, 9.3, 0.25) bl = get_beamline_object(crop="NVE") bl.append(Drift(2.2 + 8e-02), propagation_parameters(1 / 20, 1, 1 / 50, 1)) bl.propagate(wfr) plotIntensity(wfr) # ============================================================================= # # plotIntensity(wfr) # # print("Pixel Size: {}".format(wfr.get_spatial_resolution())) # propThruMaskLite(wfr) # plotIntensity(wfr) # # bl = Beamline() # bl.append(Drift(z), propagation_parameters(1/10,1,1/10,1, 'quadratic')) # bl.propagate(wfr) # plotIntensity(wfr) #