Ultrafast dark-field X-ray microscopy to image strain wave propagation
Creators
- 1. Department of Physics, Technical University of Denmark
- 2. Department of Materials Science & Engineering, Stanford University
- 3. Physics Division, Lawrence Livermore National Laboratory
- 4. SLAC National Accelerator Laboratory
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))
Notes
Files
536_0.zip
Files
(26.6 GB)
Name | Size | Download all |
---|---|---|
md5:926ce8a3bc383d085915f5e299a0cc1f
|
1.4 GB | Preview Download |
md5:f25ae95349d0ffa599c2ea4937b58b15
|
1.5 GB | Preview Download |
md5:f4256b3dfb6818d039d5b421032ca7b7
|
723.4 MB | Preview Download |
md5:be325526f806fef2165863db568fe08d
|
1.4 GB | Preview Download |
md5:fe7a991fe56ce4416fab64d0558b019b
|
1.4 GB | Preview Download |
md5:11390511df0b2cfca49e403bc32b109d
|
1.4 GB | Preview Download |
md5:1546d14bd5742c0bdb2b4c0b8c8468f8
|
1.4 GB | Preview Download |
md5:062d1c6aa8a0639915250cbef93bc6f6
|
1.2 GB | Preview Download |
md5:cc72d86335160c4fed3a72472ac74ee7
|
1.4 GB | Preview Download |
md5:3d3f4f0968cdee562244c2307b24fdb2
|
1.4 GB | Preview Download |
md5:5d6b11cde492bbf840464ba95a9e6a8a
|
1.4 GB | Preview Download |
md5:ebac9903ad2c11654151b1b37ff3ec03
|
1.4 GB | Preview Download |
md5:6e6796c798c99384139fbd87104f3461
|
1.4 GB | Preview Download |
md5:d71b0589ef381d1775c95435147b12fb
|
1.4 GB | Preview Download |
md5:315ccdf2b6f3165cacb0a20bfa3bdfe8
|
1.4 GB | Preview Download |
md5:603c2373d95bca8e21b79fc64ca4aca4
|
1.4 GB | Preview Download |
md5:42f240115afe8ee1713b2724207c02c9
|
1.4 GB | Preview Download |
md5:e378a7d47401774d96f17ccb8fa4d4fc
|
1.4 GB | Preview Download |
md5:afe9c7c47200b4862654b5e6ae27941b
|
1.4 GB | Preview Download |
md5:dc0bbdb859b8987fccdd53cda82f8185
|
212.4 MB | Preview Download |