Structure Refinement: LBCO, HRPT¶
This example demonstrates how to use the EasyDiffraction API in a simplified, user-friendly manner that closely follows the GUI workflow for a Rietveld refinement of La0.5Ba0.5CoO3 crystal structure using constant wavelength neutron powder diffraction data from HRPT at PSI.
It is intended for users with minimal programming experience who want to learn how to perform standard crystal structure fitting using diffraction data. This script covers creating a project, adding crystal structures and experiments, performing analysis, and refining parameters.
Only a single import of easydiffraction is required, and all
operations are performed through high-level components of the
project object, such as project.structures,
project.experiments, and project.analysis. The project object is
the main container for all information.
🛠️ Import Library¶
import easydiffraction as ed
📦 Define Project¶
This section explains how to create a project and define its metadata.
Create Project¶
project = ed.Project(name='lbco_hrpt')
Set Project Metadata¶
project.info.title = 'La0.5Ba0.5CoO3 at HRPT@PSI'
project.info.description = """This project demonstrates a standard
refinement of La0.5Ba0.5CoO3, which crystallizes in a perovskite-type
structure, using neutron powder diffraction data collected in constant
wavelength mode at the HRPT diffractometer (PSI)."""
Show Project Metadata as CIF¶
project.info.show_as_cif()
Project 📦 'lbco_hrpt' info as CIF
| CIF | |
|---|---|
| 1 | _project.id lbco_hrpt |
| 2 | _project.title "La0.5Ba0.5CoO3 at HRPT@PSI" |
| 3 | _project.description |
| 4 | ; |
| 5 | This project demonstrates a standard refinement of |
| 6 | La0.5Ba0.5CoO3, which crystallizes in a perovskite-type |
| 7 | structure, using neutron powder diffraction data collected |
| 8 | in constant wavelength mode at the HRPT diffractometer |
| 9 | (PSI). |
| 10 | ; |
| 11 | _project.created "04 Jun 2026 16:26:08" |
| 12 | _project.last_modified "04 Jun 2026 16:26:08" |
Save Project¶
When saving the project for the first time, you need to specify the directory path.
project.save_as(dir_path='projects/ed_3_lbco_hrpt')
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
├── 📁 experiments/
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
🧩 Define Structure¶
This section shows how to add structures and modify their parameters.
Add Structure¶
project.structures.create(name='lbco')
Show Defined Structures¶
Show the names of the crystal structures added. These names are used
to access the structure using the syntax:
project.structures[name]. All structure parameters can be accessed
via the project object.
project.structures.show_names()
Defined structures 🧩
['lbco']
Set Space Group¶
Modify the default space group parameters.
project.structures['lbco'].space_group.name_h_m = 'P m -3 m'
project.structures['lbco'].space_group.it_coordinate_system_code = '1'
Set Unit Cell¶
Modify the default unit cell parameters.
project.structures['lbco'].cell.length_a = 3.88
Set Atom Sites¶
Add atom sites to the structure.
project.structures['lbco'].atom_sites.create(
label='La',
type_symbol='La',
fract_x=0,
fract_y=0,
fract_z=0,
adp_iso=0.5,
occupancy=0.5,
)
project.structures['lbco'].atom_sites.create(
label='Ba',
type_symbol='Ba',
fract_x=0,
fract_y=0,
fract_z=0,
adp_iso=0.5,
occupancy=0.5,
)
project.structures['lbco'].atom_sites.create(
label='Co',
type_symbol='Co',
fract_x=0.5,
fract_y=0.5,
fract_z=0.5,
adp_iso=0.5,
)
project.structures['lbco'].atom_sites.create(
label='O',
type_symbol='O',
fract_x=0,
fract_y=0.5,
fract_z=0.5,
adp_iso=0.5,
)
Show Structure as CIF¶
project.structures['lbco'].show_as_cif()
Structure 🧩 'lbco' as cif
| CIF | |
|---|---|
| 1 | data_lbco |
| 2 | |
| 3 | _cell.length_a 3.88 |
| 4 | _cell.length_b 3.88 |
| 5 | _cell.length_c 3.88 |
| 6 | _cell.angle_alpha 90. |
| 7 | _cell.angle_beta 90. |
| 8 | _cell.angle_gamma 90. |
| 9 | |
| 10 | _space_group.name_H-M_alt "P m -3 m" |
| 11 | _space_group.IT_coordinate_system_code 1 |
| 12 | |
| 13 | _geom.min_bond_distance_cutoff 0. |
| 14 | _geom.bond_distance_incr 0.25 |
| 15 | |
| 16 | loop_ |
| 17 | _atom_site.label |
| 18 | _atom_site.type_symbol |
| 19 | _atom_site.fract_x |
| 20 | _atom_site.fract_y |
| 21 | _atom_site.fract_z |
| 22 | _atom_site.Wyckoff_symbol |
| 23 | _atom_site.site_symmetry_multiplicity |
| 24 | _atom_site.occupancy |
| 25 | _atom_site.B_iso_or_equiv |
| 26 | _atom_site.ADP_type |
| 27 | La La 0. 0. 0. a 1 0.5 0.5 Biso |
| 28 | Ba Ba 0. 0. 0. a 1 0.5 0.5 Biso |
| 29 | Co Co 0.5 0.5 0.5 b 1 1. 0.5 Biso |
| 30 | O O 0. 0.5 0.5 c 3 1. 0.5 Biso |
Display Structure¶
EasyDiffraction can draw the structure that has just been defined. The
renderer engine is selected through project.rendering_structure. The default auto
engine resolves to an interactive threejs view inside Jupyter and a
compact ascii schematic in a terminal.
project.rendering_structure.show_supported()
Rendering Structure types
| Type | Description | ||
|---|---|---|---|
| 1 | * | auto | Environment default structure-view engine |
| 2 | ascii | Console ASCII schematic structure view | |
| 3 | threejs | Interactive Three.js 3D structure view |
Show all public attributes of the structure rendering engine.
project.rendering_structure.help()
Properties
| Name | Writable | Description | |
|---|---|---|---|
| 1 | as_cif | Return the CIF text for this rendering_structure category. | |
| 2 | parameters | All GenericDescriptorBase instances on this item. | |
| 3 | type | ✓ | Active factory tag for this category. |
| 4 | unique_name | Fully qualified name: datablock, category, entry. | |
| 5 | viewer | Live structure-view facade bound to the active engine. |
Methods
| Name | Description | |
|---|---|---|
| 1 | from_cif() | Populate this category from a CIF block, rebinding engine. |
| 2 | help() | Print parameters, other properties, and methods. |
| 3 | show_supported() | Print supported types and mark the active one. |
Visual styling — the atom view and colour scheme — is configured on
project.structure_style.
project.structure_style.atom_view.show_supported()
project.structure_style.color_scheme.show_supported()
Atom View types
| Value | Description | ||
|---|---|---|---|
| 1 | vdw | Van der Waals radius balls | |
| 2 | * | covalent | Covalent radius balls |
| 3 | ionic | Ionic (Shannon) radius balls | |
| 4 | adp | ADP probability surfaces (spheres / ellipsoids) |
Color Scheme types
| Value | Description | ||
|---|---|---|---|
| 1 | * | jmol | Jmol / CPK colour scheme |
| 2 | vesta | VESTA colour scheme |
project.structure_style.atom_view = 'adp'
project.structure_style.color_scheme = 'jmol'
Bonds are generated automatically between atoms whose separation lies
within the per-structure cutoffs stored on structure.geom.
project.structures['lbco'].geom.min_bond_distance_cutoff = 0.5
project.structures['lbco'].geom.bond_distance_incr = 0.25
List which features the structure data and the active engine can draw.
project.display.show_structure_options(struct_name='lbco')
| Option | Description | Available | Auto | |
|---|---|---|---|---|
| 1 | atoms | Atoms as spheres, occupancy wedges, or ADP ellipsoids. | yes | yes |
| 2 | bonds | Bonds between atoms within the per-structure cutoffs. | yes | yes |
| 3 | cell | Unit-cell edges. | yes | yes |
| 4 | axes | The a/b/c axis triad. | yes | yes |
| 5 | moments | Magnetic-moment arrows (no moment data in version 1). | no | no |
| 6 | labels | Atom labels at each site. | yes | no |
Draw the structure. With include='auto' (the default) every available
feature is shown; a specific tuple such as ('atoms', 'bonds', 'cell')
can be requested instead.
project.display.structure(struct_name='lbco')
Structure 🧩 'lbco' (Atom view type: 'adp')
wheel = zoom
right-drag = pan
For a quick text schematic, switch to the ascii engine explicitly,
then restore the automatic default.
project.rendering_structure.type = 'ascii'
Current engine changed to
'ascii'
project.display.structure(struct_name='lbco')
Structure 🧩 'lbco' (Atom view type: 'adp')
b ↑ ●────────────────────────●────────────────────────● │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ● ● ● │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ●────────────────────────●────────────────────────● → a Legend: ● Co ● O ● La/Ba
project.rendering_structure.type = 'auto'
Current engine changed to
'threejs'
Save Project State¶
Save the project state after adding the structure. This ensures that all changes are stored and can be accessed later. The project state is saved in the directory specified during project creation.
project.save()
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
🔬 Define Experiment¶
This section shows how to add experiments, configure their parameters, and link the structures defined in the previous step.
Download Data¶
Download the data file from the EasyDiffraction repository on GitHub.
data_path = ed.download_data(id=3, destination='data')
Getting data...
Data #3: La0.5Ba0.5CoO3, HRPT (PSI), 300 K
✅ Data #3 already present at '../../../data/ed-3.xye'. Keeping existing.
Create Experiment¶
project.experiments.add_from_data_path(
name='hrpt',
data_path=data_path,
sample_form='powder',
beam_mode='constant wavelength',
radiation_probe='neutron',
)
Data loaded successfully
Experiment 🔬 'hrpt'. Number of data points: 3098.
Show Defined Experiments¶
project.experiments.show_names()
Defined experiments 🔬
['hrpt']
Show Measured Data¶
project.display.pattern(expt_name='hrpt')
Warning: No linked phases defined. Returning empty pattern.
Set Instrument¶
Modify the default instrument parameters.
project.experiments['hrpt'].instrument.setup_wavelength = 1.494
project.experiments['hrpt'].instrument.calib_twotheta_offset = 0.6
Set Peak Profile¶
Show supported peak profile types.
project.experiments['hrpt'].peak.show_supported()
Peak types
| Type | Description | ||
|---|---|---|---|
| 1 | * | pseudo-voigt | CWL pseudo-Voigt profile |
| 2 | pseudo-voigt + empirical asymmetry | CWL pseudo-Voigt profile with empirical asymmetry correction. |
Select the desired peak profile type.
project.experiments['hrpt'].peak.type = 'pseudo-voigt'
Peak profile type for experiment 'hrpt' changed to
pseudo-voigt
Modify default peak profile parameters.
project.experiments['hrpt'].peak.broad_gauss_u = 0.1
project.experiments['hrpt'].peak.broad_gauss_v = -0.1
project.experiments['hrpt'].peak.broad_gauss_w = 0.1
project.experiments['hrpt'].peak.broad_lorentz_x = 0
project.experiments['hrpt'].peak.broad_lorentz_y = 0.1
Set Background¶
Show supported background types.
project.experiments['hrpt'].background.show_supported()
Background types
| Type | Description | ||
|---|---|---|---|
| 1 | chebyshev | Chebyshev polynomial background | |
| 2 | * | line-segment | Linear interpolation between points |
Select the desired background type.
project.experiments['hrpt'].background.type = 'line-segment'
Background type for experiment 'hrpt' already set to
line-segment
Add background points.
project.experiments['hrpt'].background.create(id='10', x=10, y=170)
project.experiments['hrpt'].background.create(id='30', x=30, y=170)
project.experiments['hrpt'].background.create(id='50', x=50, y=170)
project.experiments['hrpt'].background.create(id='110', x=110, y=170)
project.experiments['hrpt'].background.create(id='165', x=165, y=170)
Show current background points.
project.experiments['hrpt'].background.show()
Line-segment background points
| X | Intensity | |
|---|---|---|
| 1 | 10 | 170 |
| 2 | 30 | 170 |
| 3 | 50 | 170 |
| 4 | 110 | 170 |
| 5 | 165 | 170 |
Set Linked Phases¶
Link the structure defined in the previous step to the experiment.
project.experiments['hrpt'].linked_phases.create(id='lbco', scale=10.0)
Show Experiment as CIF¶
project.experiments['hrpt'].show_as_cif()
Experiment 🔬 'hrpt' as cif
| CIF | |
|---|---|
| 1 | data_hrpt |
| 2 | |
| 3 | _expt_type.sample_form powder |
| 4 | _expt_type.beam_mode "constant wavelength" |
| 5 | _expt_type.radiation_probe neutron |
| 6 | _expt_type.scattering_type bragg |
| 7 | |
| 8 | _diffrn.ambient_temperature ? |
| 9 | _diffrn.ambient_pressure ? |
| 10 | _diffrn.ambient_magnetic_field ? |
| 11 | _diffrn.ambient_electric_field ? |
| 12 | |
| 13 | _calculator.type cryspy |
| 14 | |
| 15 | _peak.broad_gauss_u 0.1 |
| 16 | _peak.broad_gauss_v -0.1 |
| 17 | _peak.broad_gauss_w 0.1 |
| 18 | _peak.broad_lorentz_x 0. |
| 19 | _peak.broad_lorentz_y 0.1 |
| 20 | _peak.type cwl-pseudo-voigt |
| 21 | |
| 22 | _instr.wavelength 1.494 |
| 23 | _instr.2theta_offset 0.6 |
| 24 | |
| 25 | loop_ |
| 26 | _pd_phase_block.id |
| 27 | _pd_phase_block.scale |
| 28 | lbco 10. |
| 29 | |
| 30 | _background.type line-segment |
| 31 | |
| 32 | loop_ |
| 33 | _pd_background.id |
| 34 | _pd_background.line_segment_X |
| 35 | _pd_background.line_segment_intensity |
| 36 | 10 10 170 |
| 37 | 30 30 170 |
| 38 | 50 50 170 |
| 39 | 110 110 170 |
| 40 | 165 165 170 |
| 41 | |
| 42 | loop_ |
| 43 | _pd_proc.2theta_scan |
| 44 | _pd_data.point_id |
| 45 | _pd_proc.d_spacing |
| 46 | _pd_meas.intensity_total |
| 47 | _pd_meas.intensity_total_su |
| 48 | _pd_calc.intensity_total |
| 49 | _pd_calc.intensity_bkg |
| 50 | _pd_data.refinement_status |
| 51 | 10. 1 8.57086379 167. 12.6 172.32780248 170. incl |
| 52 | 10.05 2 8.52833125 157. 12.5 172.30859914 170. incl |
| 53 | 10.1 3 8.48622036 187. 13.3 172.28969336 170. incl |
| 54 | 10.15 4 8.4445249 197. 14. 172.27107915 170. incl |
| 55 | 10.2 5 8.40323875 164. 12.5 172.25275064 170. incl |
| 56 | 10.25 6 8.36235592 171. 13. 172.23470212 170. incl |
| 57 | 10.3 7 8.32187055 190. 13.4 172.21692803 170. incl |
| 58 | 10.35 8 8.28177687 182. 13.5 172.19942295 170. incl |
| 59 | 10.4 9 8.24206922 166. 12.6 172.18218159 170. incl |
| 60 | 10.45 10 8.20274208 203. 14.3 172.1651988 170. incl |
| 61 | ... |
| 62 | 164.4 3089 0.75397591 202. 18.5 172.60037118 170. incl |
| 63 | 164.45 3090 0.75393091 178. 20.4 172.59695823 170. incl |
| 64 | 164.5 3091 0.75388607 153. 18. 172.59381336 170. incl |
| 65 | 164.55 3092 0.75384138 197. 25.3 172.59093099 170. incl |
| 66 | 164.6 3093 0.75379684 153. 20.7 172.58830579 170. incl |
| 67 | 164.65 3094 0.75375244 173. 30.1 172.58593268 170. incl |
| 68 | 164.7 3095 0.75370819 187. 27.9 172.5838068 170. incl |
| 69 | 164.75 3096 0.7536641 175. 38.2 172.58192354 170. incl |
| 70 | 164.8 3097 0.75362015 168. 30.9 172.58027848 170. incl |
| 71 | 164.85 3098 0.75357634 109. 41.2 172.57886743 170. incl |
| 72 | |
| 73 | loop_ |
| 74 | _refln.id |
| 75 | _refln.phase_id |
| 76 | _refln.d_spacing |
| 77 | _refln.sin_theta_over_lambda |
| 78 | _refln.index_h |
| 79 | _refln.index_k |
| 80 | _refln.index_l |
| 81 | _refln.f_calc |
| 82 | _refln.f_squared_calc |
| 83 | _refln.two_theta |
| 84 | 1 lbco 3.88 0.12886598 1 0 0 0.16244556 0.02638856 22.80044453 |
| 85 | 2 lbco 2.74357431 0.18224402 1 1 0 0.32869596 0.10804103 32.19908449 |
| 86 | 3 lbco 2.24011904 0.22320242 1 1 1 2.1043237 4.42817823 39.5583744 |
| 87 | 4 lbco 1.94 0.25773196 2 0 0 2.56865501 6.59798858 45.89388073 |
| 88 | 5 lbco 1.73518875 0.28815309 2 1 0 0.15713889 0.02469263 51.5986821 |
| 89 | 6 lbco 1.58400337 0.31565589 2 1 1 0.31795832 0.10109749 56.8751008 |
| 90 | 7 lbco 1.37178716 0.36448803 2 2 0 2.48474376 6.17395156 66.58716829 |
| 91 | 8 lbco 1.29333333 0.38659794 2 2 1 0.15200557 0.02310569 71.16064798 |
| 92 | 9 lbco 1.29333333 0.38659794 3 0 0 0.15200557 0.02310569 71.16064798 |
| 93 | 10 lbco 1.22696373 0.40751001 3 1 0 0.30757145 0.0946002 75.60845321 |
| 94 | ... |
| 95 | 19 lbco 0.91452477 0.54673205 4 1 1 0.28780456 0.08283147 110.13497669 |
| 96 | 20 lbco 0.89013305 0.56171378 3 3 1 1.84253549 3.39493703 114.71155759 |
| 97 | 21 lbco 0.86759438 0.57630618 4 2 0 2.24910171 5.0584585 119.45842061 |
| 98 | 22 lbco 0.84668541 0.59053811 4 2 1 0.13759004 0.01893102 124.43335485 |
| 99 | 23 lbco 0.82721878 0.60443502 3 3 2 0.27840274 0.07750809 129.7174128 |
| 100 | 24 lbco 0.79200168 0.63131179 4 2 2 2.17562943 4.73336341 141.78522183 |
| 101 | 25 lbco 0.776 0.6443299 4 3 0 0.13309533 0.01771437 149.17338292 |
| 102 | 26 lbco 0.776 0.6443299 5 0 0 0.13309533 0.01771437 149.17338292 |
| 103 | 27 lbco 0.7609306 0.65709014 4 3 1 0.26930805 0.07252683 158.63936579 |
| 104 | 28 lbco 0.7609306 0.65709014 5 1 0 0.26930805 0.07252683 158.63936579 |
Save Project State¶
project.save()
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
project.experiments['hrpt'].calculator.show_supported()
Calculator types
| Type | Description | ||
|---|---|---|---|
| 1 | crysfml | CrysFML library for crystallographic calculations | |
| 2 | * | cryspy | CrysPy library for crystallographic calculations |
Select the desired calculation engine.
project.experiments['hrpt'].calculator.type = 'cryspy'
Calculator for experiment 'hrpt' already set to
cryspy
Set Plotting Engine¶
EasyDiffraction can plot the measured and calculated patterns using different rendering engines.
The default auto engine resolves to an interactive plotly view inside Jupyter and a
static asciichartpy plot for schematic representation in a terminal.
Show supported data plotting engines.
project.rendering_plot.show_supported()
Rendering Plot types
| Type | Description | ||
|---|---|---|---|
| 1 | * | auto | Environment default rendering_plot engine |
| 2 | asciichartpy | Console ASCII line charts | |
| 3 | plotly | Interactive browser-based graphing library |
Show all public attributes of the data rendering engine.
project.rendering_plot.help()
Properties
| Name | Writable | Description | |
|---|---|---|---|
| 1 | as_cif | Return CIF representation of this object. | |
| 2 | parameters | All GenericDescriptorBase instances on this item. | |
| 3 | plotter | Live plotting facade bound to the owning project. | |
| 4 | type | ✓ | Active factory tag for this category. |
| 5 | unique_name | Fully qualified name: datablock, category, entry. |
Methods
| Name | Description | |
|---|---|---|
| 1 | from_cif() | Populate this rendering_plot category from a CIF block. |
| 2 | help() | Print parameters, other properties, and methods. |
| 3 | show_supported() | Print supported types and mark the active one. |
Display Pattern¶
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt', x_min=38, x_max=41)
Display Parameters¶
Show all parameters of the project.
project.display.parameters.all()
All parameters for all structures (🧩 data blocks)
| datablock | category | entry | parameter | value | fittable | |
|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.88000 | True | |
| 2 | lbco | cell | length_b | 3.88000 | False | |
| 3 | lbco | cell | length_c | 3.88000 | False | |
| 4 | lbco | cell | angle_alpha | 90.00000 | False | |
| 5 | lbco | cell | angle_beta | 90.00000 | False | |
| 6 | lbco | cell | angle_gamma | 90.00000 | False | |
| 7 | lbco | space_group | name_h_m | P m -3 m | False | |
| 8 | lbco | space_group | it_coordinate_system_code | 1 | False | |
| 9 | lbco | atom_site | La | label | La | False |
| 10 | lbco | atom_site | La | type_symbol | La | False |
| 11 | lbco | atom_site | La | fract_x | 0.00000 | False |
| 12 | lbco | atom_site | La | fract_y | 0.00000 | False |
| 13 | lbco | atom_site | La | fract_z | 0.00000 | False |
| 14 | lbco | atom_site | La | wyckoff_letter | a | False |
| 15 | lbco | atom_site | La | multiplicity | 1 | False |
| 16 | lbco | atom_site | La | occupancy | 0.50000 | True |
| 17 | lbco | atom_site | La | adp_iso | 0.50000 | True |
| 18 | lbco | atom_site | La | adp_type | Biso | False |
| 19 | lbco | atom_site | Ba | label | Ba | False |
| 20 | lbco | atom_site | Ba | type_symbol | Ba | False |
| 21 | lbco | atom_site | Ba | fract_x | 0.00000 | False |
| 22 | lbco | atom_site | Ba | fract_y | 0.00000 | False |
| 23 | lbco | atom_site | Ba | fract_z | 0.00000 | False |
| 24 | lbco | atom_site | Ba | wyckoff_letter | a | False |
| 25 | lbco | atom_site | Ba | multiplicity | 1 | False |
| 26 | lbco | atom_site | Ba | occupancy | 0.50000 | True |
| 27 | lbco | atom_site | Ba | adp_iso | 0.50000 | True |
| 28 | lbco | atom_site | Ba | adp_type | Biso | False |
| 29 | lbco | atom_site | Co | label | Co | False |
| 30 | lbco | atom_site | Co | type_symbol | Co | False |
| 31 | lbco | atom_site | Co | fract_x | 0.50000 | False |
| 32 | lbco | atom_site | Co | fract_y | 0.50000 | False |
| 33 | lbco | atom_site | Co | fract_z | 0.50000 | False |
| 34 | lbco | atom_site | Co | wyckoff_letter | b | False |
| 35 | lbco | atom_site | Co | multiplicity | 1 | False |
| 36 | lbco | atom_site | Co | occupancy | 1.00000 | True |
| 37 | lbco | atom_site | Co | adp_iso | 0.50000 | True |
| 38 | lbco | atom_site | Co | adp_type | Biso | False |
| 39 | lbco | atom_site | O | label | O | False |
| 40 | lbco | atom_site | O | type_symbol | O | False |
| 41 | lbco | atom_site | O | fract_x | 0.00000 | False |
| 42 | lbco | atom_site | O | fract_y | 0.50000 | False |
| 43 | lbco | atom_site | O | fract_z | 0.50000 | False |
| 44 | lbco | atom_site | O | wyckoff_letter | c | False |
| 45 | lbco | atom_site | O | multiplicity | 3 | False |
| 46 | lbco | atom_site | O | occupancy | 1.00000 | True |
| 47 | lbco | atom_site | O | adp_iso | 0.50000 | True |
| 48 | lbco | atom_site | O | adp_type | Biso | False |
| 49 | lbco | geom | min_bond_distance_cutoff | 0.50000 | False | |
| 50 | lbco | geom | bond_distance_incr | 0.25000 | False |
All parameters for all experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | fittable | |
|---|---|---|---|---|---|---|
| 1 | hrpt | expt_type | sample_form | powder | False | |
| 2 | hrpt | expt_type | beam_mode | constant wavelength | False | |
| 3 | hrpt | expt_type | radiation_probe | neutron | False | |
| 4 | hrpt | expt_type | scattering_type | bragg | False | |
| 5 | hrpt | diffrn | ambient_temperature | False | ||
| 6 | hrpt | diffrn | ambient_pressure | False | ||
| 7 | hrpt | diffrn | ambient_magnetic_field | False | ||
| 8 | hrpt | diffrn | ambient_electric_field | False | ||
| 9 | hrpt | calculator | type | cryspy | False | |
| 10 | hrpt | linked_phases | lbco | id | lbco | False |
| 11 | hrpt | linked_phases | lbco | scale | 10.00000 | True |
| 12 | hrpt | peak | broad_gauss_u | 0.10000 | True | |
| 13 | hrpt | peak | broad_gauss_v | -0.10000 | True | |
| 14 | hrpt | peak | broad_gauss_w | 0.10000 | True | |
| 15 | hrpt | peak | broad_lorentz_x | 0.00000 | True | |
| 16 | hrpt | peak | broad_lorentz_y | 0.10000 | True | |
| 17 | hrpt | peak | type | cwl-pseudo-voigt | False | |
| 18 | hrpt | instrument | wavelength | 1.49400 | True | |
| 19 | hrpt | instrument | twotheta_offset | 0.60000 | True | |
| 20 | hrpt | background | 10 | id | 10 | False |
| 21 | hrpt | background | 10 | x | 10 | False |
| 22 | hrpt | background | 10 | y | 170 | True |
| 23 | hrpt | background | 30 | id | 30 | False |
| 24 | hrpt | background | 30 | x | 30 | False |
| 25 | hrpt | background | 30 | y | 170 | True |
| 26 | hrpt | background | 50 | id | 50 | False |
| 27 | hrpt | background | 50 | x | 50 | False |
| 28 | hrpt | background | 50 | y | 170 | True |
| 29 | hrpt | background | 110 | id | 110 | False |
| 30 | hrpt | background | 110 | x | 110 | False |
| 31 | hrpt | background | 110 | y | 170 | True |
| 32 | hrpt | background | 165 | id | 165 | False |
| 33 | hrpt | background | 165 | x | 165 | False |
| 34 | hrpt | background | 165 | y | 170 | True |
Show all fittable parameters.
project.display.parameters.fittable()
Fittable parameters for all structures (🧩 data blocks)
| datablock | category | entry | parameter | value | uncertainty | units | free | |
|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.88000 | Å | False | ||
| 2 | lbco | atom_site | La | occupancy | 0.50000 | False | ||
| 3 | lbco | atom_site | La | adp_iso | 0.50000 | Ų | False | |
| 4 | lbco | atom_site | Ba | occupancy | 0.50000 | False | ||
| 5 | lbco | atom_site | Ba | adp_iso | 0.50000 | Ų | False | |
| 6 | lbco | atom_site | Co | occupancy | 1.00000 | False | ||
| 7 | lbco | atom_site | Co | adp_iso | 0.50000 | Ų | False | |
| 8 | lbco | atom_site | O | occupancy | 1.00000 | False | ||
| 9 | lbco | atom_site | O | adp_iso | 0.50000 | Ų | False |
Fittable parameters for all experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | uncertainty | units | free | |
|---|---|---|---|---|---|---|---|---|
| 1 | hrpt | linked_phases | lbco | scale | 10.00000 | False | ||
| 2 | hrpt | peak | broad_gauss_u | 0.10000 | deg² | False | ||
| 3 | hrpt | peak | broad_gauss_v | -0.10000 | deg² | False | ||
| 4 | hrpt | peak | broad_gauss_w | 0.10000 | deg² | False | ||
| 5 | hrpt | peak | broad_lorentz_x | 0.00000 | deg | False | ||
| 6 | hrpt | peak | broad_lorentz_y | 0.10000 | deg | False | ||
| 7 | hrpt | instrument | wavelength | 1.49400 | Å | False | ||
| 8 | hrpt | instrument | twotheta_offset | 0.60000 | deg | False | ||
| 9 | hrpt | background | 10 | y | 170.00000 | False | ||
| 10 | hrpt | background | 30 | y | 170.00000 | False | ||
| 11 | hrpt | background | 50 | y | 170.00000 | False | ||
| 12 | hrpt | background | 110 | y | 170.00000 | False | ||
| 13 | hrpt | background | 165 | y | 170.00000 | False |
Show only free parameters.
project.display.parameters.free()
⚠️ No free parameters found.
Show how to access parameters in the code.
project.display.parameters.access()
How to access parameters
| datablock | category | entry | parameter | How to Access in Python Code | |
|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | project.structures['lbco'].cell.length_a | |
| 2 | lbco | cell | length_b | project.structures['lbco'].cell.length_b | |
| 3 | lbco | cell | length_c | project.structures['lbco'].cell.length_c | |
| 4 | lbco | cell | angle_alpha | project.structures['lbco'].cell.angle_alpha | |
| 5 | lbco | cell | angle_beta | project.structures['lbco'].cell.angle_beta | |
| 6 | lbco | cell | angle_gamma | project.structures['lbco'].cell.angle_gamma | |
| 7 | lbco | space_group | name_h_m | project.structures['lbco'].space_group.name_h_m | |
| 8 | lbco | space_group | it_coordinate_system_code | project.structures['lbco'].space_group.it_coordinate_system_code | |
| 9 | lbco | atom_site | La | label | project.structures['lbco'].atom_site['La'].label |
| 10 | lbco | atom_site | La | type_symbol | project.structures['lbco'].atom_site['La'].type_symbol |
| 11 | lbco | atom_site | La | fract_x | project.structures['lbco'].atom_site['La'].fract_x |
| 12 | lbco | atom_site | La | fract_y | project.structures['lbco'].atom_site['La'].fract_y |
| 13 | lbco | atom_site | La | fract_z | project.structures['lbco'].atom_site['La'].fract_z |
| 14 | lbco | atom_site | La | wyckoff_letter | project.structures['lbco'].atom_site['La'].wyckoff_letter |
| 15 | lbco | atom_site | La | multiplicity | project.structures['lbco'].atom_site['La'].multiplicity |
| 16 | lbco | atom_site | La | occupancy | project.structures['lbco'].atom_site['La'].occupancy |
| 17 | lbco | atom_site | La | adp_iso | project.structures['lbco'].atom_site['La'].adp_iso |
| 18 | lbco | atom_site | La | adp_type | project.structures['lbco'].atom_site['La'].adp_type |
| 19 | lbco | atom_site | Ba | label | project.structures['lbco'].atom_site['Ba'].label |
| 20 | lbco | atom_site | Ba | type_symbol | project.structures['lbco'].atom_site['Ba'].type_symbol |
| 21 | lbco | atom_site | Ba | fract_x | project.structures['lbco'].atom_site['Ba'].fract_x |
| 22 | lbco | atom_site | Ba | fract_y | project.structures['lbco'].atom_site['Ba'].fract_y |
| 23 | lbco | atom_site | Ba | fract_z | project.structures['lbco'].atom_site['Ba'].fract_z |
| 24 | lbco | atom_site | Ba | wyckoff_letter | project.structures['lbco'].atom_site['Ba'].wyckoff_letter |
| 25 | lbco | atom_site | Ba | multiplicity | project.structures['lbco'].atom_site['Ba'].multiplicity |
| 26 | lbco | atom_site | Ba | occupancy | project.structures['lbco'].atom_site['Ba'].occupancy |
| 27 | lbco | atom_site | Ba | adp_iso | project.structures['lbco'].atom_site['Ba'].adp_iso |
| 28 | lbco | atom_site | Ba | adp_type | project.structures['lbco'].atom_site['Ba'].adp_type |
| 29 | lbco | atom_site | Co | label | project.structures['lbco'].atom_site['Co'].label |
| 30 | lbco | atom_site | Co | type_symbol | project.structures['lbco'].atom_site['Co'].type_symbol |
| 31 | lbco | atom_site | Co | fract_x | project.structures['lbco'].atom_site['Co'].fract_x |
| 32 | lbco | atom_site | Co | fract_y | project.structures['lbco'].atom_site['Co'].fract_y |
| 33 | lbco | atom_site | Co | fract_z | project.structures['lbco'].atom_site['Co'].fract_z |
| 34 | lbco | atom_site | Co | wyckoff_letter | project.structures['lbco'].atom_site['Co'].wyckoff_letter |
| 35 | lbco | atom_site | Co | multiplicity | project.structures['lbco'].atom_site['Co'].multiplicity |
| 36 | lbco | atom_site | Co | occupancy | project.structures['lbco'].atom_site['Co'].occupancy |
| 37 | lbco | atom_site | Co | adp_iso | project.structures['lbco'].atom_site['Co'].adp_iso |
| 38 | lbco | atom_site | Co | adp_type | project.structures['lbco'].atom_site['Co'].adp_type |
| 39 | lbco | atom_site | O | label | project.structures['lbco'].atom_site['O'].label |
| 40 | lbco | atom_site | O | type_symbol | project.structures['lbco'].atom_site['O'].type_symbol |
| 41 | lbco | atom_site | O | fract_x | project.structures['lbco'].atom_site['O'].fract_x |
| 42 | lbco | atom_site | O | fract_y | project.structures['lbco'].atom_site['O'].fract_y |
| 43 | lbco | atom_site | O | fract_z | project.structures['lbco'].atom_site['O'].fract_z |
| 44 | lbco | atom_site | O | wyckoff_letter | project.structures['lbco'].atom_site['O'].wyckoff_letter |
| 45 | lbco | atom_site | O | multiplicity | project.structures['lbco'].atom_site['O'].multiplicity |
| 46 | lbco | atom_site | O | occupancy | project.structures['lbco'].atom_site['O'].occupancy |
| 47 | lbco | atom_site | O | adp_iso | project.structures['lbco'].atom_site['O'].adp_iso |
| 48 | lbco | atom_site | O | adp_type | project.structures['lbco'].atom_site['O'].adp_type |
| 49 | lbco | geom | min_bond_distance_cutoff | project.structures['lbco'].geom.min_bond_distance_cutoff | |
| 50 | lbco | geom | bond_distance_incr | project.structures['lbco'].geom.bond_distance_incr | |
| 51 | hrpt | expt_type | sample_form | project.experiments['hrpt'].expt_type.sample_form | |
| 52 | hrpt | expt_type | beam_mode | project.experiments['hrpt'].expt_type.beam_mode | |
| 53 | hrpt | expt_type | radiation_probe | project.experiments['hrpt'].expt_type.radiation_probe | |
| 54 | hrpt | expt_type | scattering_type | project.experiments['hrpt'].expt_type.scattering_type | |
| 55 | hrpt | diffrn | ambient_temperature | project.experiments['hrpt'].diffrn.ambient_temperature | |
| 56 | hrpt | diffrn | ambient_pressure | project.experiments['hrpt'].diffrn.ambient_pressure | |
| 57 | hrpt | diffrn | ambient_magnetic_field | project.experiments['hrpt'].diffrn.ambient_magnetic_field | |
| 58 | hrpt | diffrn | ambient_electric_field | project.experiments['hrpt'].diffrn.ambient_electric_field | |
| 59 | hrpt | calculator | type | project.experiments['hrpt'].calculator.type | |
| 60 | hrpt | linked_phases | lbco | id | project.experiments['hrpt'].linked_phases['lbco'].id |
| 61 | hrpt | linked_phases | lbco | scale | project.experiments['hrpt'].linked_phases['lbco'].scale |
| 62 | hrpt | peak | broad_gauss_u | project.experiments['hrpt'].peak.broad_gauss_u | |
| 63 | hrpt | peak | broad_gauss_v | project.experiments['hrpt'].peak.broad_gauss_v | |
| 64 | hrpt | peak | broad_gauss_w | project.experiments['hrpt'].peak.broad_gauss_w | |
| 65 | hrpt | peak | broad_lorentz_x | project.experiments['hrpt'].peak.broad_lorentz_x | |
| 66 | hrpt | peak | broad_lorentz_y | project.experiments['hrpt'].peak.broad_lorentz_y | |
| 67 | hrpt | peak | type | project.experiments['hrpt'].peak.type | |
| 68 | hrpt | instrument | wavelength | project.experiments['hrpt'].instrument.wavelength | |
| 69 | hrpt | instrument | twotheta_offset | project.experiments['hrpt'].instrument.twotheta_offset | |
| 70 | hrpt | background | 10 | id | project.experiments['hrpt'].background['10'].id |
| 71 | hrpt | background | 10 | x | project.experiments['hrpt'].background['10'].x |
| 72 | hrpt | background | 10 | y | project.experiments['hrpt'].background['10'].y |
| 73 | hrpt | background | 30 | id | project.experiments['hrpt'].background['30'].id |
| 74 | hrpt | background | 30 | x | project.experiments['hrpt'].background['30'].x |
| 75 | hrpt | background | 30 | y | project.experiments['hrpt'].background['30'].y |
| 76 | hrpt | background | 50 | id | project.experiments['hrpt'].background['50'].id |
| 77 | hrpt | background | 50 | x | project.experiments['hrpt'].background['50'].x |
| 78 | hrpt | background | 50 | y | project.experiments['hrpt'].background['50'].y |
| 79 | hrpt | background | 110 | id | project.experiments['hrpt'].background['110'].id |
| 80 | hrpt | background | 110 | x | project.experiments['hrpt'].background['110'].x |
| 81 | hrpt | background | 110 | y | project.experiments['hrpt'].background['110'].y |
| 82 | hrpt | background | 165 | id | project.experiments['hrpt'].background['165'].id |
| 83 | hrpt | background | 165 | x | project.experiments['hrpt'].background['165'].x |
| 84 | hrpt | background | 165 | y | project.experiments['hrpt'].background['165'].y |
Set Fit Mode¶
Show supported fit modes.
project.analysis.fitting_mode.show_supported()
Fitting Mode types
| Type | Description | ||
|---|---|---|---|
| 1 | * | single | Fit one experiment at a time. |
| 2 | joint | Fit several experiments together with shared parameters. | |
| 3 | sequential | Fit one experiment against a series of data files. |
Select desired fit mode.
project.analysis.fitting_mode.type = 'single'
Fitting mode changed to
single
Set Minimizer¶
Show supported fitting engines.
project.analysis.minimizer.show_supported()
Minimizer types
| Type | Description | ||
|---|---|---|---|
| 1 | bumps | BUMPS library using the default Levenberg-Marquardt method | |
| 2 | bumps (amoeba) | BUMPS library with Nelder-Mead simplex method | |
| 3 | bumps (de) | BUMPS library with differential evolution method | |
| 4 | bumps (dream) | BUMPS library with DREAM Bayesian sampling | |
| 5 | bumps (lm) | BUMPS library with Levenberg-Marquardt method | |
| 6 | dfols | DFO-LS library for derivative-free least-squares optimization | |
| 7 | emcee | emcee affine-invariant ensemble Bayesian sampling | |
| 8 | lmfit | LMFIT library using the default Levenberg-Marquardt method | |
| 9 | lmfit (least_squares) | LMFIT library with SciPy's trust region reflective algorithm | |
| 10 | * | lmfit (leastsq) | LMFIT library with Levenberg-Marquardt least squares method |
Select desired fitting engine.
project.analysis.minimizer.type = 'lmfit'
Current minimizer changed to
lmfit
Perform Fit 1/5¶
Set structure parameters to be refined.
project.structures['lbco'].cell.length_a.free = True
Set experiment parameters to be refined.
project.experiments['hrpt'].linked_phases['lbco'].scale.free = True
project.experiments['hrpt'].instrument.calib_twotheta_offset.free = True
project.experiments['hrpt'].background['10'].y.free = True
project.experiments['hrpt'].background['30'].y.free = True
project.experiments['hrpt'].background['50'].y.free = True
project.experiments['hrpt'].background['110'].y.free = True
project.experiments['hrpt'].background['165'].y.free = True
Show free parameters after selection.
project.display.parameters.free()
Free parameters for both structures (🧩 data blocks) and experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | uncertainty | min | max | units | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.88000 | -inf | inf | Å | ||
| 2 | hrpt | linked_phases | lbco | scale | 10.00000 | -inf | inf | ||
| 3 | hrpt | instrument | twotheta_offset | 0.60000 | -inf | inf | deg | ||
| 4 | hrpt | background | 10 | y | 170.00000 | -inf | inf | ||
| 5 | hrpt | background | 30 | y | 170.00000 | -inf | inf | ||
| 6 | hrpt | background | 50 | y | 170.00000 | -inf | inf | ||
| 7 | hrpt | background | 110 | y | 170.00000 | -inf | inf | ||
| 8 | hrpt | background | 165 | y | 170.00000 | -inf | inf |
Run Fitting¶
project.analysis.fit()
project.display.fit.results()
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.11 | 164.59 | |
| 2 | 12 | 0.62 | 33.43 | 79.7% ↓ |
| 3 | 21 | 1.03 | 13.22 | 60.4% ↓ |
| 4 | 30 | 1.44 | 5.78 | 56.3% ↓ |
| 5 | 39 | 1.83 | 3.15 | 45.6% ↓ |
| 6 | 77 | 3.84 | 3.14 |
🏆 Best goodness-of-fit (reduced χ²) is 3.14 at iteration 69
✅ Fitting complete.
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
⚙️ 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) | 3.84 |
| 4 | 🔁 Iterations | 74 |
| 5 | 📏 Goodness-of-fit (reduced χ²) | 3.14 |
| 6 | 📏 R-factor (Rf, %) | 8.42 |
| 7 | 📏 R-factor squared (Rf², %) | 11.79 |
| 8 | 📏 Weighted R-factor (wR, %) | 11.62 |
📈 Refined parameters:
| datablock | category | entry | parameter | units | start | value | s.u. | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | Å | 3.8800 | 3.8910 | 0.0001 | 0.28 % ↑ | |
| 2 | hrpt | linked_phases | lbco | scale | 10.0000 | 7.3409 | 0.0350 | 26.59 % ↓ | |
| 3 | hrpt | instrument | twotheta_offset | deg | 0.6000 | 0.6243 | 0.0018 | 4.05 % ↑ | |
| 4 | hrpt | background | 10 | y | 170.0000 | 167.7066 | 2.1300 | 1.35 % ↓ | |
| 5 | hrpt | background | 30 | y | 170.0000 | 166.0338 | 1.5404 | 2.33 % ↓ | |
| 6 | hrpt | background | 50 | y | 170.0000 | 169.9495 | 1.1025 | 0.03 % ↓ | |
| 7 | hrpt | background | 110 | y | 170.0000 | 170.0802 | 0.9788 | 0.05 % ↑ | |
| 8 | hrpt | background | 165 | y | 170.0000 | 179.6656 | 1.3289 | 5.69 % ↑ |
• 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
Display Pattern¶
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt', x_min=38, x_max=41)
Perform Fit 2/5¶
Set more parameters to be refined.
project.experiments['hrpt'].peak.broad_gauss_u.free = True
project.experiments['hrpt'].peak.broad_gauss_v.free = True
project.experiments['hrpt'].peak.broad_gauss_w.free = True
project.experiments['hrpt'].peak.broad_lorentz_y.free = True
Show free parameters after selection.
project.display.parameters.free()
Free parameters for both structures (🧩 data blocks) and experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | uncertainty | min | max | units | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.89099 | 0.00006 | -inf | inf | Å | |
| 2 | hrpt | linked_phases | lbco | scale | 7.34088 | 0.03496 | -inf | inf | |
| 3 | hrpt | peak | broad_gauss_u | 0.10000 | -inf | inf | deg² | ||
| 4 | hrpt | peak | broad_gauss_v | -0.10000 | -inf | inf | deg² | ||
| 5 | hrpt | peak | broad_gauss_w | 0.10000 | -inf | inf | deg² | ||
| 6 | hrpt | peak | broad_lorentz_y | 0.10000 | -inf | inf | deg | ||
| 7 | hrpt | instrument | twotheta_offset | 0.62432 | 0.00181 | -inf | inf | deg | |
| 8 | hrpt | background | 10 | y | 167.70662 | 2.13004 | -inf | inf | |
| 9 | hrpt | background | 30 | y | 166.03383 | 1.54041 | -inf | inf | |
| 10 | hrpt | background | 50 | y | 169.94949 | 1.10249 | -inf | inf | |
| 11 | hrpt | background | 110 | y | 170.08023 | 0.97879 | -inf | inf | |
| 12 | hrpt | background | 165 | y | 179.66557 | 1.32895 | -inf | inf |
Run Fitting¶
project.analysis.fit()
project.display.fit.results()
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.06 | 3.14 | |
| 2 | 16 | 0.79 | 2.85 | 9.1% ↓ |
| 3 | 69 | 3.55 | 2.85 |
🏆 Best goodness-of-fit (reduced χ²) is 2.85 at iteration 68
✅ Fitting complete.
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
⚙️ 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) | 3.55 |
| 4 | 🔁 Iterations | 66 |
| 5 | 📏 Goodness-of-fit (reduced χ²) | 2.85 |
| 6 | 📏 R-factor (Rf, %) | 8.30 |
| 7 | 📏 R-factor squared (Rf², %) | 11.85 |
| 8 | 📏 Weighted R-factor (wR, %) | 11.91 |
📈 Refined parameters:
| datablock | category | entry | parameter | units | start | value | s.u. | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | Å | 3.8910 | 3.8909 | 0.0001 | 0.00 % ↓ | |
| 2 | hrpt | linked_phases | lbco | scale | 7.3409 | 7.2120 | 0.0406 | 1.76 % ↓ | |
| 3 | hrpt | peak | broad_gauss_u | deg² | 0.1000 | 0.0803 | 0.0047 | 19.74 % ↓ | |
| 4 | hrpt | peak | broad_gauss_v | deg² | -0.1000 | -0.1029 | 0.0104 | 2.93 % ↑ | |
| 5 | hrpt | peak | broad_gauss_w | deg² | 0.1000 | 0.1077 | 0.0051 | 7.66 % ↑ | |
| 6 | hrpt | peak | broad_lorentz_y | deg | 0.1000 | 0.0893 | 0.0032 | 10.67 % ↓ | |
| 7 | hrpt | instrument | twotheta_offset | deg | 0.6243 | 0.6231 | 0.0017 | 0.19 % ↓ | |
| 8 | hrpt | background | 10 | y | 167.7066 | 167.5167 | 2.0311 | 0.11 % ↓ | |
| 9 | hrpt | background | 30 | y | 166.0338 | 166.7627 | 1.4794 | 0.44 % ↑ | |
| 10 | hrpt | background | 50 | y | 169.9495 | 170.8330 | 1.0808 | 0.52 % ↑ | |
| 11 | hrpt | background | 110 | y | 170.0802 | 172.2546 | 0.9660 | 1.28 % ↑ | |
| 12 | hrpt | background | 165 | y | 179.6656 | 180.6405 | 1.2737 | 0.54 % ↑ |
• 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
Display Pattern¶
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt', x_min=38, x_max=41)
Save Project State¶
project.save()
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
Perform Fit 3/5¶
Set more parameters to be refined.
project.structures['lbco'].atom_sites['La'].adp_iso.free = True
project.structures['lbco'].atom_sites['Ba'].adp_iso.free = True
project.structures['lbco'].atom_sites['Co'].adp_iso.free = True
project.structures['lbco'].atom_sites['O'].adp_iso.free = True
Show free parameters after selection.
project.display.parameters.free()
Free parameters for both structures (🧩 data blocks) and experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | uncertainty | min | max | units | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.89091 | 0.00005 | -inf | inf | Å | |
| 2 | lbco | atom_site | La | adp_iso | 0.50000 | -inf | inf | Ų | |
| 3 | lbco | atom_site | Ba | adp_iso | 0.50000 | -inf | inf | Ų | |
| 4 | lbco | atom_site | Co | adp_iso | 0.50000 | -inf | inf | Ų | |
| 5 | lbco | atom_site | O | adp_iso | 0.50000 | -inf | inf | Ų | |
| 6 | hrpt | linked_phases | lbco | scale | 7.21199 | 0.04057 | -inf | inf | |
| 7 | hrpt | peak | broad_gauss_u | 0.08026 | 0.00472 | -inf | inf | deg² | |
| 8 | hrpt | peak | broad_gauss_v | -0.10293 | 0.01036 | -inf | inf | deg² | |
| 9 | hrpt | peak | broad_gauss_w | 0.10766 | 0.00515 | -inf | inf | deg² | |
| 10 | hrpt | peak | broad_lorentz_y | 0.08933 | 0.00320 | -inf | inf | deg | |
| 11 | hrpt | instrument | twotheta_offset | 0.62314 | 0.00167 | -inf | inf | deg | |
| 12 | hrpt | background | 10 | y | 167.51669 | 2.03112 | -inf | inf | |
| 13 | hrpt | background | 30 | y | 166.76268 | 1.47937 | -inf | inf | |
| 14 | hrpt | background | 50 | y | 170.83305 | 1.08080 | -inf | inf | |
| 15 | hrpt | background | 110 | y | 172.25458 | 0.96599 | -inf | inf | |
| 16 | hrpt | background | 165 | y | 180.64054 | 1.27368 | -inf | inf |
Run Fitting¶
project.analysis.fit()
project.display.fit.results()
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 | 2.85 | |
| 2 | 28 | 1.71 | 2.28 | 19.9% ↓ |
| 3 | 45 | 2.53 | 1.62 | 28.9% ↓ |
| 4 | 62 | 3.35 | 1.47 | 9.6% ↓ |
| 5 | 79 | 4.17 | 1.36 | 7.0% ↓ |
| 6 | 97 | 5.03 | 1.29 | 5.4% ↓ |
| 7 | 200 | 10.05 | 1.29 | |
| 8 | 204 | 10.32 | 1.29 |
🏆 Best goodness-of-fit (reduced χ²) is 1.29 at iteration 187
✅ Fitting complete.
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
⚙️ 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) | 10.32 |
| 4 | 🔁 Iterations | 201 |
| 5 | 📏 Goodness-of-fit (reduced χ²) | 1.29 |
| 6 | 📏 R-factor (Rf, %) | 5.63 |
| 7 | 📏 R-factor squared (Rf², %) | 5.27 |
| 8 | 📏 Weighted R-factor (wR, %) | 4.41 |
📈 Refined parameters:
| datablock | category | entry | parameter | units | start | value | s.u. | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | Å | 3.8909 | 3.8909 | 0.0000 | 0.00 % ↓ | |
| 2 | lbco | atom_site | La | adp_iso | Ų | 0.5000 | 0.5051 | 1216.7409 | 1.02 % ↑ |
| 3 | lbco | atom_site | Ba | adp_iso | Ų | 0.5000 | 0.5048 | 1977.3028 | 0.96 % ↑ |
| 4 | lbco | atom_site | Co | adp_iso | Ų | 0.5000 | 0.2371 | 0.0612 | 52.59 % ↓ |
| 5 | lbco | atom_site | O | adp_iso | Ų | 0.5000 | 1.3935 | 0.0167 | 178.71 % ↑ |
| 6 | hrpt | linked_phases | lbco | scale | 7.2120 | 9.1350 | 0.0641 | 26.66 % ↑ | |
| 7 | hrpt | peak | broad_gauss_u | deg² | 0.0803 | 0.0816 | 0.0031 | 1.63 % ↑ | |
| 8 | hrpt | peak | broad_gauss_v | deg² | -0.1029 | -0.1159 | 0.0067 | 12.62 % ↑ | |
| 9 | hrpt | peak | broad_gauss_w | deg² | 0.1077 | 0.1204 | 0.0033 | 11.88 % ↑ | |
| 10 | hrpt | peak | broad_lorentz_y | deg | 0.0893 | 0.0844 | 0.0021 | 5.47 % ↓ | |
| 11 | hrpt | instrument | twotheta_offset | deg | 0.6231 | 0.6226 | 0.0010 | 0.09 % ↓ | |
| 12 | hrpt | background | 10 | y | 167.5167 | 168.5585 | 1.3671 | 0.62 % ↑ | |
| 13 | hrpt | background | 30 | y | 166.7627 | 164.3357 | 0.9992 | 1.46 % ↓ | |
| 14 | hrpt | background | 50 | y | 170.8330 | 166.8881 | 0.7388 | 2.31 % ↓ | |
| 15 | hrpt | background | 110 | y | 172.2546 | 175.4004 | 0.6571 | 1.83 % ↑ | |
| 16 | hrpt | background | 165 | y | 180.6405 | 174.2811 | 0.9113 | 3.52 % ↓ |
• 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
Display Pattern¶
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt', x_min=38, x_max=41)
project.analysis.aliases.create(
label='biso_La',
param=project.structures['lbco'].atom_sites['La'].adp_iso,
)
project.analysis.aliases.create(
label='biso_Ba',
param=project.structures['lbco'].atom_sites['Ba'].adp_iso,
)
Set constraints.
project.analysis.constraints.create(expression='biso_Ba = biso_La')
Show defined constraints.
project.analysis.constraints.show()
User defined constraints
| id | expression | |
|---|---|---|
| 1 | biso_Ba | biso_Ba = biso_La |
Constraints enabled: True
Show free parameters.
project.display.parameters.free()
Free parameters for both structures (🧩 data blocks) and experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | uncertainty | min | max | units | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.89087 | 0.00004 | -inf | inf | Å | |
| 2 | lbco | atom_site | La | adp_iso | 0.50509 | 1216.74090 | -inf | inf | Ų |
| 3 | lbco | atom_site | Ba | adp_iso | 0.50481 | 1977.30283 | -inf | inf | Ų |
| 4 | lbco | atom_site | Co | adp_iso | 0.23707 | 0.06119 | -inf | inf | Ų |
| 5 | lbco | atom_site | O | adp_iso | 1.39354 | 0.01668 | -inf | inf | Ų |
| 6 | hrpt | linked_phases | lbco | scale | 9.13503 | 0.06407 | -inf | inf | |
| 7 | hrpt | peak | broad_gauss_u | 0.08157 | 0.00314 | -inf | inf | deg² | |
| 8 | hrpt | peak | broad_gauss_v | -0.11592 | 0.00672 | -inf | inf | deg² | |
| 9 | hrpt | peak | broad_gauss_w | 0.12045 | 0.00328 | -inf | inf | deg² | |
| 10 | hrpt | peak | broad_lorentz_y | 0.08445 | 0.00215 | -inf | inf | deg | |
| 11 | hrpt | instrument | twotheta_offset | 0.62258 | 0.00104 | -inf | inf | deg | |
| 12 | hrpt | background | 10 | y | 168.55849 | 1.36709 | -inf | inf | |
| 13 | hrpt | background | 30 | y | 164.33571 | 0.99917 | -inf | inf | |
| 14 | hrpt | background | 50 | y | 166.88814 | 0.73884 | -inf | inf | |
| 15 | hrpt | background | 110 | y | 175.40040 | 0.65706 | -inf | inf | |
| 16 | hrpt | background | 165 | y | 174.28113 | 0.91128 | -inf | inf |
Run Fitting¶
project.analysis.fit()
project.display.fit.results()
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.29 | |
| 2 | 20 | 0.94 | 1.29 |
🏆 Best goodness-of-fit (reduced χ²) is 1.29 at iteration 19
✅ Fitting complete.
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
⚙️ 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) | 0.94 |
| 4 | 🔁 Iterations | 17 |
| 5 | 📏 Goodness-of-fit (reduced χ²) | 1.29 |
| 6 | 📏 R-factor (Rf, %) | 5.63 |
| 7 | 📏 R-factor squared (Rf², %) | 5.27 |
| 8 | 📏 Weighted R-factor (wR, %) | 4.41 |
📈 Refined parameters:
| datablock | category | entry | parameter | units | start | value | s.u. | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | Å | 3.8909 | 3.8909 | 0.0000 | 0.00 % ↑ | |
| 2 | lbco | atom_site | La | adp_iso | Ų | 0.5051 | 0.5051 | 0.0278 | 0.00 % ↓ |
| 3 | lbco | atom_site | Co | adp_iso | Ų | 0.2371 | 0.2370 | 0.0564 | 0.03 % ↓ |
| 4 | lbco | atom_site | O | adp_iso | Ų | 1.3935 | 1.3935 | 0.0160 | 0.00 % ↑ |
| 5 | hrpt | linked_phases | lbco | scale | 9.1350 | 9.1351 | 0.0538 | 0.00 % ↑ | |
| 6 | hrpt | peak | broad_gauss_u | deg² | 0.0816 | 0.0816 | 0.0031 | 0.00 % ↑ | |
| 7 | hrpt | peak | broad_gauss_v | deg² | -0.1159 | -0.1159 | 0.0066 | 0.00 % ↑ | |
| 8 | hrpt | peak | broad_gauss_w | deg² | 0.1204 | 0.1204 | 0.0032 | 0.00 % ↑ | |
| 9 | hrpt | peak | broad_lorentz_y | deg | 0.0844 | 0.0844 | 0.0021 | 0.00 % ↓ | |
| 10 | hrpt | instrument | twotheta_offset | deg | 0.6226 | 0.6226 | 0.0010 | 0.00 % ↑ | |
| 11 | hrpt | background | 10 | y | 168.5585 | 168.5585 | 1.3669 | 0.00 % ↓ | |
| 12 | hrpt | background | 30 | y | 164.3357 | 164.3357 | 0.9990 | 0.00 % ↓ | |
| 13 | hrpt | background | 50 | y | 166.8881 | 166.8881 | 0.7386 | 0.00 % ↓ | |
| 14 | hrpt | background | 110 | y | 175.4004 | 175.4006 | 0.6488 | 0.00 % ↑ | |
| 15 | hrpt | background | 165 | y | 174.2811 | 174.2812 | 0.8944 | 0.00 % ↑ |
• 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
Display Pattern¶
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt', x_min=38, x_max=41)
project.analysis.aliases.create(
label='occ_La',
param=project.structures['lbco'].atom_sites['La'].occupancy,
)
project.analysis.aliases.create(
label='occ_Ba',
param=project.structures['lbco'].atom_sites['Ba'].occupancy,
)
Set more constraints.
project.analysis.constraints.create(
expression='occ_Ba = 1 - occ_La',
)
Show defined constraints.
project.analysis.constraints.show()
User defined constraints
| id | expression | |
|---|---|---|
| 1 | biso_Ba | biso_Ba = biso_La |
| 2 | occ_Ba | occ_Ba = 1 - occ_La |
Constraints enabled: True
Set structure parameters to be refined.
project.structures['lbco'].atom_sites['La'].occupancy.free = True
Show free parameters after selection.
project.display.parameters.free()
Free parameters for both structures (🧩 data blocks) and experiments (🔬 data blocks)
| datablock | category | entry | parameter | value | uncertainty | min | max | units | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | 3.89087 | 0.00004 | -inf | inf | Å | |
| 2 | lbco | atom_site | La | occupancy | 0.50000 | -inf | inf | ||
| 3 | lbco | atom_site | La | adp_iso | 0.50508 | 0.02777 | -inf | inf | Ų |
| 4 | lbco | atom_site | Co | adp_iso | 0.23699 | 0.05643 | -inf | inf | Ų |
| 5 | lbco | atom_site | O | adp_iso | 1.39355 | 0.01599 | -inf | inf | Ų |
| 6 | hrpt | linked_phases | lbco | scale | 9.13509 | 0.05380 | -inf | inf | |
| 7 | hrpt | peak | broad_gauss_u | 0.08157 | 0.00310 | -inf | inf | deg² | |
| 8 | hrpt | peak | broad_gauss_v | -0.11593 | 0.00664 | -inf | inf | deg² | |
| 9 | hrpt | peak | broad_gauss_w | 0.12045 | 0.00325 | -inf | inf | deg² | |
| 10 | hrpt | peak | broad_lorentz_y | 0.08445 | 0.00214 | -inf | inf | deg | |
| 11 | hrpt | instrument | twotheta_offset | 0.62258 | 0.00103 | -inf | inf | deg | |
| 12 | hrpt | background | 10 | y | 168.55849 | 1.36685 | -inf | inf | |
| 13 | hrpt | background | 30 | y | 164.33569 | 0.99900 | -inf | inf | |
| 14 | hrpt | background | 50 | y | 166.88808 | 0.73857 | -inf | inf | |
| 15 | hrpt | background | 110 | y | 175.40056 | 0.64879 | -inf | inf | |
| 16 | hrpt | background | 165 | y | 174.28124 | 0.89439 | -inf | inf |
Run Fitting¶
project.analysis.fit()
project.display.fit.results()
project.display.fit.correlations()
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.29 | |
| 2 | 55 | 2.51 | 1.28 |
🏆 Best goodness-of-fit (reduced χ²) is 1.28 at iteration 54
✅ Fitting complete.
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
└── 📄 lbco_hrpt.html
⚙️ 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.51 |
| 4 | 🔁 Iterations | 52 |
| 5 | 📏 Goodness-of-fit (reduced χ²) | 1.28 |
| 6 | 📏 R-factor (Rf, %) | 5.61 |
| 7 | 📏 R-factor squared (Rf², %) | 5.25 |
| 8 | 📏 Weighted R-factor (wR, %) | 4.39 |
📈 Refined parameters:
| datablock | category | entry | parameter | units | start | value | s.u. | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lbco | cell | length_a | Å | 3.8909 | 3.8909 | 0.0000 | 0.00 % ↑ | |
| 2 | lbco | atom_site | La | occupancy | 0.5000 | 0.5840 | 0.0203 | 16.81 % ↑ | |
| 3 | lbco | atom_site | La | adp_iso | Ų | 0.5051 | 0.5983 | 0.0355 | 18.46 % ↑ |
| 4 | lbco | atom_site | Co | adp_iso | Ų | 0.2370 | 0.1665 | 0.0580 | 29.74 % ↓ |
| 5 | lbco | atom_site | O | adp_iso | Ų | 1.3935 | 1.3491 | 0.0192 | 3.19 % ↓ |
| 6 | hrpt | linked_phases | lbco | scale | 9.1351 | 8.9057 | 0.0761 | 2.51 % ↓ | |
| 7 | hrpt | peak | broad_gauss_u | deg² | 0.0816 | 0.0812 | 0.0031 | 0.43 % ↓ | |
| 8 | hrpt | peak | broad_gauss_v | deg² | -0.1159 | -0.1154 | 0.0066 | 0.48 % ↓ | |
| 9 | hrpt | peak | broad_gauss_w | deg² | 0.1204 | 0.1203 | 0.0032 | 0.14 % ↓ | |
| 10 | hrpt | peak | broad_lorentz_y | deg | 0.0844 | 0.0846 | 0.0021 | 0.18 % ↑ | |
| 11 | hrpt | instrument | twotheta_offset | deg | 0.6226 | 0.6226 | 0.0010 | 0.00 % ↑ | |
| 12 | hrpt | background | 10 | y | 168.5585 | 168.9780 | 1.3666 | 0.25 % ↑ | |
| 13 | hrpt | background | 30 | y | 164.3357 | 164.0535 | 0.9992 | 0.17 % ↓ | |
| 14 | hrpt | background | 50 | y | 166.8881 | 166.9125 | 0.7364 | 0.01 % ↑ | |
| 15 | hrpt | background | 110 | y | 175.4006 | 175.2699 | 0.6479 | 0.07 % ↓ | |
| 16 | hrpt | background | 165 | y | 174.2812 | 174.5580 | 0.8935 | 0.16 % ↑ |
• 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
Display Pattern¶
project.display.pattern(expt_name='hrpt')
project.display.pattern(expt_name='hrpt', x_min=38, x_max=41)
Display Structure¶
project.display.structure(struct_name='lbco')
Structure 🧩 'lbco' (Atom view type: 'adp')
wheel = zoom
right-drag = pan
📊 Report¶
This final section shows how to review the results of the analysis.
By default, HTML report is generated after fitting. Here we also
show how to activate generation of CIF, TEX and PDF reports with
regular project saves.
Keep in mind, that PDF report generation requires additional
dependencies and is not that fast to be generated after each fit, so
use it with caution.
The generated report files will be saved in the reports folder of
the project directory.
project.report.cif = True
project.report.tex = True
project.report.pdf = True
project.save()
Saving project 📦 'lbco_hrpt' to '../../../projects/ed_3_lbco_hrpt'
├── 📄 project.cif
├── 📁 structures/
│ └── 📄 lbco.cif
├── 📁 experiments/
│ └── 📄 hrpt.cif
├── 📁 analysis/
│ └── 📄 analysis.cif
└── 📁 reports/
├── 📄 lbco_hrpt.cif
├── 📄 lbco_hrpt.html
├── 📄 tex/lbco_hrpt.tex
└── 📄 lbco_hrpt.pdf