esrf

Beamline Instrument Software Support
SPEC Macro documentation: [ Macro Index | BCU Home ]


def rockit '{
  local motmne motnum totmov
  local start_pos stop_pos
  local start_steps stop_steps
  global ROCKINIT[]

  if ($# !=2) {
    print "usage: $0 <motor_mne> <tot_move (centered at this point)>"
    exit
  }

  motmne = "$1"
  totmov = $2

  if (list_n(ROCKINIT) <= 0) {
    list_init ROCKIT
  }

  if(_icepap_ismot(motmne)) { 
    _icepap_err
    print "Not an IcePAP motor"
    exit 
  }
  motnum = motor_num(motmne)

  waitmove
  get_angles

  list_add(ROCKINIT, motmne)
  ROCKINIT[motmne]["pos"] = A[motnum]
  ROCKINIT[motmne]["tot"] = totmov

  start_pos = ROCKINIT[motmne]["pos"]-(totmov/2)
  stop_pos = ROCKINIT[motmne]["pos"]+(totmov/2)

  printf("Rocking %s from %f to %f\n", \
	motmne, start_pos, stop_pos)
  
  printf("Moving to start position\n")
  umv motmne start_pos

  start_steps = dial(motnum, start_pos) * motor_par(motnum, "step_size")
  stop_steps = dial(motnum, stop_pos) * motor_par(motnum, "step_size")

  printf("Start rocking motor\n")
  _poslistsetup(motnum, "CYCLIC", start_steps, stop_steps, 2)
  sleep(0.1)
  _poslisttrackon(motnum, "TRIGGER")
  printf("Stop using \"rockstop %s\"\n", motmne)
}'

def rockstop '{
  local motmne motnum motpos
  if ($# != 1) {
    print "usage: $0 <motor_mne>"
    exit
  }
  motmne = "$1"
  motnum = motor_num(motmne)

  if(_icepap_ismot(motmne)) { 
    _icepap_err
    print "Not an IcePAP motor"
    exit 
  }

  printf("Stop rocking\n")
  _poslisttrackoff(motnum)
  sleep(2)

  if (list_item(ROCKINIT, motmne) != -1) {
    motpos = ROCKINIT[motmne]["pos"]
    printf("Moving back to original position=%g\n", motpos)
    umv motmne motpos
  } else {
    printf("No initial position stored for %s !!\n", motmne)
  }
  list_remove(ROCKINIT, motmne)
}'

def rocklist '{
  local idx nmot motmne

  nmot= list_n(ROCKINIT)
  if (!nmot) {
    printf("No motors rocking.\n")
  } else {
    for (idx= 1; idx <= nmot; idx++) {
      motmne= list_item(ROCKINIT, idx)
      printf("%8.8s : rocking %g around position %g\n", motmne, \
             ROCKINIT[motmne]["tot"], ROCKINIT[motmne]["pos"])
    }
  }
}'