Repository navigation
XinRefinement v1.1.0 — Import XinMatch phase analysis (.xinm), self-contained project files
XinRefinement v1.1.0 — Import XinMatch phase analysis (.xinm), self-contained project files
Baseline
v1.0.0| Released alongside XinMatch 3.4.0. The refinement engine, parameter model, CLI parameters, and registration mechanism are unchanged; this release adds one import channel, one project container format, and fixes a v1.0.0.xrpfield-dropping defect.
Download
| File | Purpose |
|---|---|
XinRefinement-1.1.0-setup.exe |
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.
Key Capabilities
Import XinMatch phase analysis (.xinm)
File → Import XinMatch Phase Analysis…. Loads three things at once, no more manual copying:
| Loaded | Source | Notes |
|---|---|---|
| Pattern | .xinm pattern/pattern.csv |
Two-column CSV, %.10g round-trip with zero error; wavelength is also passed to the canvas (d-axis conversion available immediately) |
| Phase CIF | .xinm cifs/*.cif |
Cached per phase then routed through the existing _load_cif_paths, same code path as manual import |
| Unit cell / space group | manifest | Checked against CIF parsed values: if consistent, pre-fill "Phase Parameter Editor"; if significantly inconsistent (>0.1% / >0.05°), the CIF value takes precedence and a list is shown |
Phases without structure (PDF2-type, or COD archives where no CIF was found) are listed as "reference only": shown in gray, not involved in refinement, with a human-readable reason, and a CIF can be manually specified to fill them in.
The import kernel core/io/xinm_import.py does not depend on Qt and is shared by GUI / CLI / library API; it includes manifest validation, version negotiation (prompts to upgrade if version exceeds supported), zip-bomb protection (512 MB decompression cap), line-by-line CSV parsing with readable errors.
Project file .xinr: self-contained zip container
| Item | v1.0.0 | v1.1.0 |
|---|---|---|
| Form | Plain JSON, stores only external paths | zip: manifest.json + pattern/ + cifs/ + result/ |
| Move to another machine | Useless if files missing | Embeds pattern CSV + CIF + full refinement results by default; can still open and reproduce after moving the original files |
| Results | Stores only R-factor summary | result/refine.json (same schema as CLI --out) + navigation history; opening refills the results panel and convergence curve |
Extension routing: .xinr → container; .xrp → v1.0.0 JSON, permanently read-only compatible.
Also fixes the v1.0.0 .xrp bug that dropped phase_edits (phase parameter edits disappeared after reopening the project).
Library API
capabilities() now returns xinm_import: "1", so consumers can probe the capability bit and decide whether to expose the import entry.
Validation Data
| Item | Result |
|---|---|
| S1 full closed loop (real COD archives 7206075 + 9001681) | .xinm import → refinement Rwp 3.409617019598457, bit-identical to P0 golden; GUI one-click run-all path and "manual import same pattern/CIF" have bit-identical Rwp; save .xinr → delete temp pattern and .xinm → reopen and reproduce (rel 1e-9) |
| Quantification | Two phases 50.03 / 49.97 wt% |
| S2 mixed sources | COD + user CIF packed into cifs/; PDF2 phase structural=false listed as "reference only"; no ICDD-derived file inside the package |
| S3 exception boundaries | Missing CIF member / corrupt zip / missing pattern / version=2 each give readable errors, no crash |
| S4 family registration | XinRefinement.json and XinMatch.json manage their own; registration code algorithm interoperability unchanged |
| Full test suite | 286 all green (259 in v1.0.0; added test_xinm_import.py 13 cases, test_project_zip.py 7 cases, etc.) |
Installation and Registration
Same as v1.0.0: trilingual installer (Simplified Chinese / English / Japanese), {autopf}\XinRefinement; on first launch the release build prompts "unregistered" (can enter registration code); internal evaluation build needs no registration. The registration code is interoperable with the XinMatch family—the same code works for both software.
Build and Binary Acceptance (six rounds)
| Round | Result | Measured |
|---|---|---|
| 1 · Reproducible build | ✅ | Two consecutive builds from the same source, XinRefinement.exe / XinRefinementCLI.exe byte-identical: a2c9fcc80b0f291e… / 7d1ed1ec7efc8642… (SOURCE_DATE_EPOCH + PYTHONHASHSEED=0) |
| 2 · CLI cold start | ✅ | Both variants print XinRefinement 1.1.0, no missing DLLs |
| 3 · CLI end-to-end | ✅ | Both variants refine v50_wide.xy anatase.cif rutile.cif --peak-height → rwp = 3.409617, 2 phases, success = true (synthetic pattern is peak-height basis, so --peak-height is needed; without it, integral basis gives rwp = 5.935965, bit-identical to source) |
| 4 · GUI smoke | 🟡 offscreen pass | Offscreen launch + self-check JSON: release {release, registration_enabled: true, unregistered}, internal {internal, false, internal evaluation build}; double-click visual inspection still needs human |
| 5 · Install/uninstall | ✅ silent | Silent install 606 files → installed --version normal → silent uninstall leaves 0 residue; Chinese install UI needs human visual check. (Installer requires admin by default; non-interactive environment cannot escalate privilege to re-verify; since build is reproducible and setup.exe SHA-256 is byte-identical to last round, last round's conclusion still holds) |
| 6 · Dual-variant difference | ✅ | Tagged release / internal; setting XINREFINEMENT_VARIANT=internal on the release build still reports release (anti-bypass) |
Release artifacts:
| File | Bytes | SHA-256 |
|---|---|---|
XinRefinement-1.1.0-setup.exe |
67,586,555 | 046179e6f3ef45d651b241b41dafb273990b423667bc066e5eba2b3982a44926 |
XinRefinement-internal-1.1.0-portable.zip |
113,946,723 | a9012229b268bae36741bbd7cd9d5782ecf55a814ea907d4b39dded701db09d1 |
Known Notes
- The release build
.xinrembeds CIF and pattern, so the project file is larger than v1.0.0's.xrp(pattern stored as CSV text, ~2 MB per 100k points). Save as.xrpwhen you want the old "store paths only" behavior. .xrpis read-only compatible, not written back: opening an old file and saving again will write JSON or container based on the extension.- The frozen package has no
pyproject.toml; the version comes from the literal constant inxinrefinement/__init__.py(__version__ = "1.1.0"), not from the runtime environment's install metadata. - Not code-signed: on first run Windows SmartScreen may warn "Unknown publisher".
License
Same as v1.0.0: see repository root LICENSE / LICENSE-CN (same source as XinMatch).