psic — Eulerian Six-Circle, 4S+2D (You 1999)#
You (1999) 4S+2D six-circle diffractometer. Four sample stages (mu, eta, chi, and phi) and two detector stages (nu, delta). Transverse detector, vertical scattering plane. Standard synchrotron six-circle.
Coordinate basis: You (1999) (BASIS_YOU): vertical=+x, longitudinal=+y, transverse=+z.
Quick start#
import ad_hoc_diffractometer as ahd
g = ahd.presets.psic()
g.wavelength = 1.0 # Å
print(g.summary())
Pre-built geometry definition#
This geometry is defined by the psic() 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 (+x) |
right-handed |
base |
|
−transverse (−z) |
left-handed |
|
|
+longitudinal (+y) |
right-handed |
|
|
−transverse (−z) |
left-handed |
|
Detector stages (base first):
Stage |
Axis |
Handedness |
Parent |
|---|---|---|---|
|
+vertical (+x) |
right-handed |
base |
|
−transverse (−z) |
left-handed |
|
Diffraction modes#
Set the active mode with g.mode_name = "<mode>".
Each mode is a ConstraintSet of 3 constraints
(N − 3 = 3 for N = 6 DOF).
See Switch Diffraction Modes for usage and Work with Constraints and Diffraction Modes for
changing constraint values at run time.
Bisect pairs:
Vertical plane: eta (transverse) ↔ delta (transverse) →
eta = delta/2Horizontal plane: mu (vertical) ↔ nu (vertical) →
mu = nu/2
bisecting_vertical (default)#
BisectConstraint + SampleConstraint + DetectorConstraint:
eta = delta/2, mu = 0, nu = 0.
Vertical scattering plane bisecting condition (You 1999, §5.3).
Computed |
eta, chi, phi, delta |
Constant during |
mu = 0, nu = 0 |
fixed_phi_vertical#
phi held at declared value (default 0°), eta = delta/2, nu = 0.
Computed |
eta, chi, delta |
Constant during |
phi, mu = 0, nu = 0 |
fixed_chi_vertical#
chi held at declared value (default 90°), eta = delta/2, nu = 0.
The caller chooses the chi value by constructing a ConstraintSet — see Work with Constraints and Diffraction Modes.
Computed |
eta, phi, delta |
Constant during |
chi, mu = 0, nu = 0 |
fixed_mu_vertical#
mu held at declared value (default 0°), eta = delta/2, nu = 0.
Computed |
eta, chi, phi, delta |
Constant during |
mu, nu = 0 |
fixed_nu_vertical#
nu held at declared value (default 0°), eta = delta/2, mu = 0.
Computed |
eta, chi, phi, delta |
Constant during |
nu, mu = 0 |
fixed_alpha_i_vertical#
Incidence angle α_i fixed at declared value (default 0°) in the
vertical scattering plane.
Set g.surface_normal = (h, k, l) before calling forward().
Computed |
eta, chi, phi, delta |
Constant during |
mu = 0, nu = 0 |
Extras (input) |
n̂ (surface normal) |
fixed_beta_out_vertical#
Exit angle β_out fixed at declared value (default 0°) in the
vertical scattering plane.
Set g.surface_normal = (h, k, l) before calling forward().
Computed |
eta, chi, phi, delta |
Constant during |
mu = 0, nu = 0 |
Extras (input) |
n̂ (surface normal) |
alpha_eq_beta_vertical#
Symmetric reflection: α_i = β_out in the vertical scattering plane.
Set g.surface_normal = (h, k, l) before calling forward().
Computed |
eta, chi, phi, delta |
Constant during |
mu = 0, nu = 0 |
Extras (input) |
n̂ (surface normal) |
fixed_psi_vertical#
Vertical bisecting with azimuthal angle ψ validation.
Set g.azimuthal_reference = (h, k, l) before calling forward().
The solver returns bisecting solutions only when the natural ψ for the
requested (h,k,l) matches the stored target. See Surface Geometry and the Reference Vector.
Computed |
eta, chi, phi, delta |
Constant during |
mu = 0, nu = 0 |
Extras (input) |
n̂ (reference vector), ψ (target azimuth, degrees) |
Extras (output) |
psi (computed azimuth) |
double_diffraction_vertical#
Full 4D simultaneous solver in the vertical scattering plane: finds motor
angles where both the primary (h₁,k₁,l₁) and secondary (h₂,k₂,l₂)
reflections satisfy the Ewald sphere condition. Set
mode.extras['h2'], ['k2'], ['l2'] before calling forward().
Computed |
eta, chi, phi, delta |
Constant during |
mu = 0, nu = 0 |
Extras (input) |
h₂, k₂, l₂ (secondary reflection Miller indices) |
bisecting_horizontal#
BisectConstraint + SampleConstraint + DetectorConstraint:
mu = nu/2, eta = 0, delta = 0.
Horizontal scattering plane bisecting condition (You 1999, §5.1).
Computed |
mu, chi, phi, nu |
Constant during |
eta = 0, delta = 0 |
fixed_phi_horizontal#
phi held at declared value (default 0°), mu = nu/2, delta = 0.
Computed |
mu, chi, nu |
Constant during |
phi, eta = 0, delta = 0 |
fixed_chi_horizontal#
chi held at declared value (default 90°), mu = nu/2, delta = 0.
Computed |
mu, phi, nu |
Constant during |
chi, eta = 0, delta = 0 |
fixed_eta_horizontal#
eta held at declared value (default 0°), mu = nu/2, delta = 0.
Computed |
mu, chi, phi, nu |
Constant during |
eta, delta = 0 |
fixed_delta_horizontal#
delta held at declared value (default 0°), mu = nu/2, eta = 0.
Computed |
mu, chi, phi, nu |
Constant during |
delta, eta = 0 |
fixed_alpha_i_horizontal#
Incidence angle α_i fixed at declared value (default 0°) in the
horizontal scattering plane.
Set g.surface_normal = (h, k, l) before calling forward().
Computed |
mu, chi, phi, nu |
Constant during |
eta = 0, delta = 0 |
Extras (input) |
n̂ (surface normal) |
fixed_beta_out_horizontal#
Exit angle β_out fixed at declared value (default 0°) in the
horizontal scattering plane.
Set g.surface_normal = (h, k, l) before calling forward().
Computed |
mu, chi, phi, nu |
Constant during |
eta = 0, delta = 0 |
Extras (input) |
n̂ (surface normal) |
alpha_eq_beta_horizontal#
Symmetric reflection: α_i = β_out in the horizontal scattering plane.
Set g.surface_normal = (h, k, l) before calling forward().
Computed |
mu, chi, phi, nu |
Constant during |
eta = 0, delta = 0 |
Extras (input) |
n̂ (surface normal) |
fixed_psi_horizontal#
Horizontal bisecting with azimuthal angle ψ validation.
Set g.azimuthal_reference = (h, k, l) before calling forward().
Computed |
mu, chi, phi, nu |
Constant during |
eta = 0, delta = 0 |
Extras (input) |
n̂, ψ |
Extras (output) |
psi |
double_diffraction_horizontal#
Full 4D simultaneous solver in the horizontal scattering plane.
Computed |
mu, chi, phi, nu |
Constant during |
eta = 0, delta = 0 |
Extras (input) |
h₂, k₂, l₂ (secondary reflection Miller indices) |
lifting_detector_phi#
Out-of-plane mode: phi and mu frozen, nu and delta solved via the qaz
constraint (tan(qaz) = tan(delta) / sin(nu), You 1999 eq. 18).
qaz = 90° constrains the scattering to the vertical plane.
Computed |
phi, nu, delta |
Constant during |
phi = 0, mu = 0 |
lifting_detector_mu#
Out-of-plane mode: mu and eta frozen, nu and delta solved via the qaz
constraint (tan(qaz) = tan(delta) / sin(nu), You 1999 eq. 18).
qaz = 90° constrains the scattering to the vertical plane.
Computed |
mu, nu, delta |
Constant during |
mu = 0, eta = 0 |
API reference#
References#
You, J. Appl. Cryst. 32, 614–623 (1999). DOI: 10.1107/S0021889899001223
Walko, Ref. Module Mater. Sci. Mater. Eng. (2016).