Skip to main content

Coherent Diffraction Imaging Simulation Tools — BCDI simulation and NN-based phase retrieval

Project description

CDI-ST

CDI-ST

Coherent Diffraction Imaging — Simulation Tools

A Python application for end-to-end Bragg Coherent Diffraction Imaging (BCDI): crystal lattice construction, X-ray scattering simulation, neural-network phase retrieval, and 3D visualization, in a single GUI.

PyPI version Python License: MIT Status

Screenshots

Launcher Material — crystal builder
Results — simulated Bragg peak 3D Viewer — reconstruction

Installation

pip install cdi-stools

After installation, launch the GUI from any terminal:

cdi-st or cdi-stools

For ID01 / synchrotron .spec + .edf data support:

pip install "cdi-stools[id01]"

For everything:

pip install "cdi-stools[all]"

Support for other beamlines filenames comming in future updates...

Note: cdi-st ships a Qt-based GUI. On Linux, you may need system Qt dependencies (sudo apt install libxcb-cursor0 libxkbcommon-x11-0 on Ubuntu/Debian). On Windows and macOS the wheel includes everything.


What is BCDI?

Bragg Coherent Diffraction Imaging is a synchrotron technique that reconstructs the 3D shape and atomic-displacement field of nanocrystals by inverting the diffraction intensity around a Bragg peak. The intensity gives only |F(q)|², so reconstruction must recover the missing phase by iterative algorithms (HIO, RAAR, ER), more recently by neural networks.

CDI-ST integrates the entire workflow into one tool:

Step What you do Where in the GUI
1. Build a crystal Define material, shape, orientation, optional defects BCDI Simulation → Material
2. Set the X-ray geometry Beam energy, detector geometry, oversampling BCDI Simulation → Beam
3. Simulate diffraction Compute the 3D Bragg peak BCDI Simulation → Results
4. Generate training data Build a labeled dataset of (object, diffraction) pairs BCDI Data Analysis → Generate Data
5. Train an unsupervised NN AutoPhase_NN: physics-driven, no ground truth BCDI Data Analysis → AutoPhase_NN
6. Train a supervised NN CDI_NN: PhaseUNet3D learning the phase mapping BCDI Data Analysis → CDI_NN
7. Reconstruct NN → optionally refine with HIO/RAAR/ER BCDI Data Analysis → Reconstruction
8. Visualize and export Interactive 3D viewer, ParaView VTI export BCDI Data Analysis → 3D Viewer

The simulation pipeline

1. Material — build the crystal

Choose from preset materials (Si, Ge, Pt, Au, SiC, GaAs, ...) or import a custom CIF file. The crystal is built atom-by-atom from the unit cell, replicated to the requested supercell size.

You can:

  • Select the particle shape: cube, sphere, cylinder, hexagonal prism, octahedron, dodecahedron
  • Set the target oversampling ratio (controls how much of the diffraction volume the object occupies)
  • Add strain fields: radial gradient, edge dislocation, random
  • Add dislocations: edge / screw / mixed, at a configurable position with an arbitrary Burgers vector

The 3D lattice view (powered by Plotly) shows every atom in the supercell.

2. Beam — define the X-ray geometry

Select a reflection (h k l) from the auto-computed list of allowed peaks. The Beam tab also lets you set:

  • Beam energy (and the resulting wavelength)
  • Detector geometry: pixel pitch, sample-to-detector distance, detector size
  • Beam size in microns
  • Detector preset: Maxipix (516×516), Eiger 2M, custom rectangular

Detector preset auto-fills the geometry parameters.

3. Results — run the simulation

CDI-ST computes the diffraction in two paths:

  • Analytical path (cube/rectangular shapes, no strain): closed-form Fourier transform of the support
  • FFT path (any shape, any strain field): full 3D FFT of the complex object

Output: 3D diffraction volume |F(q)|², displayed as 2D slices (qx-qy, qx-qz) and in an interactive 3D Plotly viewer with iso-surface controls.

You can export the simulation as a .npz file ready for the data-analysis side, or for use as ground truth when training NNs.


The data-analysis pipeline

4. Generate Data — create training samples

Generates a dataset of synthetic BCDI samples for NN training. Each sample contains the ground-truth phase, support, and the simulated diffraction intensity. You control:

  • Number of samples (typically 2,000–10,000)
  • Grid size (64³ recommended for training, 128³ for production inference)
  • Materials (random or fixed)
  • Particle size variation (random supercell multiplier)
  • Random dislocations adds occasional edge/screw/mixed dislocations
  • Random strain adds occasional radial/edge/random strain fields

Samples save as sample_XXXXX.npz and a manifest.json. Generation is parallelizable and resumable.

5. AutoPhase_NN — unsupervised physics-driven NN

AutoPhase_NN is a 3D dual-decoder convolutional network that learns to invert the Fourier modulus constraint without ground truth. It predicts the object's amplitude and phase such that |FFT(amp · exp(iφ))| matches the measured magnitude. The loss is a normalized-magnitude error plus optional regularizers on phase smoothness and support compactness. This is the network from (Yao, Yudong, et al. npj Computational Materials 8.1 (2022) ) reimplemented for this codebase.

Training is GPU-accelerated (CUDA preferred) and converges in a few dozen epochs on 2,000+ samples. The best checkpoint is saved automatically.

6. CDI_NN — supervised PhaseUNet3D

