Structure Refinement: Co2SiO4, D20¶
This example demonstrates a Rietveld refinement of Co2SiO4 crystal structure using constant wavelength neutron powder diffraction data from D20 at ILL.
Import Library¶
In [2]:
Copied!
from easydiffraction import ExperimentFactory
from easydiffraction import Project
from easydiffraction import SampleModelFactory
from easydiffraction import download_from_repository
from easydiffraction import ExperimentFactory
from easydiffraction import Project
from easydiffraction import SampleModelFactory
from easydiffraction import download_from_repository
In [3]:
Copied!
model = SampleModelFactory.create(name='cosio')
model = SampleModelFactory.create(name='cosio')
Set Space Group¶
In [4]:
Copied!
model.space_group.name_h_m = 'P n m a'
model.space_group.it_coordinate_system_code = 'abc'
model.space_group.name_h_m = 'P n m a'
model.space_group.it_coordinate_system_code = 'abc'
Set Unit Cell¶
In [5]:
Copied!
model.cell.length_a = 10.3
model.cell.length_b = 6.0
model.cell.length_c = 4.8
model.cell.length_a = 10.3
model.cell.length_b = 6.0
model.cell.length_c = 4.8
Set Atom Sites¶
In [6]:
Copied!
model.atom_sites.add_from_args(
    label='Co1', type_symbol='Co', fract_x=0, fract_y=0, fract_z=0, wyckoff_letter='a', b_iso=0.5
)
model.atom_sites.add_from_args(
    label='Co2',
    type_symbol='Co',
    fract_x=0.279,
    fract_y=0.25,
    fract_z=0.985,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='Si',
    type_symbol='Si',
    fract_x=0.094,
    fract_y=0.25,
    fract_z=0.429,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='O1',
    type_symbol='O',
    fract_x=0.091,
    fract_y=0.25,
    fract_z=0.771,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='O2',
    type_symbol='O',
    fract_x=0.448,
    fract_y=0.25,
    fract_z=0.217,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='O3',
    type_symbol='O',
    fract_x=0.164,
    fract_y=0.032,
    fract_z=0.28,
    wyckoff_letter='d',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='Co1', type_symbol='Co', fract_x=0, fract_y=0, fract_z=0, wyckoff_letter='a', b_iso=0.5
)
model.atom_sites.add_from_args(
    label='Co2',
    type_symbol='Co',
    fract_x=0.279,
    fract_y=0.25,
    fract_z=0.985,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='Si',
    type_symbol='Si',
    fract_x=0.094,
    fract_y=0.25,
    fract_z=0.429,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='O1',
    type_symbol='O',
    fract_x=0.091,
    fract_y=0.25,
    fract_z=0.771,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='O2',
    type_symbol='O',
    fract_x=0.448,
    fract_y=0.25,
    fract_z=0.217,
    wyckoff_letter='c',
    b_iso=0.5,
)
model.atom_sites.add_from_args(
    label='O3',
    type_symbol='O',
    fract_x=0.164,
    fract_y=0.032,
    fract_z=0.28,
    wyckoff_letter='d',
    b_iso=0.5,
)
Symmetry Constraints¶
Show CIF output before applying symmetry constraints.
In [7]:
Copied!
model.show_as_cif()
model.show_as_cif()
Sample model 🧩 'cosio' as cif
| CIF | |
|---|---|
| 1 | data_cosio | 
| 2 | |
| 3 | _cell.length_a 10.3 | 
| 4 | _cell.length_b 6.0 | 
| 5 | _cell.length_c 4.8 | 
| 6 | _cell.angle_alpha 90.0 | 
| 7 | _cell.angle_beta 90.0 | 
| 8 | _cell.angle_gamma 90.0 | 
| 9 | |
| 10 | _space_group.name_H-M_alt "P n m a" | 
| 11 | _space_group.IT_coordinate_system_code abc | 
| 12 | |
| 13 | loop_ | 
| 14 | _atom_site.label | 
| 15 | _atom_site.type_symbol | 
| 16 | _atom_site.fract_x | 
| 17 | _atom_site.fract_y | 
| 18 | _atom_site.fract_z | 
| 19 | _atom_site.Wyckoff_letter | 
| 20 | _atom_site.occupancy | 
| 21 | _atom_site.B_iso_or_equiv | 
| 22 | _atom_site.adp_type | 
| 23 | Co1 Co 0 0 0 a 1.0 0.5 Biso | 
| 24 | Co2 Co 0.279 0.25 0.985 c 1.0 0.5 Biso | 
| 25 | Si Si 0.094 0.25 0.429 c 1.0 0.5 Biso | 
| 26 | O1 O 0.091 0.25 0.771 c 1.0 0.5 Biso | 
| 27 | O2 O 0.448 0.25 0.217 c 1.0 0.5 Biso | 
| 28 | O3 O 0.164 0.032 0.28 d 1.0 0.5 Biso | 
Apply symmetry constraints.
In [8]:
Copied!
model.apply_symmetry_constraints()
model.apply_symmetry_constraints()
Show CIF output after applying symmetry constraints.
In [9]:
Copied!
model.show_as_cif()
model.show_as_cif()
Sample model 🧩 'cosio' as cif
| CIF | |
|---|---|
| 1 | data_cosio | 
| 2 | |
| 3 | _cell.length_a 10.3 | 
| 4 | _cell.length_b 6.0 | 
| 5 | _cell.length_c 4.8 | 
| 6 | _cell.angle_alpha 90.0 | 
| 7 | _cell.angle_beta 90.0 | 
| 8 | _cell.angle_gamma 90.0 | 
| 9 | |
| 10 | _space_group.name_H-M_alt "P n m a" | 
| 11 | _space_group.IT_coordinate_system_code abc | 
| 12 | |
| 13 | loop_ | 
| 14 | _atom_site.label | 
| 15 | _atom_site.type_symbol | 
| 16 | _atom_site.fract_x | 
| 17 | _atom_site.fract_y | 
| 18 | _atom_site.fract_z | 
| 19 | _atom_site.Wyckoff_letter | 
| 20 | _atom_site.occupancy | 
| 21 | _atom_site.B_iso_or_equiv | 
| 22 | _atom_site.adp_type | 
| 23 | Co1 Co 0.0 0.0 0.0 a 1.0 0.5 Biso | 
| 24 | Co2 Co 0.279 0.25 0.985 c 1.0 0.5 Biso | 
| 25 | Si Si 0.094 0.25 0.429 c 1.0 0.5 Biso | 
| 26 | O1 O 0.091 0.25 0.771 c 1.0 0.5 Biso | 
| 27 | O2 O 0.448 0.25 0.217 c 1.0 0.5 Biso | 
| 28 | O3 O 0.164 0.032 0.28 d 1.0 0.5 Biso | 
In [10]:
Copied!
download_from_repository('co2sio4_d20.xye', destination='data')
download_from_repository('co2sio4_d20.xye', destination='data')
Downloading...
File 'co2sio4_d20.xye' from 'easyscience/diffraction-lib'
Create Experiment¶
In [11]:
Copied!
expt = ExperimentFactory.create(name='d20', data_path='data/co2sio4_d20.xye')
expt = ExperimentFactory.create(name='d20', data_path='data/co2sio4_d20.xye')
Data loaded successfully
Experiment 🔬 'd20'. Number of data points: 1418
Set Instrument¶
In [12]:
Copied!
expt.instrument.setup_wavelength = 1.87
expt.instrument.calib_twotheta_offset = 0.1
expt.instrument.setup_wavelength = 1.87
expt.instrument.calib_twotheta_offset = 0.1
Set Peak Profile¶
In [13]:
Copied!
expt.peak.broad_gauss_u = 0.3
expt.peak.broad_gauss_v = -0.5
expt.peak.broad_gauss_w = 0.4
expt.peak.broad_gauss_u = 0.3
expt.peak.broad_gauss_v = -0.5
expt.peak.broad_gauss_w = 0.4
Set Background¶
In [14]:
Copied!
expt.background.add_from_args(x=8, y=500)
expt.background.add_from_args(x=9, y=500)
expt.background.add_from_args(x=10, y=500)
expt.background.add_from_args(x=11, y=500)
expt.background.add_from_args(x=12, y=500)
expt.background.add_from_args(x=15, y=500)
expt.background.add_from_args(x=25, y=500)
expt.background.add_from_args(x=30, y=500)
expt.background.add_from_args(x=50, y=500)
expt.background.add_from_args(x=70, y=500)
expt.background.add_from_args(x=90, y=500)
expt.background.add_from_args(x=110, y=500)
expt.background.add_from_args(x=130, y=500)
expt.background.add_from_args(x=150, y=500)
expt.background.add_from_args(x=8, y=500)
expt.background.add_from_args(x=9, y=500)
expt.background.add_from_args(x=10, y=500)
expt.background.add_from_args(x=11, y=500)
expt.background.add_from_args(x=12, y=500)
expt.background.add_from_args(x=15, y=500)
expt.background.add_from_args(x=25, y=500)
expt.background.add_from_args(x=30, y=500)
expt.background.add_from_args(x=50, y=500)
expt.background.add_from_args(x=70, y=500)
expt.background.add_from_args(x=90, y=500)
expt.background.add_from_args(x=110, y=500)
expt.background.add_from_args(x=130, y=500)
expt.background.add_from_args(x=150, y=500)
Set Linked Phases¶
In [15]:
Copied!
expt.linked_phases.add_from_args(id='cosio', scale=1.0)
expt.linked_phases.add_from_args(id='cosio', scale=1.0)
In [16]:
Copied!
project = Project()
project = Project()
Set Plotting Engine¶
In [17]:
Copied!
project.plotter.engine = 'plotly'
project.plotter.engine = 'plotly'
Add Sample Model¶
In [18]:
Copied!
project.sample_models.add(model)
project.sample_models.add(model)
Add Experiment¶
In [19]:
Copied!
project.experiments.add(expt)
project.experiments.add(expt)
In [20]:
Copied!
project.analysis.current_calculator = 'cryspy'
project.analysis.current_calculator = 'cryspy'
Current calculator changed to
cryspy
Set Minimizer¶
In [21]:
Copied!
project.analysis.current_minimizer = 'lmfit (leastsq)'
project.analysis.current_minimizer = 'lmfit (leastsq)'
Current minimizer changed to
lmfit (leastsq)
Plot Measured vs Calculated¶
In [22]:
Copied!
project.plot_meas_vs_calc(expt_name='d20', show_residual=True)
project.plot_meas_vs_calc(expt_name='d20', show_residual=True)
In [23]:
Copied!
project.plot_meas_vs_calc(expt_name='d20', x_min=41, x_max=54, show_residual=True)
project.plot_meas_vs_calc(expt_name='d20', x_min=41, x_max=54, show_residual=True)
Set Free Parameters¶
In [24]:
Copied!
model.cell.length_a.free = True
model.cell.length_b.free = True
model.cell.length_c.free = True
model.atom_sites['Co2'].fract_x.free = True
model.atom_sites['Co2'].fract_z.free = True
model.atom_sites['Si'].fract_x.free = True
model.atom_sites['Si'].fract_z.free = True
model.atom_sites['O1'].fract_x.free = True
model.atom_sites['O1'].fract_z.free = True
model.atom_sites['O2'].fract_x.free = True
model.atom_sites['O2'].fract_z.free = True
model.atom_sites['O3'].fract_x.free = True
model.atom_sites['O3'].fract_y.free = True
model.atom_sites['O3'].fract_z.free = True
model.atom_sites['Co1'].b_iso.free = True
model.atom_sites['Co2'].b_iso.free = True
model.atom_sites['Si'].b_iso.free = True
model.atom_sites['O1'].b_iso.free = True
model.atom_sites['O2'].b_iso.free = True
model.atom_sites['O3'].b_iso.free = True
model.cell.length_a.free = True
model.cell.length_b.free = True
model.cell.length_c.free = True
model.atom_sites['Co2'].fract_x.free = True
model.atom_sites['Co2'].fract_z.free = True
model.atom_sites['Si'].fract_x.free = True
model.atom_sites['Si'].fract_z.free = True
model.atom_sites['O1'].fract_x.free = True
model.atom_sites['O1'].fract_z.free = True
model.atom_sites['O2'].fract_x.free = True
model.atom_sites['O2'].fract_z.free = True
model.atom_sites['O3'].fract_x.free = True
model.atom_sites['O3'].fract_y.free = True
model.atom_sites['O3'].fract_z.free = True
model.atom_sites['Co1'].b_iso.free = True
model.atom_sites['Co2'].b_iso.free = True
model.atom_sites['Si'].b_iso.free = True
model.atom_sites['O1'].b_iso.free = True
model.atom_sites['O2'].b_iso.free = True
model.atom_sites['O3'].b_iso.free = True
In [25]:
Copied!
expt.linked_phases['cosio'].scale.free = True
expt.instrument.calib_twotheta_offset.free = True
expt.peak.broad_gauss_u.free = True
expt.peak.broad_gauss_v.free = True
expt.peak.broad_gauss_w.free = True
expt.peak.broad_lorentz_y.free = True
for point in expt.background:
    point.y.free = True
