This commit is contained in:
@@ -16,10 +16,12 @@
|
||||
###################################################################################################
|
||||
|
||||
#1- Create a MontorGroup with the diffractometer motors
|
||||
# e.g named 'sixc', containing mu, delta, gam, eta, chi, phi motors
|
||||
# e.g. 'sixc', containing mu, delta, gam, eta, chi, phi motors
|
||||
# or 'fivec', containing delta, gam, eta, chi, phi motors
|
||||
# or 'fourc', containing delta, eta, chi, phi motors
|
||||
#2- Create positioner to read/set the energy in kEv, e.g. named 'en'
|
||||
#3- Execute: run("diffutils")
|
||||
#4- Execute: setup_sixc(sixc, en)
|
||||
#4- Execute: setup_diff(sixc, en)
|
||||
|
||||
|
||||
from __future__ import absolute_import
|
||||
@@ -29,15 +31,15 @@ import traceback
|
||||
import Jama.Matrix
|
||||
diffcalc_path = os.path.abspath(get_context().setup.expandPath("{script}/Lib/diffcalc"))
|
||||
if not diffcalc_path in sys.path:
|
||||
sys.path.append('/Users/gobbo_a/dev/pshell/config/home/script/Lib/diffcalc')
|
||||
sys.path.append(diffcalc_path)
|
||||
|
||||
import diffcalc
|
||||
from diffcalc import settings
|
||||
from diffcalc.hkl.you.geometry import SixCircle
|
||||
from diffcalc.hkl.you.geometry import SixCircle, FiveCircle, FourCircle
|
||||
from diffcalc.hardware import HardwareAdapter
|
||||
from diffcalc.ub.persistence import UbCalculationNonPersister
|
||||
from diffcalc.gdasupport.minigda.scannable import *
|
||||
from diffcalc.gdasupport.minigda import command
|
||||
from diffcalc.gdasupport.minigda.scannable import ScannableBase, ScannableGroup
|
||||
#from diffcalc.gdasupport.minigda import command
|
||||
from diffcalc.hardware import HardwareAdapter
|
||||
|
||||
|
||||
@@ -54,7 +56,6 @@ import ch.psi.pshell.device.Register as Register
|
||||
# Device mapping to difcalc
|
||||
###################################################################################################
|
||||
class PositionerScannable(ScannableBase):
|
||||
|
||||
def __init__(self, positioner):
|
||||
self.positioner = positioner
|
||||
self.name = positioner.name
|
||||
@@ -79,15 +80,31 @@ class PositionerScannable(ScannableBase):
|
||||
class PositionerScannableGroup(ScannableGroup):
|
||||
def __init__(self, name, motors):
|
||||
self.name = name
|
||||
[mu, delta, gam, eta, chi, phi] = motors
|
||||
self.mu = PositionerScannable(mu)
|
||||
self.delta = PositionerScannable(delta)
|
||||
self.gam = PositionerScannable(gam)
|
||||
self.eta = PositionerScannable(eta)
|
||||
self.chi = PositionerScannable(chi)
|
||||
self.phi = PositionerScannable(phi)
|
||||
ScannableGroup.__init__(self, self.name, [self.mu, self.delta, self.gam, self.eta, self.chi, self.phi])
|
||||
|
||||
if len(motors)==6:
|
||||
[mu, delta, gam, eta, chi, phi] = motors
|
||||
self.mu = PositionerScannable(mu)
|
||||
self.delta = PositionerScannable(delta)
|
||||
self.gam = PositionerScannable(gam)
|
||||
self.eta = PositionerScannable(eta)
|
||||
self.chi = PositionerScannable(chi)
|
||||
self.phi = PositionerScannable(phi)
|
||||
ScannableGroup.__init__(self, self.name, [self.mu, self.delta, self.gam, self.eta, self.chi, self.phi])
|
||||
elif len(motors)==5:
|
||||
[delta, gam, eta, chi, phi] = motors
|
||||
self.delta = PositionerScannable(delta)
|
||||
self.gam = PositionerScannable(gam)
|
||||
self.eta = PositionerScannable(eta)
|
||||
self.chi = PositionerScannable(chi)
|
||||
self.phi = PositionerScannable(phi)
|
||||
ScannableGroup.__init__(self, self.name, [self.delta, self.gam, self.eta, self.chi, self.phi])
|
||||
elif len(motors)==4:
|
||||
[delta, eta, chi, phi] = motors
|
||||
self.delta = PositionerScannable(delta)
|
||||
self.eta = PositionerScannable(eta)
|
||||
self.chi = PositionerScannable(chi)
|
||||
self.phi = PositionerScannable(phi)
|
||||
ScannableGroup.__init__(self, self.name, [self.delta, self.eta, self.chi, self.phi])
|
||||
|
||||
class MotorGroupScannable(PositionerScannableGroup):
|
||||
def __init__(self, motor_group):
|
||||
self.motor_group = motor_group
|
||||
@@ -125,10 +142,10 @@ class ScannableAdapter(HardwareAdapter):
|
||||
|
||||
class MotorGroupAdapter(ScannableAdapter):
|
||||
def __init__(self, diffractometer, energy, energy_multiplier_to_kev=1):
|
||||
self.sixc = MotorGroupScannable(sixc)
|
||||
self.en = PositionerScannable(en)
|
||||
self.en.level = 3
|
||||
ScannableAdapter.__init__(self, self.sixc, self.en, energy_multiplier_to_kev)
|
||||
self.diffractometer = MotorGroupScannable(diffractometer)
|
||||
self.energy = PositionerScannable(energy)
|
||||
self.energy.level = 3
|
||||
ScannableAdapter.__init__(self, self.diffractometer, self.energy, energy_multiplier_to_kev)
|
||||
|
||||
class Wavelength(RegisterBase):
|
||||
def doRead(self):
|
||||
@@ -205,15 +222,30 @@ class HklGroup(RegisterBase, Register.RegisterArray):
|
||||
###################################################################################################
|
||||
you = None
|
||||
dc, ub, hardware, hkl = None, None, None, None
|
||||
#en in kev
|
||||
def setup_sixc(sixc, en):
|
||||
global you, dc, ub, hardware, hkl
|
||||
_motor_group = None
|
||||
def setup_diff(diffractometer, energy):
|
||||
"""
|
||||
diffractometer: Motor group containing:
|
||||
- mu, delta, gam, eta, chi, phi (six circle) or
|
||||
- delta, gam, eta, chi, phi (ficve circle) or
|
||||
- delta, eta, chi, phi (four circle)
|
||||
energy: Positioner having energy in kev
|
||||
"""
|
||||
global you, dc, ub, hardware, hkl, _motor_group
|
||||
_motor_group = diffractometer
|
||||
you =None
|
||||
settings.hardware = MotorGroupAdapter(sixc, en)
|
||||
settings.geometry = SixCircle()
|
||||
if len(diffractometer.motors) == 6:
|
||||
settings.geometry = SixCircle()
|
||||
elif len(diffractometer.motors) == 5:
|
||||
settings.geometry = FiveCircle()
|
||||
elif len(diffractometer.motors) == 4:
|
||||
settings.geometry = FourCircle()
|
||||
else:
|
||||
raise Exception("Invalid motor group")
|
||||
settings.hardware = MotorGroupAdapter(diffractometer, energy)
|
||||
settings.ubcalc_persister = UbCalculationNonPersister()
|
||||
settings.axes_scannable_group = settings.hardware.sixc
|
||||
settings.energy_scannable = settings.hardware.en
|
||||
settings.axes_scannable_group = settings.hardware.diffractometer
|
||||
settings.energy_scannable = settings.hardware.energy
|
||||
settings.ubcalc_strategy = diffcalc.hkl.you.calc.YouUbCalcStrategy()
|
||||
settings.angles_to_hkl_function = diffcalc.hkl.you.calc.youAnglesToHkl
|
||||
from diffcalc.gdasupport import you
|
||||
@@ -242,10 +274,13 @@ def print_axis_setup():
|
||||
# Acceess functions
|
||||
###################################################################################################
|
||||
def get_diff():
|
||||
return settings.hardware.sixc
|
||||
return settings.hardware.diffractometer
|
||||
|
||||
def get_en():
|
||||
return settings.hardware.en
|
||||
return settings.hardware.energy
|
||||
|
||||
def get_motor_group():
|
||||
return _motor_group
|
||||
|
||||
def get_wl():
|
||||
return you.wl
|
||||
@@ -302,7 +337,11 @@ def hklscan(vector, readables,latency = 0.0, passes = 1, **pars):
|
||||
for pos in vector:
|
||||
#print "Writing ", pos
|
||||
hkl_group.write(pos)
|
||||
time.sleep(1.0)
|
||||
time.sleep(0.1) #Make sure is busy
|
||||
get_motor_group().update()
|
||||
get_motor_group().waitReady(-1)
|
||||
time.sleep(latency)
|
||||
hkl_group.update()
|
||||
scan.append ([h.take(), k.take(), l.take()], [h.getPosition(), k.getPosition(), l.getPosition()], [readable.read() for readable in readables ])
|
||||
finally:
|
||||
scan.end()
|
||||
|
||||
Reference in New Issue
Block a user