Skip to content

XinRefinement v1.5.0 — MAUD-comparable fit quality

Choose a tag to compare

@PolyXRD PolyXRD released this 07 Nov 15:46
· 47 commits to master since this release

XinRefinement v1.5.0 — MAUD-comparable fit quality

Baseline v1.4.0 | Theme: turn "comparable to MAUD" from an evaluation conclusion into a product capability, and trace the remaining gaps on 7 real samples down to root causes one by one. This release adds no new UI modules; what changed is the default behavior and guardrails of the fitting engine—same data, same set of CIFs, the resulting Rwp is lower, and lower with physical justification.

Download

File Size SHA256
XinRefinement-1.5.0-setup.exe 75.8 MB 429adb70eaa8df4754c9607ecdc9826f641582ace798f3ae9c7575e1e07ffdc0

Release installer (includes registration mechanism, zh/en/ja trilingual install UI). The internal evaluation portable package is for internal acceptance only and is not published with this Release.

The change at a glance

v1.4.0 v1.5.0
7-sample mean Rwp 14.38% 11.42% (MAUD 11.20%, gap 3.18 → 0.21 pt)
Microstructure anisotropy Manual coefficient per phase GUI on by default + two guardrails
Texture EWIMV discrete ODF Added spherical harmonics (Legendre) ODF, GUI on by default
xyz underdetermined Whole-step marked failed (4 sample coords none refined) Phase-wise downgrade, only when over budget
Long-sample time No cap (>1 h for ill-conditioned samples) Recipe wall-clock budget, GUI default 45 min
Pure corundum standard 28.58% 13.64% (beats GSAS-II's 15.8%)
Polymorph mismatch Only warned in log Results panel shows clickable button "Try α-cristobalite and re-refine"

Main Changes

Engine: three "false minimum" fixes (the biggest gain class this release)

  1. M10/M10b stepwise projection: cell and profile steps freeze each other's degrees of freedom, so the zero-point offset has nowhere to go and gets absorbed by the unit cell and asymmetry separately. The profile step is changed to joint refinement (cell+UVW+η+asym+zero), bringing single-phase pure corundum 28.58% → 14.63%. Also changed the "revert if no improvement" in micro/B steps to apply unconditionally.
  2. M11 window-boundary peak leakage: reflection enumeration strictly filters by window, so a strong peak entirely outside the window is discarded wholesale, yet its tail inside the window should contribute intensity (measured: a 140–150° segment ate 18.8% of the whole-pattern weighted residual). After expanding enumeration by 3°, pure corundum 14.63% → 13.64%. This is a general systematic-bias fix.
  3. Structure-factor vectorization: compute_peaks triple-vectorized, 26–37× speedup with bit-identical numerics (guardrail tests/test_peaks_vectorized.py).

Microstructure: M4 Popa LB per-phase anisotropy (GUI on by default)

Per-phase size/strain anisotropic broadening. In the 7-sample shootout, sample 1 −3.49 pt, sample 7 −3.81 pt—the largest single gain of v1.5. Default-on requires two guardrails:

  • Identifiability: phases with fewer than 8 independent crystallographic directions are skipped automatically (otherwise 6 parameters cannot be identified);
  • Revert entirely if no improvement: if Rwp does not drop after stacking, revert to the previous step's parameters.

CLI / library API still default off (--aniso-auto to enable explicitly), ensuring existing scripts get bit-identical results.

Texture: M3 spherical-harmonic ODF (GUI on by default, order 10)

Under fiber symmetry the exact subspace of spherical harmonics T(χ)=1+Σ c_l·P_l(cosχ), even orders 2–10. Versus EWIMV, same accuracy with 4–15 fewer degrees of freedom, and the basis is orthogonal, spherical mean identically 1 (structurally eliminates the scale null space), no second-difference penalty needed. CLI --texture-model harmonic --texture-degree N.

The measured conclusion is written into the project proposal: order matters more than model family, and part of EWIMV's Rwp advantage comes from overfitting (sample 3's T(χ) fitted into a quasi-binary mask). "Copy MAUD's per-phase Harmonic toggle" was disproven by supplementary-phase experiments and not productized.

Quantification: M9 xyz step phase-wise downgrade

v1.4 summed the free coordinates of all phases and compared to xyz_max_params=40, so samples 4/5/6/7's xyz steps all failed—not a single coordinate refined, yet two of them were the largest-gap samples. Changed to phase-wise downgrade (descending greedy retention, other phases fixed-structure), only when over budget:

Sample Before downgrade After downgrade
5 17.204 16.026
6 12.603 12.207
7 17.193 16.930

Diagnosis: sample 7's gap is cristobalite polymorph, not peak shape or background

Sample 7's cristobalite was given the high-temperature β (Fd-3m), but the sample is actually low-temperature α (P4₁2₁2): incremental basis 18.06 → 15.59, end-to-end 17.193 → 15.357, and that phase's ΔB_iso hit the 6 Ų upper bound and vanished (overfitting signal eliminated).

