#!/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;