The following script uses SSA to align 8 motors.
#!/usr/bin/env perl
use strict;
my $status = 1;
#
# 8 motors are aligned, one after the other,
# the @motors array defines the sequence
#
my @motors = qw( exp_mot01 exp_mot02 exp_mot03 exp_mot04
exp_mot05 exp_mot06 exp_mot07 exp_mot08);
my %ranges = ( exp_mot01 => 1.1,
exp_mot02 => 1.2,
exp_mot03 => 1.3,
exp_mot04 => 1.4,
exp_mot05 => 1.5,
exp_mot06 => 1.6,
exp_mot07 => 1.7,
exp_mot08 => 1.8,
);
my $np = 51;
my $st = 0.1; # sample time
foreach my $mot ( @motors)
{
my $pos = Spectra::gmup( $mot);
Util::log( "aligning $mot, range $ranges{$mot}, now at $pos ");
if( !Spectra::scan( type => "motor",
device => $mot,
range => $ranges{$mot},
np => $np,
st => $st,
comment => "Aligning $mot, range $ranges{$mot}",
ssa => 1,
#
# auto_return: 2 - midpoint, 3 - cms, 4 - peak
#
auto_return => 2,
#
# the device selection by 'profile' is valid only
# this scan function
#
profile =>
{
timer => [ qw( exp_t01)],
counter => [ qw( vc17)]
}))
{
$status = Spectra::error( " Failed to align $mot");
goto finish;
}
my $pos = Spectra::gmup( $mot);
Util::log( "aligning $mot, DONE, now at $pos ");
}
finish:
$status;