Automated PDF structure analysis for nanoparticles
Project description
PDFanalysis
Automated PDF (Pair Distribution Function) structure analysis for small metallic nanoparticles.
Description
PDFanalysis is a comprehensive Python package for analyzing nanoparticle structures using pair distribution function (PDF) analysis. It provides tools for:
- PDF extraction from experimental data
- Structure generation (icosahedra, decahedra, octahedra, spheres)
- Structure customization (zoomscale, element substitution)
- PDF refinement using diffpy.srfit
- Structure screening against experimental PDFs
- Report generation with detailed analysis results
The recommended workflow for a single pdf is the following:
- Estimation of particle size from experimental pdf data. Determines the r value at which the pdf signal is dominated by noise
- Structure generation: icosahedra, octahedra, spheres and decahedra are generated with the size determined above (or specified by the user)
- Fast structure screening: each structure is roughly refined against experimental data. Best results within a given confidence interval are considered for the fine refinement
- Fine strucutre screening: structures who have passed the first refinement cycle are refined against experimental pdf.
Installation
Important: This package requires diffpy.cmi which cannot be installed via pip. You must use conda.
Recommended method: Using environment.yml
# Download the environment file from GitHub or clone the repository
conda env create -f environment.yml
conda activate pdfanalysis
Alternative: Manual installation
# 1. Create and activate conda environment
conda create -n pdfanalysis python=3.11
conda activate pdfanalysis
# 2. Install diffpy.cmi and other scientific dependencies via conda
conda install -c conda-forge diffpy.cmi ase spglib
# 3. Install pdfanalysis from PyPI
pip install pdfanalysis
Optional dependencies
# For Jupyter notebooks with 3D visualization
pip install pdfanalysis[notebook]
# For development tools
pip install pdfanalysis[dev]
# Install everything
pip install pdfanalysis[all]
Install from source
# Clone the repository
git clone https://github.com/nicoratel/pdfanalysis.git
cd pdfanalysis
# Install diffpy.cmi via conda first
conda install -c conda-forge diffpy.cmi ase spglib
# Then install the package
pip install .
Dependencies
Required (must be installed via conda)
diffpy.cmi- PDF calculation and fitting framework
Core dependencies (installed automatically via pip)
numpy- Numerical computationsscipy- Scientific computing and optimizationmatplotlib- Plotting and visualizationase- Atomic Simulation Environmentdiffpy-cmi- DiffPy suite (structure manipulation + PDF refinement)tqdm- Progress barspsutil- CPU/memory management
Optional dependencies
streamlit- Web application frameworkplotly- Interactive plotsipython- Enhanced Python shelljupyter- Notebook interfacepy3Dmol- 3D molecular visualization
Quick Start
Running the Streamlit app
After installation, launch the web interface with:
pdfanalysis-app
This will automatically start the Streamlit server and open the app in your default browser.
Note for Windows users: If the command doesn't work, see WINDOWS_INSTALL.md for troubleshooting steps.
Using the main analysis function
from pdfanalysis import perform_automatic_pdf_analysis
results = perform_automatic_pdf_analysis(
pdf_file="path/to/data.gr",
cif_file="path/to/structure.cif",
r_coh=30.0, # Coherence length in Angstroms
tolerance_size_structure=3.0,
n_spheres=2
)
Using individual classes
from pdfanalysis import (
PDFExtractor,
StructureGenerator,
PDFRefinement,
StructureScreener
)
# Generate structures
generator = StructureGenerator(
pdfpath="output_dir",
cif_file="structure.cif",
auto_mode=True,
pdf_file="data.gr"
)
strufile_dir = generator.run()
# Screen structures
screener = StructureScreener(
strufile_dir=strufile_dir,
pdffile_dir="pdf_directory",
fast_screening=True
)
best_results, candidates = screener.run()
# Refine best structure
refinement = PDFRefinement(
pdffile="data.gr",
strufile=best_results["data.gr"]["strufile"],
save_tag=True
)
rw = refinement.refine()
Package Structure
pdfanalysis/
├── __init__.py # Package initialization
├── pdf_extractor.py # PDF extraction from experimental data
├── structure_generator.py # Nanoparticle structure generation
├── structure_custom.py # Structure transformation
├── structure_report_generator.py # PDF report generation
├── pdf_refinement.py # Full PDF refinement
├── pdf_refinement_fast.py # Fast refinement for screening
├── structure_screener.py # Structure screening
├── pdfanalysis.py # Main analysis workflow
└── app_pdf_analysis.py # Streamlit web interface
Features
Automatic Structure Generation
- Auto-detection of coherence length from PDF
- Multiple structure types: icosahedra, decahedra, octahedra, spheres
- Parallel processing for fast generation
- Automatic filtering based on size range
Fast Screening
- Two-pass screening: fast initial screening + full refinement
- Automatic candidate selection (min(Rw) ± threshold%)
- Progress tracking with tqdm
- Multiprocessing support
Comprehensive Reports
- PDF reports with fit curves, structure thumbnails
- Top N results tables
- 3D structure visualizations
- Complete refinement statistics
Examples
See the examples/ directory for Jupyter notebooks demonstrating:
- Basic PDF analysis workflow
- Custom structure generation
- Advanced refinement options
- Batch processing
Citation
If you use this package in your research, please cite:
@software{pdfanalysis,
author = {Ratel-Ramond, Nicolas},
title = {PDFanalysis: Automated PDF structure analysis for nanoparticles},
year = {2026},
url = {https://github.com/nicoratel/pdfanalysis}
}
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Support
For bugs and feature requests, please open an issue on GitHub: https://github.com/nicoratel/pdfanalysis/issues
Acknowledgments
This package uses:
- DiffPy-CMI for PDF refinement
- ASE for structure manipulation
- The Scientific Python ecosystem (NumPy, SciPy, Matplotlib)
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 pdfanalysis-0.1.11.tar.gz.
File metadata
- Download URL: pdfanalysis-0.1.11.tar.gz
- Upload date:
- Size: 44.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
286d371a3df2cb7232822d7a9aca60bd0023a6366dadee4ec7d889721432f44b
|
|
| MD5 |
5c04aec92bf004e9a0f26548cabe0f24
|
|
| BLAKE2b-256 |
77829a374274df93de798ccc1dac794b3556cab20c94a9eefd44b7ec7fefabb3
|
File details
Details for the file pdfanalysis-0.1.11-py3-none-any.whl.
File metadata
- Download URL: pdfanalysis-0.1.11-py3-none-any.whl
- Upload date:
- Size: 43.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e01a27b0b09d518348df3a882d1e6444d13d665b6b841b7042356e7578637b60
|
|
| MD5 |
4a915f65897633aab6f68fcdb238d6b3
|
|
| BLAKE2b-256 |
9370b1d4d48b201070c87548a0bf9df47d561e6bc35da1ca12beb26be02d4abf
|