#!/bin/env perl
use strict;
use Spectra;
sub test_abort
{
my $status = 0;
my $k = Spectra::key();
if( $k == 32)
{
$status = 1;
goto finish;
}
if( Spectra::flag( "perltk"))
{
#
# ... we call the refresh routine to look whether
# the user pressed the Stop button
#
Util::refresh();
#
# Util::refresh() take some time, if many motor positions are updated.
# The following call is fast because it updates the Stop button
# of the toplevel widget only.
#
Util::update_toplevel_stop_button();
}
if( $Spectra::SYM{ flag_tki_stop})
{
$status = 1;
goto finish;
}
$Spectra::SYM{ flag_tki_stop} = 0;
return $status;
}
sub _mylog
{
my ( $string) = @_;
Util::log( $string);
Spectra::log( $string);
}
my $sample_time = 2;
my @capillary_pos = ( 0.01, -0.13);
my @sdd_positions_x = ( 270, 260, 250);
my @sdd_positions_z = ( 2600, 2500, 2400);
_mylog( ">>> p02_demo START");
my $total = scalar( @sdd_positions_x);
foreach my $i ( 0 .. ( $total - 1))
{
my $sdd_pos_x = $sdd_positions_x[$i];
my $sdd_pos_z = $sdd_positions_z[$i];
my $j = $i + 1;
_mylog( "> sdd to x $sdd_pos_x, z $sdd_pos_z, $j/$total");
if( !Spectra::move( "eh1b_mot16" => $sdd_pos_x))
{
goto finish;
}
Spectra::gra_command( "sdd $sdd_pos_z");
_mylog( "collect $sample_time (Dark)");
Spectra::gra_command( "collect_pe $sample_time 1");
if( !Spectra::wait( 1.))
{
_mylog( " script aborted");
goto finish;
}
foreach my $pos ( @capillary_pos)
{
_mylog( "moving eh1a_mot13 to $pos ");
if( !Spectra::move( "eh1a_mot13" => $pos))
{
goto finish;
}
if( !Spectra::wait( 1.))
{
_mylog( " script aborted");
goto finish;
}
_mylog( "collect $sample_time");
Spectra::gra_command( "collect_pe $sample_time");
if( !Spectra::wait( 1.))
{
_mylog( " script aborted");
goto finish;
}
if( test_abort())
{
_mylog( " script aborted");
goto finish;
}
}
}
_mylog( "<<< p02_demo DONE");
finish:
$Spectra::SYM{ flag_tki_stop} = 0;
1;