Skip to content

Commit 680fdea

Browse files
committed
Align plan Phase 2 wording with final verification behaviour
1 parent 7cec05a commit 680fdea

1 file changed

Lines changed: 21 additions & 12 deletions

File tree

docs/dev/plans/preferred-orientation-category.md

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,21 @@ created. Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`,
4343
`_pd_pref_orient_March_Dollase.*` export; `march_random_fract`
4444
namespaced under `_easydiffraction_pref_orient.march_random_fract` and
4545
omitted from the report when 0; `.hkl`/`.fract` excluded.
46-
- **Known backend limitation (ADR Decision 6):** CrysPy 0.11.0's texture
46+
- **CrysPy convention (ADR Decision 6):** CrysPy 0.11.0's texture
4747
function uses a reciprocal `g1 = 1/r` convention (handled by the
4848
backend) and is not volume-normalised (absorbed by scale), so the
4949
exposed `march_r` is the standard, portable March coefficient. The
50-
verification notebook **documents this mismatch** rather than
51-
asserting agreement.
50+
verification notebook documents this convention and, after refining
51+
`march_r`/`march_random_fract`/scale, **asserts agreement** with
52+
FullProf within the closeness tolerances.
5253

5354
## Open questions
5455

55-
- None blocking. The CrysPy formula divergence is documented and an
56-
upstream issue is staged in `tmp/cryspy/preferred-orientation/`; this
57-
plan does not depend on its resolution.
56+
- None blocking. CrysPy's reciprocal/non-normalised convention is
57+
documented (Decision 6) and handled by the backend mapping; a
58+
convention note for upstream is staged in
59+
`tmp/cryspy/preferred-orientation/`. This plan does not depend on its
60+
resolution.
5861

5962
## No new dependencies
6063

@@ -243,17 +246,23 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/
243246
### Cross-engine verification notebook (on the LBCO base)
244247

245248
1. Copy `docs/docs/verification/fullprof/pd-neut-cwl_pv_lbco/lbco.pcr`,
246-
enable a single March–Dollase direction (texture axis via the phase
247-
`Pr1 Pr2 Pr3` line and a non-zero `Pref1`), re-run FullProf locally
248-
(`~/Applications/fullprof`) to regenerate `.prf`/`.bac`/`.sum` under
249+
enable the March–Dollase model (`Nor=1`) along the phase
250+
`Pr1 Pr2 Pr3` direction with non-zero `Pref1` **and** `Pref2` (the
251+
reference uses `Pref1=1.2`, `Pref2=0.3`, axis `[0 0 1]`), re-run
252+
FullProf locally (`~/Applications/fullprof`) to regenerate
253+
`.prf`/`.bac`/`.sum` under
249254
`docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/`.
250255
2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building
251256
the same LBCO model, setting
252257
`expt.preferred_orientation.create(phase_id='lbco', march_r=<Pref1>, march_random_fract=<Pref2>, index_h=<h>, index_k=<k>, index_l=<l>)`,
253258
and overlaying CrysPy vs FullProf. Compare CrysPy-only (no CrysFML
254-
column, since PO is CrysPy-only). Add a markdown cell explaining the
255-
CrysPy formula difference (link the upstream issue): expect agreement
256-
at `r=1` and a quantified divergence for `r ≠ 1`.
259+
column, since PO is CrysPy-only). Add a markdown cell documenting
260+
CrysPy's convention — it uses the reciprocal `g1 = 1/r` (the backend
261+
inverts the standard `march_r`) and a non-volume-normalised factor
262+
that the scale absorbs, so the as-calculated pattern shows an overall
263+
offset. Then refine `march_r`, `march_random_fract`, and the scale:
264+
the refined CrysPy result recovers `Pref1`/`Pref2` and agrees with
265+
FullProf within the verification tolerances.
257266
3. `pixi run notebook-prepare` to regenerate the `.ipynb`; commit source
258267
`.py` + generated `.ipynb` + FullProf reference together.
259268

0 commit comments

Comments
 (0)