Repository navigation
XinRefinement v1.5.0 — MAUD-comparable fit quality
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)
- M10/M10b stepwise projection:
cellandprofilesteps 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. Theprofilestep 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" inmicro/Bsteps to apply unconditionally. - 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.
- Structure-factor vectorization:
compute_peakstriple-vectorized, 26–37× speedup with bit-identical numerics (guardrailtests/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,
combobasis averagemax|Δ|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-minyourself. - 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.