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()))