Skip to content

TsvikiHirsh/nbragg

nbragg

nbragg logo

Documentation Status PyPI version

nbragg is a package designed for fitting neutron Bragg edge data using NCrystal cross-sections. This tool provides a straightforward way to analyze neutron transmission through polycrystalline materials, leveraging Bragg edges to extract information on material structure and composition.

Features

  • Flexible Cross-Section Calculations: Interfaces with NCrystal to fetch cross-sections for crystalline materials.
  • Grouped/Gridded Data Fitting: Analyze spatially-resolved or multi-sample data with support for 1D arrays, 2D grids, and named groups. Includes parallel fitting with automatic result visualization via parameter maps.
  • SANS Modeling: Built-in support for Small Angle Neutron Scattering (SANS) using hard-sphere models for samples with nanoscale features.
  • Extinction Effects: Support for primary and secondary extinction modeling for large crystallites and thick samples.
  • Built-In Tools for Response and Background Functions: Includes predefined models for instrument response (e.g., Jorgensen, square) and background components (polynomial functions).
  • LMFit Integration: Allows flexible, nonlinear fitting of experimental data using the powerful lmfit library.
  • Rietveld-type analysis: Enables iterative, parametric refinement of Bragg edge data using the Rietveld method, accumulating parameters across stages for robust fitting.
  • Pythonic API: Simple-to-use, yet flexible enough for custom modeling.
  • Plotting Utilities: Provides ready-to-use plotting functions for easy visualization of results.
  • Bragg Edge Analysis: Perform Bragg edge fitting to extract information such as d-spacing, strain, and texture.

Installation

Basic Installation

To install the base package:

pip install nbragg

Installation with Extinction Effects

To include extinction effects in your analysis, you'll need to install the extinction plugin separately:

pip install nbragg
pip install git+https://github.com/XuShuqi7/ncplugin-CrysExtn

The ncrystal-plugin-crysextn plugin provides extinction corrections for crystallographic calculations.

Note: The extinction plugin is only required if you plan to use extinction effects. For standard Bragg edge fitting without extinction corrections, the base installation is sufficient.

Usage

Here's a quick example to get started:

import nbragg

data = nbragg.Data.from_transmission("iron_powder.csv") # read data
xs = nbragg.CrossSection(iron="Fe_sg229_Iron-alpha.ncmat") # define sample
model = nbragg.TransmissionModel(xs, vary_background=True, vary_response=True) # define model
result = model.fit(data) # perform fit
result.plot() # plot results

Fit Results

Tutorials and Documentation

For more detailed examples and advanced usage, including custom stage definitions and Rietveld fitting, please refer to our documentation page and check out the updated Jupyter notebook tutorial.

License

nbragg is licensed under the MIT License.

Third-Party Dependencies

This project depends on several open-source packages with permissive licenses compatible with MIT:

  • scipy, pandas, numpy, lmfit: BSD/BSD 3-Clause
  • setuptools, tqdm: MIT License
  • matplotlib: PSF License
  • ncrystal: Apache 2.0 (license)

All dependencies allow free use, modification, and distribution.

About

nbragg: A tool for Bragg-Edge transmission analysis using NCrystal

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors