The results file: the choice
R28 asks for one self-describing file that holds everything a refinement produced, readable without the app and portable to other programs, in place of FullProf's .prf. Three candidates were compared with evidence (L092): the IUCr's powder CIF (pdCIF), NeXus/HDF5, and a format of our own. The choice is Josu's; nothing is built before it.
Sources: GSAS-II's code (commit 305a159), FullProf's manual, News and its own *_prof.cif files, the IUCr powder dictionary (COMCIFS/Powder_Dictionary, 2026-09-08), the NeXus definitions (2026-10-05), and the code of pdCIFplotter, FOX/ObjCryst, TOPAS-macros and EasyDiffraction. The journals' and databases' pages could not be opened from the session: what they ask is quoted from search extracts and marked not checked.
What each holds
| R28 asks for | pdCIF (cif_pd 2.5 and the core dictionary) | NeXus/HDF5 | A format of our own |
|---|---|---|---|
| observed, \(\sigma\), calculated | yes: _pd_meas.intensity_total with its s.u., _pd_proc.ls_weight, _pd_calc.intensity_total |
generic signals of NXdata, no standard names | yes |
| difference | no item: readers compute it | generic | yes |
| background | yes: _pd_proc.intensity_bkg_calc |
generic | yes |
| each phase's curve | yes since 2.5.0: PD_CALC_COMPONENT (DDLm names only); no reader found |
generic | yes |
| excluded regions | as text, and as weight 0 at the points (the dictionary's machine-readable form) | no field | yes |
| reflections: hkl, phase, intensity | yes: _refln.index_*, _pd_refln.phase_id, _refln.F_squared_* |
hkl and intensity (NXreflections, single-crystal oriented); no phase | yes |
| reflections: position | d; 2\(\theta\) only through a peak table | polar angle, d | yes |
| Rp, Rwp, Rexp, R_Bragg | yes (as ratios), _refine_ls.R_I_factor |
no standard names | yes |
| \(\chi^2\) | no item: S = √\(\chi^2\) as _refine_ls.goodness_of_fit_all |
no standard name | yes |
| the model with uncertainties | yes: cell, space group, atom sites with s.u. | cell and atoms, no displacement parameters or s.u. | yes |
| the control file, the data file | no items: a text field or items with a local prefix (as GSAS-II's _gsas_); the data themselves in the file |
NXnote (an embedded file with its name and checksum) | yes |
Who reads and writes them
- pdCIF. Written by GSAS-II (observed, calculated, background, weights, reflections, R factors; no phase curves), by FullProf with Rpa = −1 (
*_prof.cif: observed, calculated, background, reflections; R factors in percent where the dictionary has ratios, its \(\chi^2\) under a name not in the dictionary), by TOPAS through user macros (with phase curves). Read by GSAS-II (the observed pattern only), pdCIFplotter (the whole fit, with tick marks), WinPLOTR (*prof.cif), FOX (observed), xrayutilities and EasyDiffraction. Mercury, VESTA and CrystalDiffract show no sign of reading a powder profile from a CIF. - NeXus/HDF5. No application definition for refinement results exists, and no program was found that writes or reads one. GSAS-II reads MAX IV's integrated patterns (NXazint1d/2d) as data; FullProf reads the ILL's raw NeXus. Binary, and in Rust a binding to the HDF5 C library (the maintained fork
hdf5-metno), or young pure-Rust crates. - A format of our own holds everything by construction, and no program reads it.
What journals ask for (not checked: quoted from search extracts)
- IUCr journals: "The results of the Rietveld refinement and the powder diffraction data should be provided in Crystallographic Information File (CIF) format"; the measured profile is to be deposited.
- Powder Diffraction (ICDD): "The raw data file (as CIF) for the diffraction pattern must be provided as supplemental material", and the Rietveld CIF too.
- CCDC and ICSD take the CIF of a constrained powder refinement; no page found asks for the profile.
Recommendation
pdCIF, written to the 2.5 dictionary with the DDL1 names wherever they exist, so that today's readers find the observed and calculated patterns, the background and the reflections. The four things it lacks are given in its own forms or under a local prefix:
- the difference: left to the reader, as the dictionary intends (it is obs − calc);
- \(\chi^2\): as S = √\(\chi^2\), the dictionary's goodness of fit, and also under the local prefix;
- excluded regions: weight 0 at their points (the dictionary's machine-readable form) and the regions as text;
- the control file and the data file's name and checksum: under the local prefix, the control file as a text field. A local prefix is registered with COMCIFS (not yet done).
Why: it is the only one of the three that journals ask for, so the record of a refinement is also its deposition; programs read it today (pdCIFplotter shows the whole fit); it is text a person can read; and the core already reads and writes CIF, so it adds no library. Against it: the phase curves exist only under the new dictionary's DDLm names, which no reader uses yet; reflection positions in 2\(\theta\) need a peak table; the 2.5 dictionary was dated 2026-09-08 and whether the IUCr has approved it was not checked.
Set aside: NeXus/HDF5, which no program reads or writes for refinements, has no names for any of R28's items but the data, and needs a C library; a format of our own, which no other program reads, against R28's "portable to other programs".