docs: name the beam parameter as the PONI and state the laboratory frame

Section 1.1 called (x_beam, y_beam) the direct-beam position while constructing
it as the point of normal incidence; on a tilted detector the two differ by
D*tan(tilt), and a reader loading a header direct beam into it would be wrong by
several pixels. Name it as the PONI (the system-wide convention,
DETECTOR_GEOMETRY.md), say which point the construction pins, and state the
laboratory frame's axes and handedness, which the rotation-sign, R-centring and
Bijvoet-hand discussions all silently depended on. Two-theta is computed as a
two-argument arctangent; say so.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EFEJG6WBQv8th4UJFNe53N
This commit is contained in:
2026-09-02 09:18:36 +02:00
co-authored by Claude Opus 5
parent d3879d0112
commit 694e687fce
+7 -3
View File
@@ -107,7 +107,7 @@ bright.
For a pixel coordinate $(x,y)$ (in pixels), Jungfraujoch converts to a laboratory direction vector via:
1. shift by direct-beam position $(x_\mathrm{beam}, y_\mathrm{beam})$,
1. shift by the beam-centre pixel $(x_\mathrm{beam}, y_\mathrm{beam})$ — the **PONI**, pyFAI's point of normal incidence, which coincides with the direct-beam impact point only for an untilted detector (see [Detector geometry](DETECTOR_GEOMETRY.md)),
2. scale by pixel size $p$ (mm),
3. set detector distance $D$ (mm),
4. apply detector orientation rotation $R_\mathrm{det}$ (PyFAI-like parameterization).
@@ -127,6 +127,8 @@ $
\mathbf{r}_\mathrm{lab} = R_\mathrm{det}\,\mathbf{r}_\mathrm{det}.
$
By this construction $(x_\mathrm{beam}, y_\mathrm{beam})$ maps to $(0,0,D)$ *before* the rotation — the point the detector normal through the sample meets — which is what makes it the PONI rather than the direct beam; the two differ by $D\tan(\mathrm{tilt})$ on a tilted detector. The laboratory frame is fixed the same way everywhere in the system: $+z$ along the beam propagation, $+x$ along increasing pixel **column** (the fast axis) and $+y$ along increasing pixel **row** (the slow axis) — a right-handed triple that coincides with XDS's laboratory frame, which is what makes the geometry echo of [rugnux](RUGNUX.md#comparing-the-geometry-with-xds) directly comparable. The absolute hand of an indexing — and with it the Bijvoet hands of §14.5–§14.6 — follows from this convention.
Let the incident wavevector magnitude be $k = 1/\lambda$ in Å$^{-1}$, and define:
$
\mathbf{S}_0 = (0,0,k).
@@ -143,9 +145,11 @@ This $\mathbf{s}$ is the fundamental quantity used for spot finding (resolution
The scattering angle $2\theta$ is computed from $\mathbf{r}_\mathrm{lab}$ via:
$
2\theta = \arctan\!\left(\frac{\sqrt{x_\mathrm{lab}^2 + y_\mathrm{lab}^2}}{z_\mathrm{lab}}\right).
2\theta = \mathrm{atan2}\!\left(\sqrt{x_\mathrm{lab}^2 + y_\mathrm{lab}^2},\; z_\mathrm{lab}\right),
$
evaluated as a two-argument arctangent, so the mapping stays correct where a strongly tilted detector's far corner reaches past $2\theta = 90°$.
Resolution (Å) at a pixel is:
$
d = \frac{\lambda}{2\sin\theta}.
@@ -311,7 +315,7 @@ The profile reports both the mean $\bar{I}_b = S_b / N_b$ (when $N_b>0$) and a p
Two standard corrections are available:
**(i) Solid angle / geometric correction.** A flat pixel's solid angle falls off with the **incidence angle $\alpha$ between the scattered ray and the detector normal**. With the in-plane detector offsets $u=(x-x_\mathrm{beam})p$ and $v=(y-y_\mathrm{beam})p$ (§1.1) and detector distance $D$,
**(i) Solid angle / geometric correction.** A flat pixel's solid angle falls off with the **incidence angle $\alpha$ between the scattered ray and the detector normal**. With the in-plane detector offsets $u=(x-x_\mathrm{beam})p$ and $v=(y-y_\mathrm{beam})p$ — measured from the PONI (§1.1), which is what the tilt-invariance below rests on — and detector distance $D$,
$
\cos\alpha = \frac{D}{\sqrt{u^2+v^2+D^2}},\qquad
C_\Omega = \cos^3\alpha,