kappa4ch — Kappa Four-Circle (Laboratory)#
Four-circle kappa diffractometer, horizontal scattering plane. Kappa axis tilted at α = 50° from the outer komega axis (which here is along the −vertical direction) toward the equivalent Eulerian chi axis. Laboratory convention.
Walko (2016) designation: S3D1 (kappa)
Coordinate basis: Busing & Levy (BASIS_BL): transverse=+x, longitudinal=+y, vertical=+z.
Quick start#
import ad_hoc_diffractometer as ahd
g = ahd.presets.kappa4ch()
g.wavelength = 1.0 # Å
print(g.summary())
Pre-built geometry definition#
This geometry is defined by the kappa4ch() factory
function — see the source for the complete stage
and mode configuration.
Stage layout#
Static fallback (click to expand if the interactive figure above is blank)
Sample stages (base first):
Stage |
Axis |
Handedness |
Parent |
|---|---|---|---|
|
−vertical (−z BL) |
left-handed |
base |
|
−z · cos α + ŷ · sin α (α = 50°) |
right-handed |
|
|
−vertical (−z BL) |
left-handed |
|
Detector stages (base first):
Stage |
Axis |
Handedness |
Parent |
|---|---|---|---|
|
−vertical (−z BL) |
left-handed |
base |
The kappa axis is computed by
kappa_axis_from_eulerian() from the
preset’s actual komega and equivalent Eulerian chi axes:
This formulation is geometry-aware and is correct for the
kappa4ch komega = -VERTICAL orientation. See the
kappa4cv documentation and issue #241
for the reasons this differs from the textbook
vertical · cos α + transverse · sin α formula.
Virtual Eulerian angles omega, chi, phi are mapped
to / from the real motors via the geometry-aware decomposition in
eulerian_to_kappa_axes() and
kappa_to_eulerian_axes().
Diffraction modes#
Each mode is a ConstraintSet of 1 constraint
(N − 3 = 1 for N = 4 DOF).
Identical mode set to kappa4cv — Kappa Four-Circle (Synchrotron).
See Switch Diffraction Modes for usage and Work with Constraints and Diffraction Modes for
changing constraint values at run time.
bisecting (default)#
VirtualBisectConstraint:
omega_virtual = ttheta / 2 enforced on the virtual Eulerian
omega pseudoangle. Solved via the geometry-aware
eulerian_to_kappa_axes()
decomposition (issue #241).
Computed |
komega, kappa, kphi, ttheta |
Constant during |
— |
fixed_kphi#
SampleConstraint:
kphi held at declared value (default 0°) — real stage, no kappa inversion needed.
Computed |
komega, kappa, ttheta |
Constant during |
kphi |
fixed_omega#
Fix virtual Eulerian omega at declared value (default 0°) — see kappa4cv — Kappa Four-Circle (Synchrotron) for details.
Computed |
komega, kappa, kphi, ttheta |
Constant during |
omega (virtual) |
fixed_chi#
Fix virtual Eulerian chi at declared value (default 90°).
Computed |
komega, kappa, kphi, ttheta |
Constant during |
chi (virtual) |
fixed_phi#
Fix virtual Eulerian phi at declared value (default 0°).
Computed |
komega, kappa, kphi, ttheta |
Constant during |
phi (virtual) |
fixed_psi#
ReferenceConstraint:
azimuthal angle ψ validation filter.
Set g.azimuthal_reference = (h, k, l) before calling forward().
Returns bisecting solutions only when the natural ψ for (h,k,l) matches
the stored target. See Surface Geometry and the Reference Vector.
Extras (input) |
n̂ (reference vector), ψ (target azimuth, degrees) |
Extras (output) |
psi (computed azimuth) |
API reference#
References#
ITC Vol. C §2.2.6 (2006). DOI: 10.1107/97809553602060000577
Walko, Ref. Module Mater. Sci. Mater. Eng. (2016), eq. [16].