A 3D U-Net that predicts the phase field from the diffraction magnitude, trained against the ground-truth phase from the data generator.

Use AutoPhase_NN when you don't trust your simulator's ground truth (or have none). Use CDI_NN when you have a high-fidelity simulator and want a direct mapping. Use both via the ensemble mode in the Reconstruction tab.

7. Reconstruction — invert experimental or simulated data

Load any .npz (simulated) or .h5 (experimental) BCDI file, or convert a SPEC + EDF scan from ID01 directly via the dialog. Choose:

  • NN-only: forward pass, twin-image suppression, COM centering
  • Refined: NN seed → HIO + RAAR + ER iterative phase retrieval
  • Ensemble: AutoPhase_NN + CDI_NN combined, optionally refined
  • Compare: runs both modes side-by-side

The output is a complex object (amplitude + phase), a binary support, the R-factor convergence curve, and 2D slices at the COM of the reconstruction.

For experimental data, the loader handles:

  • Detector chip-gap masking (Maxipix, Eiger)
  • Hot-pixel removal
  • Beamstop / direct-beam streak removal
  • Bragg-peak-centered cropping
  • Optional q-space orthogonalization via xrayutilities (with [id01] extra)

8. 3D Viewer — interactive visualization

The viewer renders the reconstruction in three modes:

  • Point cloud: every voxel above threshold, colored by amplitude / phase / strain, with per-voxel opacity weighted by intensity
  • Isosurface: smoothed iso-shell with internal data points showing through
  • Surface only: bare iso-mesh with edges visible

Controls:

  • Threshold (% of peak amplitude), voxel size, opacity, colormap
  • Color scale auto / manual (vmin / vmax)
  • Clip plane on any axis
  • Mouse: left-drag rotate, right-drag pan, wheel zoom, double-click reset
  • Export PNG snapshot or VTI (ParaView)

Project structure

cdi-st/
├── src/cdi_st/
│   ├── __init__.py
│   ├── __main__.py              # python -m cdi_st
│   ├── bcdi_gui.py              # main entry point + launcher + splash
│   ├── bcdi_core.py             # crystal builder, simulator, reflection calculator
│   ├── nn_gui_tabs.py           # all NN-related GUI tabs
│   ├── nn_data_generator.py     # training-data generator
│   ├── nn_dataset.py            # PyTorch Dataset wrapper
│   ├── nn_phase_model.py        # PhaseUNet3D (supervised)
│   ├── nn_autophase_model.py    # AutoPhaseNet3D (unsupervised)
│   ├── nn_train.py              # supervised training CLI
│   ├── nn_autophase_train.py    # unsupervised training CLI
│   ├── nn_phase_retrieval.py    # HIO / RAAR / ER iterative algorithms
│   ├── nn_autophase_infer.py    # inference: nn_only / refined / ensemble
│   ├── nn_experimental_loader.py # h5/spec/edf loading + preprocessing
│   ├── nn_demo.py
│   ├── nn_visualize.py
│   └── CDI_ST_logo.png
├── tests/
├── docs/
├── pyproject.toml
├── README.md
├── LICENSE
└── CHANGELOG.md

Citing

If you use CDI-ST in published research, please cite:

@software{saidi_cdi_st_2026,
  author       = {Saidi, Soufiane},
  title        = {CDI-ST: Coherent Diffraction Imaging — Simulation Tools},
  year         = {2026},
  publisher    = {GitHub},
  url          = {https://github.com/Refze/CDI-St}
}

License

MIT — see LICENSE.

Author

Soufiane SAIDIsaidisoufiane@hotmail.com

We heavily encourage you to use the in-app Reports & Suggestions button to send any type of feedback.


Acknowledgments

Built on the shoulders of the BCDI and python community: PyNX, BCDI-Utilities, cdiutils, xrayutilities, scikit-image, PyQt6, and the AutoPhaseNN paper by Yao et al. (2022).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdi_stools-0.1.0.tar.gz (164.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cdi_stools-0.1.0-py3-none-any.whl (171.9 kB view details)

Uploaded Python 3

File details

Details for the file cdi_stools-0.1.0.tar.gz.

File metadata

  • Download URL: cdi_stools-0.1.0.tar.gz
  • Upload date:
  • Size: 164.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cdi_stools-0.1.0.tar.gz
Algorithm Hash digest
SHA256 259c08af6fd31933566ab2cc83525f08dc72eeabe7faaa49a0e5982273298331
MD5 69ee79564dac6772220532d8ef4da611
BLAKE2b-256 646fb21cbf0fd6d8bd84022cfd2fe41c51198d3f67855faa2f6f078e02db5292

See more details on using hashes here.

Provenance

The following attestation bundles were made for cdi_stools-0.1.0.tar.gz:

Publisher: publish.yml on Refze/CDI-St

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cdi_stools-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: cdi_stools-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 171.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cdi_stools-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa743468be70d143f0d7fc1e96cc7a3fa12189dd56d678cea7842c0bf531e98e
MD5 e4be4f2f3603e9c5502f09d800bc6c52
BLAKE2b-256 a6de85be207c6a8e7949d8cfcf2ddf434bfe8440f882fb80b9f364da778accbd

See more details on using hashes here.

Provenance

The following attestation bundles were made for cdi_stools-0.1.0-py3-none-any.whl:

Publisher: publish.yml on Refze/CDI-St

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page