On the product side we only suggest, never auto-change: when all three trigger conditions are met (ΔB_iso at upper bound + same chemical-formula normalization + space group equals the baseline polymorph), the results panel shows a button "Try α-cristobalite and re-refine". The structural model is experimental fact (synthesis temperature, phase-transition history); the software has no authority to decide for the user.

External validation: IUCr CPD quantification round-robin

Those 7 ShiJiKong samples were both tuning targets and acceptance targets, insufficient to prove generalization. This release connects to the IUCr CPD standard set (each point has weighed truth + XRF cross-check):

  • Sample 1 all eight points reconciled, combo basis average max|Δ| 2.84 pt, same order as the round-robin participants' standard deviation (2.4–2.7 pt); 1a/1b clearly better than community level.
  • Sample 2 (preferred orientation) 31.21 → 15.05, all thanks to Popa LB.
  • Sample 3 (contains 29.5% amorphous) 12.42%, note that reporting such samples must first state the normalization basis.
  • Sample 4 (micro-absorption) is our capability boundary, labeled honestly: the Brindley factor and per-phase scale are strictly degenerate (correction changes Rwp by only 1e-12), so only wt% normalization allocation can be changed, not the fit.

Validation Data (7-sample acceptance)

Basis identical to project proposal §1.7 (tent 19 nodes, per-phase ΔB_iso, xyz, EWIMV texture, Popa LB, 5–120°/sample 5 is 10–100°). The same string of numbers was repeatedly reproduced during v1.5—hard evidence of "zero regression on the default path".

Sample MAUD 2.99993 v1.5.0 Gap Verdict (≤ MAUD+2) Time
1 10.90 11.880 +0.98 ✅ PASS 34.2 min
2 6.34 6.968 +0.63 ✅ PASS 2.2 min
3 10.29 8.123 −2.17 ✅ PASS (beat) 5.2 min
4 9.96 10.263 +0.30 ✅ PASS 77.5 min
5 14.87 15.865 +1.00 ✅ PASS 35.7 min
6 14.76 12.122 −2.64 ✅ PASS (beat) 41.4 min
7 11.30 14.689 +3.39 ❌ FAIL 49.7 min
Mean 11.20 11.42 +0.21 6/7 PASS 245.9 min

How to read:

  • 6 of the 7 samples reproduced to 3 decimal places (sample 5 excepted, see below), showing v1.5's default path did not drift during development—the hardest evidence of "zero regression", not a self-assessment.
  • Sample 7 is the only item not meeting the bar, +3.39 pt. Its root cause is found (cristobalite given as high-temperature β, sample actually low-temperature α), but the product does not auto-change the user's CIF; after manual replacement this project measured 14.031 (−0.66 pt), still above MAUD's 11.30—MAUD treats this phase as a near-amorphous broad packet (size 27 Å / strain 0.0164), while our Popa LB starting point is 58× off from it, and the numerical Jacobian can't get across. This is a known hard nut, labeled honestly, not concealed.
  • Sample 4 is the 77.5 min slow sample (5 phases 40 free coordinates × numerical Jacobian), this run's 10.2634 matches §1.7's 10.263; see "Known Limitations" for the time upper bound.
  • Sample 5's 15.865 is 0.077 lower than §1.7's 15.942: M9 phase-wise downgrade let its xyz step actually run (4 phases / 36 free coefficients), and later micro/B steps absorbed most of it, net gain −0.077. This is a recorded change, not drift.
  • If sample 7 is excluded, the mean of the remaining 6 samples is 10.87%, already better than MAUD's 11.20%—but this number should not be used for promotion, sample 7 is the problem we haven't solved yet.

Known Limitations

  • Sample 4's xyz downgrade path is slow (40 free coordinates × numerical Jacobian). GUI has a 45 min wall-clock budget backstop; CLI defaults to unlimited; for batch scripts pass --time-budget-min yourself.
  • Quantification (QPA) decoupled from Rwp: 1b measured Rwp 29.99% but wt% error only 0.22 pt. For QPA acceptance look at wt%, not Rwp.
  • Background node densification is not free: full 7-sample verdict shows 2.5°/node pulls the mean to 10.90 (literally beats MAUD), but QPA collapses (sample 4 quartz −7.6 vol%). The UI is opened up to 60 nodes, but when QPA is the goal, do not exceed 1 node/4°.
  • Two things that "looked like they should help, measured no help" were turned off as negative results: per-atom B_iso (+equalTo grouping) on samples 1/7 ten phases 90 scan points max gain 0.0025 pt; LM damping aligned to MAUD's λ=0.01 three settings had a 0.042 pt spread and was non-monotonic. Knobs retained, defaults unchanged.

Installation and Registration

Same as v1.0.0: installer embeds zh/en/ja trilingual UI, registration code interoperable with the XinMatch family (%APPDATA%\PolyXRD\Registration\XinRefinement.json). Internal evaluation build needs no registration or install, marked in red in the status bar.

License

This software uses the MIT license. Built-in crystal structure data comes from COD (CC0) and ICSD-derived public literature, containing no PDF cards or ICDD data.