#!/usr/env perl use strict; use Spectra; use GQE; use Motor; my $ret; # global variables my $pos; my $dstart; my $dend; my $status = 1; if ( $ARGV[0] eq "help" ) { print "\n\n"; print " This script is used to scan position of a motor, \n"; print " one pilatus image will be obtained: start and end \n"; print " positions are given relative to the starting point; \n"; print " motor returns to the starting point of the scan after scan!\n\n"; print " Usage:\n\n"; print " plup motor_name relativemove_start relativemove_stop exp_time"; print "\n\n\n"; $status = 0 ; goto finish ; } if( !defined( $Spectra::SYM{ generic_scan_name})) { $Spectra::SYM{ generic_scan_name} = "hasylab"; } my $sname = Spectra::create_scan_name(); print "scan name $sname \n"; # # write some info to online.log # Spectra::log( "scan name $sname"); my $scan_number = -1; if( $sname =~ /(.+?)_0*(\d+)/) { $scan_number = $2; } if( $scan_number == -1) { Spectra::error( "shotrot_new:: trouble finding scan_number"); exit 0; } my $motor_name = "exp_mot01"; Spectra::amove( $motor_name => 20); # # at this place you might want to start a detector # while( Spectra::cm( $motor_name)) { print "$motor_name " . Spectra::gmup( $motor_name) . "\n"; # # here you might want to check the detector state # } Spectra::complete_move( $motor_name); while( Spectra::cm( $motor_name)) { Spectra::wait( 0.1); } # # the preceeding complete-move is not necessay, if you # go back to some position with a synchronous move anyway # Spectra::move( $motor_name => 0); print "the scan number is $scan_number \n"; Spectra::gra_command( "create/scan $sname 0 1 1"); $Spectra::SYM{ scan_name} = $sname; Spectra::Write_fio( scan => 1, motors => 1, file => $sname); Spectra::deactivate(); Spectra::cleanup(); finish: $status;