Fast Preprocessing of Grazing Incidence Diffraction Data
Project description
pygid
Fast Preprocessing of Grazing Incidence Diffraction (GID) Data
pygid is a Python-based package for fast conversion of 2D detector images into reciprocal (Cartesian and polar) coordinates. Although the package focuses on the grazing-incidence geometry, it can also be used for transmission (SAXS/WAXS) experiments.
Key features:
- Supports grazing-incidence and transmission geometries.
- Converts area detector images to Cartesian, polar, and pseudopolar coordinates.
- Based on a widely used detector geometry description (PONI files).
- Performs radial and azimuthal profiling.
- Handles single frames, multiple frames, and batch processing.
- Provides a wide range of intensity corrections, including polarization, solid angle, absorption, Lorentz, and detector corrections.
- Utilizes simulation of GIWAXS peak positions using CIF crystal structure files (via
pygidSIM). - Includes experimental and sample metadata management.
- Allows plotting of the conversion results with adjustable parameters.
- Reuses the coordinate maps for several images with the same geometry.
- Supports several interpolation techniques.
- Saves the results of conversion and metadata as a NXsas (NeXus) file.
- Can be used as a first step in the
mlgidanalysis pipeline.
Input
-
Experimental geometry parameters, e.g. a PONI file — see Tutorial 1.
-
One of the following:
- Detector image provided as a 2D NumPy array, a 3D array (with axis 0 representing the image stack axis) or list of 2D arrays.
- Path to the raw data file(s) (TIFF, EDF, HDF5) — see Tutorial 3.
Output
-
Image converted to reciprocal-space coordinates, returned together with the corresponding coordinate axes as NumPy arrays — see Tutorial 4 and Tutorial 5.
-
A standardized NeXus (HDF5) file — see File format.
For example, for cylindrical GID coordinates:img_gid_q— converted image stored as a 3D array (with dimension #0 representing the image stack axis) under /entry/data/img_gid_qq_z— corresponding vertical axis (first dimension) stored as a 1D array under /entry/data/q_zq_xy— corresponding horizontal axis (second dimension) stored as a 1D array under /entry/data/q_xy
-
Image exported in a standard format such as PNG, TIFF, or JPEG.
Installation
Install using pip
pip install pygid
Install from source
First, clone the repository:
git clone https://github.com/mlgid-project/pygid.git
Then, to install all required modules, navigate to the cloned directory and execute:
cd pygid
pip install -e .
How to use (short version)
Below is a minimal working example demonstrating how to use pygid to convert 2D detector images
to reciprocal space coordinates in a grazing-incidence diffraction (GID) geometry.
- Download example dataset from Zenodo or set your own files:
import pygid
files = pygid.datasets.get_dataset("tutorial_00")
data_path = files["data"]
poni_path = files["poni"]
mask_path = files["mask"]
yaml_path = files["yaml"]
- Load experimental parameters from the PONI file — see Tutorial 1
import pygid
params = pygid.ExpParams(
poni_path=poni_path, # path to the PONI file
mask_path=mask_path, # path to the mask file (EDF/ NPY/ TIFF)
fliplr=True, # horizontal flipping of the image
flipud=True, # vertical flipping of the image
transp=False, # 90 deg rotation of the image
ai=0.075, # angle of incidence in degrees
)
- Enter sample and experimental metadata — see Tutorial 6
Experimental Metadata (ExpMetadata)
Dictionary-like object containing experiment information:
exp_metadata = pygid.ExpMetadata(
start_time="2024-03-29T15:51:41.343788",
end_time="2024-07-12T08:26:22Z",
source_type="synchrotron",
source_name="ESRF ID10",
instrument_name="ID10-surf",
detector="eiger4m",
monitor=1.1e5, # Optional
extend_fields=["monitor"] # Fields appended instead of overwritten
)
Sample Metadata (SampleMetadata)
Load sample information from a YAML file:
smpl_metadata = pygid.SampleMetadata(
path_to_load=yaml_path,
)
- Create coordinate maps based on geometry and experimental setup — see Tutorial 2
matrix = pygid.CoordMaps(
params,
vert_positive=False, # Cut the positive values for the vertical axis
hor_positive=False, # Cut the positive values for the horizontal axis
)
- Initialize pygid.Conversion instance and load the detector image — see Tutorial 3
analysis = pygid.Conversion(
matrix=matrix,
path=data_path, # path to the data file
dataset = '/entry_0000/ESRF-ID10/eiger4m/data',
)
- Perform GID geometry conversion and plot the result, returns the axes and the converted image (list of images) — see Tutorial 4
q_xy, q_z, img = analysis.det2q_gid(
plot_result=True, # plot the result of conversion
clims=(600, 1e5), # image color limits
save_fig=True, path_to_save_fig="240124_PEN_DIP_polar.png", # save figure
return_result=True, # return arrays
save_result=True, path_to_save="240124_PEN_DIP_result.h5", # save data as a NXsas (NeXus) file
overwrite_file=False, # overwrite the existing file
smpl_metadata=smpl_metadata,
exp_metadata=exp_metadata
)
For a detailed description of functionality, follow the tutorials.
Usage examples can be found in the Jupyter Notebook: example/pygid_example.ipynb, and on Zenodo with data collected from different sources.
Citation
Abukaev, A., Völter, C., Romodin, M., Schwartzkopff, S., Bertram, F., Konovalov, O., Hinderhofer, A., Lapkin, D. and Schreiber, F., 2026. pygid: a Python package for fast data reduction in grazing-incidence diffraction. J. Appl. Cryst., 59(1). doi: 10.1107/S1600576725010593
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pygid-0.2.9.tar.gz.
File metadata
- Download URL: pygid-0.2.9.tar.gz
- Upload date:
- Size: 79.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
559683867c3cf082da266920b1492fdaa40c67e9cbed8708142c2f74e673eb43
|
|
| MD5 |
957977614e7bd2abf1374e984c5ca454
|
|
| BLAKE2b-256 |
da6ab56c1e3c3bf8e4f885a69c886dfc1436622d6203354f38cef03fd2484d1e
|
File details
Details for the file pygid-0.2.9-py3-none-any.whl.
File metadata
- Download URL: pygid-0.2.9-py3-none-any.whl
- Upload date:
- Size: 81.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
562cc7f86ad415789e0d09f4d03d8fded842fb268b7fd3e717a9b23b86e0e669
|
|
| MD5 |
9e17ba5ddd97d04678fc75f4b614b7c5
|
|
| BLAKE2b-256 |
a457ed8523475f08d5ce0d9af3c7a9538285953dea6ed3271d1e730f634b5f95
|