101 lines
3.2 KiB
Python
Executable File
101 lines
3.2 KiB
Python
Executable File
from startup._common_imports import * # @UnusedWildImport
|
|
from diffcalc.hkl.you.constraints import NUNAME
|
|
|
|
if GDA:
|
|
from __main__ import diff1vdelta, diff1halpha, diff1vgamma, diff1homega, dcm1energy # @UnresolvedImport
|
|
|
|
from diffcalc.hkl.you.geometry import YouGeometry, YouPosition,\
|
|
YouRemappedGeometry
|
|
|
|
try:
|
|
from numpy import matrix
|
|
except ImportError:
|
|
from numjy import matrix
|
|
|
|
|
|
class FourCircleI07EH1h(YouRemappedGeometry):
|
|
"""For a diffractometer with angles:
|
|
delta, gam, eta, phi
|
|
"""
|
|
def __init__(self, beamline_axes_transform=None):
|
|
YouRemappedGeometry.__init__(self, 'fourc', {'mu': 0, 'chi': 90}, beamline_axes_transform)
|
|
|
|
# Order should match scannable order in _fourc group for mapping to work correctly
|
|
omega_to_phi = lambda x: 180. - x
|
|
self._scn_mapping_to_int = (('delta', lambda x: x),
|
|
('gam', lambda x: x),
|
|
('eta', lambda x: x),
|
|
('phi', omega_to_phi))
|
|
phi_to_omega = lambda x: ((180. - x) + 180.) % 360 - 180
|
|
self._scn_mapping_to_ext = (('delta', lambda x: x),
|
|
('gam', lambda x: x),
|
|
('eta', lambda x: x),
|
|
('phi', phi_to_omega))
|
|
|
|
### Create dummy scannables ###
|
|
if GDA:
|
|
###map GDA scannable to diffcalc axis name###
|
|
_fourc = ScannableGroup('_fourc', (diff1vdelta, diff1vgamma, diff1halpha, diff1homega))
|
|
delta=_fourc.diff1vdelta
|
|
gam=_fourc.diff1vgamma
|
|
eta=_fourc.diff1halpha
|
|
phi=_fourc.diff1homega
|
|
en=dcm1energy
|
|
if float(en.getPosition()) == 0: # no energy value - dummy mode
|
|
en(800)
|
|
else:
|
|
#Create dummy axes to run outside GDA in IPython#
|
|
delta = Dummy('delta')
|
|
gam = Dummy(NUNAME)
|
|
eta = Dummy('eta')
|
|
phi = Dummy('phi')
|
|
_fourc = ScannableGroup('_fourc', (delta, gam, eta, phi))
|
|
en = Dummy('en')
|
|
en(800)
|
|
|
|
en.level = 3
|
|
|
|
### Configure and import diffcalc objects ###
|
|
ESMTGKeV = 1
|
|
settings.hardware = ScannableHardwareAdapter(_fourc, en, ESMTGKeV)
|
|
settings.geometry = FourCircleI07EH1h() # @UndefinedVariable
|
|
settings.energy_scannable = en
|
|
settings.axes_scannable_group= _fourc
|
|
settings.energy_scannable_multiplier_to_get_KeV = ESMTGKeV
|
|
|
|
# for aliasing completeness
|
|
mu= settings.geometry.fixed_constraints['mu']
|
|
chi= settings.geometry.fixed_constraints['chi']
|
|
from diffcalc.gdasupport.you import * # @UnusedWildImport
|
|
|
|
if GDA:
|
|
print "Running in GDA --- aliasing commands"
|
|
alias_commands(globals())
|
|
|
|
# Load the last ub calculation used
|
|
lastub()
|
|
# Set reference vector direction returning betain and betaout angles as alpha and beta
|
|
if ubcalc.name:
|
|
setnphi('0; 0; 1')
|
|
|
|
### Set i07 specific limits
|
|
def setLimitsAndCuts():
|
|
''' set motor limits for diffcalc, these are within the actual motor limits
|
|
'''
|
|
setmin(delta, -11.275)
|
|
setmax(delta, 100.0)
|
|
setmin(gam, -11.0)
|
|
setmax(gam, 49.934)
|
|
setmin(eta, -5.096)
|
|
setmax(eta, 5.115)
|
|
setcut(phi, -180.0)
|
|
print "Current hardware limits set to:"
|
|
hardware()
|
|
|
|
if not GDA:
|
|
setLimitsAndCuts()
|
|
|
|
# TODO: make demo code for (2+2) diffractometer geometry
|
|
#if not GDA:
|
|
# demo = startup._demo.Demo(globals(), 'fourc')
|