Load Project and Fit: LBCO, HRPT¶
This is the most minimal example of using EasyDiffraction. It shows how to load a previously saved project from a directory and run refinement — all in just a few lines of code.
For this example, constant-wavelength neutron powder diffraction data for La0.5Ba0.5CoO3 from HRPT at PSI is used.
It does not contain any advanced features or options, and includes no comments or explanations — these can be found in the other tutorials.
🛠️ Import Library¶
In [2]:
Copied!
import easydiffraction as edi
import easydiffraction as edi
📂 Load Project¶
Locate Project¶
Download and extract the saved project from the EasyDiffraction data repository.
In [3]:
Copied!
project_dir = edi.download_data('proj-lbco-hrpt', destination='projects')
project_dir = edi.download_data('proj-lbco-hrpt', destination='projects')
Getting data...
Data 'proj-lbco-hrpt': La0.5Ba0.5CoO3, HRPT (PSI), 300 K
✅ Data 'proj-lbco-hrpt' downloaded and extracted to '../../../projects/proj-lbco-hrpt-69567a192590'
Load Project¶
In [4]:
Copied!
project = edi.Project.load(project_dir)
project = edi.Project.load(project_dir)
Re-save the project to a fresh working directory so fitting below writes there instead of the bundled read-only copy.
In [5]:
Copied!
project.save_as(dir_path='projects/load-and-fit-lbco-hrpt')
project.save_as(dir_path='projects/load-and-fit-lbco-hrpt')
Saving project 📦 'lbco_hrpt' to '../../../projects/load-and-fit-lbco-hrpt'
├── 📄 project.edi
├── 📁 structures/
│ └── 📄 lbco.edi
├── 📁 experiments/
│ └── 📄 hrpt.edi
├── 📁 analysis/
│ └── 📄 analysis.edi
└── 📁 reports/
└── 📄 lbco_hrpt.html
🚀 Perform Analysis¶
Display Structure¶
In [6]:
Copied!
project.display.structure(struct_name='lbco')
project.display.structure(struct_name='lbco')
Structure 🧩 'lbco' (Atom view type: 'covalent')
Loading plot…
drag = rotate
wheel = zoom
right-drag = pan
wheel = zoom
right-drag = pan
Run Fitting¶
In [7]:
Copied!
project.analysis.fit()
project.analysis.fit()
Standard fitting
📋 Using experiment 🔬 'hrpt' for 'single' fitting
🚀 Starting fit process with 'lmfit (leastsq)'...
📈 Goodness-of-fit progress:
| iteration | time (s) | χ² | change / status | |
|---|---|---|---|---|
| 1 | 1 | 0.05 | 1.27 | |
| 2 | 45 | 2.18 | 1.26 |
🏆 Best goodness-of-fit (reduced χ²) is 1.26 at iteration 24
✅ Fitting complete.
Saving project 📦 'lbco_hrpt' to '../../../projects/load-and-fit-lbco-hrpt'
├── 📄 project.edi
├── 📁 structures/
│ └── 📄 lbco.edi
├── 📁 experiments/
│ └── 📄 hrpt.edi
├── 📁 analysis/
│ └── 📄 analysis.edi
└── 📁 reports/
└── 📄 lbco_hrpt.html
Display Fit Results¶
In [8]:
Copied!
project.display.fit.results()
project.display.fit.results()
⚙️ Settings used:
| Name | Value | Description | |
|---|---|---|---|
| 1 | max_iterations | 1000 | Maximum solver iterations. |
📋 Least-squares fit results:
| Metric | Value | |
|---|---|---|
| 1 | 🧪 Minimizer | lmfit |
| 2 | ✅ Overall status | success |
| 3 | ⏱️ Fitting time (seconds) | 2.18 |
| 4 | 🔁 Iterations | 42 |
| 5 | 📏 Goodness-of-fit (reduced χ²) | 1.26 |
| 6 | 📏 R-factor (Rf, %) | 5.57 |
| 7 | 📏 R-factor squared (Rf², %) | 5.26 |
| 8 | 📏 Weighted R-factor (wR, %) | 4.46 |
📈 Refined parameters:
| datablock | category | entry | parameter | units | start | value | s.u. | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | Å | 3.8908 | 3.8908 | 0.0000 | 0.00 % ↓ | |
| 2 | lbco | atom_site | La | adp_iso | Ų | 0.4920 | 0.4634 | 0.0268 | 5.82 % ↓ |
| 3 | lbco | atom_site | Co | adp_iso | Ų | 0.2490 | 0.2924 | 0.0482 | 17.41 % ↑ |
| 4 | lbco | atom_site | O | adp_iso | Ų | 1.4040 | 1.4063 | 0.0159 | 0.17 % ↑ |
| 5 | hrpt | linked_structure | lbco | scale | 9.1280 | 9.1076 | 0.0548 | 0.22 % ↓ | |
| 6 | hrpt | peak | broad_gauss_u | deg² | 0.0803 | 0.0807 | 0.0031 | 0.44 % ↑ | |
| 7 | hrpt | peak | broad_gauss_v | deg² | -0.1125 | -0.1138 | 0.0067 | 1.13 % ↑ | |
| 8 | hrpt | peak | broad_gauss_w | deg² | 0.1195 | 0.1197 | 0.0032 | 0.17 % ↑ | |
| 9 | hrpt | peak | broad_lorentz_y | deg | 0.0836 | 0.0842 | 0.0021 | 0.75 % ↑ | |
| 10 | hrpt | instrument | twotheta_offset | deg | 0.6205 | 0.6194 | 0.0008 | 0.17 % ↓ | |
| 11 | hrpt | background | 1 | intensity | 166.9200 | 166.9137 | 0.8922 | 0.00 % ↓ | |
| 12 | hrpt | background | 2 | intensity | 167.6100 | 167.6764 | 0.6899 | 0.04 % ↑ | |
| 13 | hrpt | background | 3 | intensity | 172.8800 | 172.6639 | 0.7114 | 0.13 % ↓ | |
| 14 | hrpt | background | 4 | intensity | 180.9200 | 181.0553 | 0.8746 | 0.07 % ↑ | |
| 15 | hrpt | background | 5 | intensity | 168.7000 | 162.6311 | 1.2441 | 3.60 % ↓ |
• start = parameter value before refinement
• value = refined value from least-squares minimization
• s.u. = standard uncertainty (one sigma), from the covariance matrix
• change = relative change from start, in %; ↑ = increase, ↓ = decrease
• value = refined value from least-squares minimization
• s.u. = standard uncertainty (one sigma), from the covariance matrix
• change = relative change from start, in %; ↑ = increase, ↓ = decrease
In [9]:
Copied!
project.display.fit.correlations()
project.display.fit.correlations()
Loading plot…
In [10]:
Copied!
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt')
Loading plot…
💾 Save Project¶
In [11]:
Copied!
project.save_as(dir_path='projects/load-and-fit-lbco-hrpt')
project.save_as(dir_path='projects/load-and-fit-lbco-hrpt')
Saving project 📦 'lbco_hrpt' to '../../../projects/load-and-fit-lbco-hrpt'
├── 📄 project.edi
├── 📁 structures/
│ └── 📄 lbco.edi
├── 📁 experiments/
│ └── 📄 hrpt.edi
├── 📁 analysis/
│ └── 📄 analysis.edi
└── 📁 reports/
└── 📄 lbco_hrpt.html