Dataset information
Available languages
English
Keywords
Phonon, Strain wave, X-ray free electron laser, Dark field X-ray microscopy
Dataset description
This dataset includes DF-XRM data obtained at an X-FEL source. The sample is a diamond single crystal with a strain wave propagating through the center, which is imaged in a stroboscopic fashion. This data originated the LCLS, see arXiv:2211.01042 for a description of the experiment. Run 538 contains a time series with 1 ns between each step, run 540 contains a time series with 72 ns steps (one full period) while run 536 contains a rocking curve. Each run is divided into hdf5 files with 2000 shots each. Each hdf5 file has then been zipped using the BZIP2 algorithm to reduce the overall size. Each run contains header information with the status of the X-FEL beam and the laser (the laser excites the strain wave). The shots where the X-FEL beam is off should be used to subtract the detector background. Run 536 additionally contains motor positions for the goniometer. Please note: for run 538 and 540 there are ~120 shots at each position. However, the timing tool is unreliable, giving a ±1 ns error, and to analyze this data the correct time of each shot must be first identified. This can be done by looking at the position of the strain wave. Using python, the data may be unziped, opened, and visualized in the following way: import zipfile import numpy as np import h5py #unzip with zipfile.ZipFile(f'538_0.zip', 'r') as zip_ref: zip_ref.extractall('') with h5py.File(f'538_0.hdf5', 'r') as f: # print contents of file for key in f.keys(): print(key, f[key].shape, f[key].dtype) # approximate the detector background mask = np.array(f[b'lightStatus_xray']) == 0 Images_DF_Xray_OFF = np.array(f['images_dark_field_arm'][mask,:,:]) df_noise = np.median(Images_DF_Xray_OFF, axis = 0) # extract desired frames ims = np.array(f['images_dark_field_arm'][120*1:120*2]) im = np.average(ims, axis = 0) # plot the detector background and the average of the selected frames import matplotlib.pyplot as plt fig, axes = plt.subplots(1,2, figsize = (4, 12), dpi = 300) axes[0].imshow(df_noise, vmin = np.percentile(df_noise,1), vmax = np.percentile(df_noise,99)) axes[1].imshow(im-df_noise, vmin = np.percentile(im-df_noise,1), vmax = np.percentile(im-df_noise,99))
European data infrastructure with broad catalog discovery, free evaluation access and production-grade API options.
190K+
indexed dataset pages
32
countries and EU institutions
Free API quota
for evaluation and prototypes
SLA
history and push on production APIs