expt.linked_phases['cosio'].scale.free = True
expt.instrument.calib_twotheta_offset.free = True
expt.peak.broad_gauss_u.free = True
expt.peak.broad_gauss_v.free = True
expt.peak.broad_gauss_w.free = True
expt.peak.broad_lorentz_y.free = True
for point in expt.background:
    point.y.free = True
Set Constraints¶
Set aliases for parameters.
In [26]:
Copied!
project.analysis.aliases.add_from_args(
    label='biso_Co1',
    param_uid=project.sample_models['cosio'].atom_sites['Co1'].b_iso.uid,
)
project.analysis.aliases.add_from_args(
    label='biso_Co2',
    param_uid=project.sample_models['cosio'].atom_sites['Co2'].b_iso.uid,
)
project.analysis.aliases.add_from_args(
    label='biso_Co1',
    param_uid=project.sample_models['cosio'].atom_sites['Co1'].b_iso.uid,
)
project.analysis.aliases.add_from_args(
    label='biso_Co2',
    param_uid=project.sample_models['cosio'].atom_sites['Co2'].b_iso.uid,
)
Set constraints.
In [27]:
Copied!
project.analysis.constraints.add_from_args(
    lhs_alias='biso_Co2',
    rhs_expr='biso_Co1',
)
project.analysis.constraints.add_from_args(
    lhs_alias='biso_Co2',
    rhs_expr='biso_Co1',
)
Apply constraints.
In [28]:
Copied!
project.analysis.apply_constraints()
project.analysis.apply_constraints()
Run Fitting¶
In [29]:
Copied!
project.analysis.fit()
project.analysis.fit()
Using experiment 🔬 'd20' for 'single' fitting
🚀 Starting fit process with 'lmfit (leastsq)'...
📈 Goodness-of-fit (reduced χ²) change:
| iteration | χ² | improvement [%] | |
|---|---|---|---|
| 1 | 1 | 423.20 | |
| 2 | 43 | 71.71 | 83.1% ↓ | 
| 3 | 83 | 40.43 | 43.6% ↓ | 
| 4 | 123 | 17.05 | 57.8% ↓ | 
| 5 | 163 | 10.78 | 36.8% ↓ | 
| 6 | 203 | 9.26 | 14.1% ↓ | 
| 7 | 243 | 8.08 | 12.7% ↓ | 
| 8 | 283 | 5.66 | 30.0% ↓ | 
| 9 | 323 | 4.67 | 17.4% ↓ | 
| 10 | 363 | 4.57 | 2.3% ↓ | 
| 11 | 564 | 4.56 | 
🏆 Best goodness-of-fit (reduced χ²) is 4.56 at iteration 546
✅ Fitting complete.
Fit results
✅ Success: True
⏱️ Fitting time: 19.55 seconds
📏 Goodness-of-fit (reduced χ²): 4.56
📏 R-factor (Rf): 3.04%
📏 R-factor squared (Rf²): 4.54%
📏 Weighted R-factor (wR): 4.87%
📈 Fitted parameters:
| datablock | category | entry | parameter | start | fitted | uncertainty | units | change | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | cosio | cell | None | length_a | 10.3000 | 10.3090 | 0.0003 | Å | 0.09 % ↑ | 
| 2 | cosio | cell | None | length_b | 6.0000 | 6.0039 | 0.0002 | Å | 0.07 % ↑ | 
| 3 | cosio | cell | None | length_c | 4.8000 | 4.7868 | 0.0001 | Å | 0.28 % ↓ | 
| 4 | cosio | atom_site | Co1 | b_iso | 0.5000 | 0.2770 | 0.0802 | Ų | 44.59 % ↓ | 
| 5 | cosio | atom_site | Co2 | fract_x | 0.2790 | 0.2794 | 0.0007 | 0.14 % ↑ | |
| 6 | cosio | atom_site | Co2 | fract_z | 0.9850 | 0.9847 | 0.0015 | 0.03 % ↓ | |
| 7 | cosio | atom_site | Si | fract_x | 0.0940 | 0.0937 | 0.0004 | 0.31 % ↓ | |
| 8 | cosio | atom_site | Si | fract_z | 0.4290 | 0.4290 | 0.0008 | 0.01 % ↑ | |
| 9 | cosio | atom_site | Si | b_iso | 0.5000 | 0.3519 | 0.0625 | Ų | 29.62 % ↓ | 
| 10 | cosio | atom_site | O1 | fract_x | 0.0910 | 0.0911 | 0.0003 | 0.08 % ↑ | |
| 11 | cosio | atom_site | O1 | fract_z | 0.7710 | 0.7714 | 0.0006 | 0.05 % ↑ | |
| 12 | cosio | atom_site | O1 | b_iso | 0.5000 | 0.6457 | 0.0581 | Ų | 29.14 % ↑ | 
| 13 | cosio | atom_site | O2 | fract_x | 0.4480 | 0.4482 | 0.0003 | 0.06 % ↑ | |
| 14 | cosio | atom_site | O2 | fract_z | 0.2170 | 0.2167 | 0.0007 | 0.14 % ↓ | |
| 15 | cosio | atom_site | O2 | b_iso | 0.5000 | 0.5778 | 0.0582 | Ų | 15.57 % ↑ | 
| 16 | cosio | atom_site | O3 | fract_x | 0.1640 | 0.1636 | 0.0002 | 0.26 % ↓ | |
| 17 | cosio | atom_site | O3 | fract_y | 0.0320 | 0.0317 | 0.0003 | 1.08 % ↓ | |
| 18 | cosio | atom_site | O3 | fract_z | 0.2800 | 0.2800 | 0.0005 | 0.02 % ↑ | |
| 19 | cosio | atom_site | O3 | b_iso | 0.5000 | 0.8389 | 0.0485 | Ų | 67.79 % ↑ | 
| 20 | d20 | peak | None | broad_gauss_u | 0.3000 | 0.2423 | 0.0068 | deg² | 19.22 % ↓ | 
| 21 | d20 | peak | None | broad_gauss_v | -0.5000 | -0.5288 | 0.0145 | deg² | 5.76 % ↑ | 
| 22 | d20 | peak | None | broad_gauss_w | 0.4000 | 0.3840 | 0.0090 | deg² | 4.01 % ↓ | 
| 23 | d20 | peak | None | broad_lorentz_y | 0.0000 | 0.0159 | 0.0045 | deg | N/A | 
| 24 | d20 | linked_phases | cosio | scale | 1.0000 | 1.1957 | 0.0106 | 19.57 % ↑ | |
| 25 | d20 | instrument | None | twotheta_offset | 0.1000 | 0.2884 | 0.0020 | deg | 188.44 % ↑ | 
| 26 | d20 | background | 8 | y | 500.0000 | 608.6305 | 14.5414 | 21.73 % ↑ | |
| 27 | d20 | background | 9 | y | 500.0000 | 580.6214 | 9.7278 | 16.12 % ↑ | |
| 28 | d20 | background | 10 | y | 500.0000 | 562.8991 | 9.2422 | 12.58 % ↑ | |
| 29 | d20 | background | 11 | y | 500.0000 | 540.2882 | 8.7695 | 8.06 % ↑ | |
| 30 | d20 | background | 12 | y | 500.0000 | 519.8428 | 6.0496 | 3.97 % ↑ | |
| 31 | d20 | background | 15 | y | 500.0000 | 507.3838 | 3.4846 | 1.48 % ↑ | |
| 32 | d20 | background | 25 | y | 500.0000 | 463.0794 | 3.1898 | 7.38 % ↓ | |
| 33 | d20 | background | 30 | y | 500.0000 | 434.2455 | 2.3904 | 13.15 % ↓ | |
| 34 | d20 | background | 50 | y | 500.0000 | 450.8166 | 2.2505 | 9.84 % ↓ | |
| 35 | d20 | background | 70 | y | 500.0000 | 430.3828 | 2.0250 | 13.92 % ↓ | |
| 36 | d20 | background | 90 | y | 500.0000 | 413.7132 | 2.2594 | 17.26 % ↓ | |
| 37 | d20 | background | 110 | y | 500.0000 | 361.2599 | 2.0915 | 27.75 % ↓ | |
| 38 | d20 | background | 130 | y | 500.0000 | 291.0612 | 1.9671 | 41.79 % ↓ | |
| 39 | d20 | background | 150 | y | 500.0000 | 238.7749 | 2.9764 | 52.25 % ↓ | 
Plot Measured vs Calculated¶
In [30]:
Copied!
project.plot_meas_vs_calc(expt_name='d20', show_residual=True)
project.plot_meas_vs_calc(expt_name='d20', show_residual=True)
In [31]:
Copied!
project.plot_meas_vs_calc(expt_name='d20', x_min=41, x_max=54, show_residual=True)
project.plot_meas_vs_calc(expt_name='d20', x_min=41, x_max=54, show_residual=True)
Summary¶
This final section shows how to review the results of the analysis.
Show Project Summary¶
In [32]:
Copied!
project.summary.show_report()
project.summary.show_report()
PROJECT INFO ━━━━━━━━━━━━
Title
Untitled Project
CRYSTALLOGRAPHIC DATA ━━━━━━━━━━━━━━━━━━━━━
Phase datablock
🧩 cosio
Space group
P n m a
Cell parameters
| Parameter | Value | |
|---|---|---|
| 1 | a | 10.30896 | 
| 2 | b | 6.00391 | 
| 3 | c | 4.78675 | 
| 4 | alpha | 90.00000 | 
| 5 | beta | 90.00000 | 
| 6 | gamma | 90.00000 | 
Atom sites
| label | type | x | y | z | occ | Biso | |
|---|---|---|---|---|---|---|---|
| 1 | Co1 | Co | 0.00000 | 0.00000 | 0.00000 | 1.00000 | 0.27703 | 
| 2 | Co2 | Co | 0.27938 | 0.25000 | 0.98470 | 1.00000 | 0.27703 | 
| 3 | Si | Si | 0.09371 | 0.25000 | 0.42904 | 1.00000 | 0.35192 | 
| 4 | O1 | O | 0.09107 | 0.25000 | 0.77140 | 1.00000 | 0.64570 | 
| 5 | O2 | O | 0.44825 | 0.25000 | 0.21671 | 1.00000 | 0.57784 | 
| 6 | O3 | O | 0.16358 | 0.03165 | 0.28005 | 1.00000 | 0.83894 | 
EXPERIMENTS ━━━━━━━━━━━
Experiment datablock
🔬 d20
Experiment type
SampleFormEnum.POWDER, RadiationProbeEnum.NEUTRON, BeamModeEnum.CONSTANT_WAVELENGTH
Wavelength
1.87000
2θ offset
0.28844
Profile type
PeakProfileTypeEnum.PSEUDO_VOIGT
Peak broadening (Gaussian)
| Parameter | Value | |
|---|---|---|
| 1 | U | 0.24233 | 
| 2 | V | -0.52880 | 
| 3 | W | 0.38395 | 
Peak broadening (Lorentzian)
| Parameter | Value | |
|---|---|---|
| 1 | X | 0.00000 | 
| 2 | Y | 0.01591 | 
FITTING ━━━━━━━
Calculation engine
cryspy
Minimization engine
lmfit (leastsq)
Fit quality
| metric | value | |
|---|---|---|
| 1 | Goodness-of-fit (reduced χ²) | 4.56 |