Take a six circle diffractometer with angles: delta, nu, mu, eta, chi, phi and virtual angles: qaz, naz, psi, alpha, beta. Many combinations of these can be constrained: constrain >>> con nu >>> con psi >>> con mu >>> con nu mu a_eq_b real angles are always constrained to there last set position. If they are too far from here an error will result. >>> pos nu 0 (moves, parameter tracks last set value (actually checks it when hkl moved)) >>> pos psi 90 (does not move, sets parameter in diffcalc) >>> pos mu 0 (moves) >>> pos hkl [1 0 0] (moves based on last set nu, psi, mu) >>> pos betain --> Exception, not constrained moving a virtual angle simply sets it to efftec the next hkl move Here we need onlu con, uncon and pos. ...... However it would be nice to be able to pos betain for example and have it change betain while staying on the same reflection. This might be enabled by locking the the current hkl position. It would be trick to make this work with the physical angles though. >>> lock hkl >>> pos psi 90 (moves immediately) >>> scan psi 0 90 1 (scans, moving immediately) >>> pos mu 0 (does not move immediately) (could work by listening to target positions, and triggering move when complete) >>> pos c(mu) moves >>> pos mu_c moves Only one thing would be varyable at a time unless they are put in a CoordinatedMotionGroup, which would be hard for the real motors)