The code below moves 2 motors in a square. The procedure starts at the current position.
#!/bin/env python
#
"""two motors are moved in a square"""
__all__ = ["squareScans"]
from sardana.macroserver.macro import Macro, Type
class squareScans(Macro):
"""move two motors in a square +- delta, relative to current position"""
param_def = [
[ "mot1", Type.Moveable, None, "the inner loop motor" ],
[ "mot2", Type.Moveable, None, "the outer loop motor" ],
[ "delta", Type.Float, None, "a floating point number" ],
[ "n", Type.Integer, None, "movements: current position +- delta" ],
]
def run(self, mot1, mot2, delta, n):
pos1Old = mot1.getPosition()
pos2Old = mot2.getPosition()
self.mv(mot1, pos1Old - delta)
self.mv(mot2, pos2Old - delta)
for i in range(0, n):
self.mv(mot1, pos1Old - delta, mot2, pos2Old - delta)
self.output( "%d/%d: %s at %g %s at %g" %
(i, n, mot1.getName(), mot1.getPosition(), mot2.getName(), mot2.getPosition()))
self.mv(mot1, pos1Old + delta, mot2, pos2Old - delta)
self.output( "%d/%d: %s at %g %s at %g" %
(i, n, mot1.getName(), mot1.getPosition(), mot2.getName(), mot2.getPosition()))
self.mv(mot1, pos1Old + delta, mot2, pos2Old + delta)
self.output( "%d/%d: %s at %g %s at %g" %
(i, n, mot1.getName(), mot1.getPosition(), mot2.getName(), mot2.getPosition()))
self.mv(mot1, pos1Old - delta, mot2, pos2Old + delta)
self.output( "%d/%d: %s at %g %s at %g" %
(i, n, mot1.getName(), mot1.getPosition(), mot2.getName(), mot2.getPosition()))
self.mv(mot1, pos1Old)
self.mv(mot2, pos2Old)
self.output( "%s at %g %s at %g" %
(mot1.getName(), mot1.getPosition(), mot2.getName(), mot2.getPosition()))