The following lines show how a Pilatus100k or Pilatus300k detector is introduced to Online, file name: /online_dir/online.xml
<?xml version="1.0"?>
<hw>
#
#
#
<device>
<name>pilatus</name>
<type>detector</type>
<module>pilatus100k</module>
<device>bw4/pilatus/300k</device>
<control>tango</control>
<hostname>hasb1:10000</hostname>
</device>
</hw>
The module name, pilatus100k, is the same for both device types.
The Tango server can be started only, if the camserver is running:
$ ssh -X det@SomePilatusPc cd /home/det/p2_det ./runtvx camserver stays alive kill the client (the window that contains 'disconnect')
Notice that the state of the Tango server has to be sensed before a StartStandardAcq command is issued. Otherwise the camserver may enter a faulty state. In the case it is not possible to take sequences of frames.
The Perl-Spectra manual describes the Pilatus functions and gives an example of a virtual counter that uses these functions to operate the Pilatus.
The Pilatus detector can be operated as a virtual counter:
if( $method =~ /reset/i)
{
Util::log( "VC5: scan_name $Spectra::SYM{ scan_name}");
Spectra::tng_attrLongWrt( "pilatus", "NbFrames", 1);
Spectra::pilatus_start( "pilatus", $Spectra::SYM{ scan_name},
$Spectra::SYM{ sample_time},
$Spectra::SYM{ sindex},
".tif");
return 1;
}
if( $method =~ /read/i)
{
while( Spectra::tng_state( "pilatus")
{
Util::log( "waiting for Pilatus, state " . Spectra::tng_state( "pilatus"));
Spectra::wait( 0.5);
if( $Spectra::SYM{ interrupt_scan})
{
Util::log( "wait-for-pilatus aborted");
last;
}
}
Util::log( "pilatus state " . Spectra::tng_state( "pilatus");
return 1;
}
At haspp03nano the configuration of the Pilatus detector is done using a script:
#!/bin/env perl
#
# pilatus
#
use Spectra;
my ( $keyword, $value) = @ARGV;
if( !defined( $keyword) )
{
print "\n\n Usage: \n";
print " picfg keyword [value] \n\n";
print " keywords: \n";
print " FileDir \n";
print " FilePrefix \n";
print " DelayTime \n";
print " ExposureTime \n";
print " FileStartNum \n";
print "\n\n";
goto finish;
}
#
# read the attributes
#
if( !defined( $value))
{
if( $keyword =~ /FileDir/i)
{
$result = Spectra::tng_attrStringRd( "pilatus", $keyword);
}
elsif( $keyword =~ /FilePrefix/i)
{
$result = Spectra::tng_attrStringRd( "pilatus", $keyword);
}
elsif( $keyword =~ /FileStartNum/i)
{
$result = Spectra::tng_attrLongRd( "pilatus", $keyword);
}
elsif( $keyword =~ /DelayTime/i)
{
$result = Spectra::tng_attrDoubleRd( "pilatus", $keyword);
}
elsif( $keyword =~ /ExposureTime/i)
{
$result = Spectra::tng_attrDoubleRd( "pilatus", $keyword);
}
print "\n $result \n\n";
}
#
# set the attributes
#
else
{
if( $keyword =~ /FileDir/i)
{
Spectra::tng_attrStringWrt( "pilatus", $keyword, $value);
}
elsif( $keyword =~ /FilePrefix/i)
{
Spectra::tng_attrStringWrt( "pilatus", $keyword, $value);
}
elsif( $keyword =~ /FileStartNum/i)
{
Spectra::tng_attrLongWrt( "pilatus", $keyword, $value);
}
elsif( $keyword =~ /DelayTime/i)
{
Spectra::tng_attrDoubleWrt( "pilatus", $keyword, $value);
}
elsif( $keyword =~ /ExposureTime/i)
{
Spectra::tng_attrDoubleWrt( "pilatus", $keyword, $value);
}
}
finish:
1;
There is another script for the acquisition:
#!/bin/env perl
#
# Pilatus -> VC2
#
use Spectra;
my $status = 1;
my ( $sample_time, $np) = @ARGV;
if( !defined( $sample_time) ||
!defined( $np))
{
print "\n\n Usage: \n\n";
print " piacq sampleTime Np \n";
print "\n\n";
goto finish;
}
if( !defined( $Spectra::SYM{ generic_scan_name}))
{
$Spectra::SYM{ generic_scan_name} = "hasylab";
}
if( $np < 1)
{
Spectra::error("piacq: np < 1");
goto finish;
}
if( $np == 1)
{
$status = Spectra::scan( device => "dummy",
np => $np,
st => $sample_time,
title => "A Pilatus Test Scan",
profile =>
{ timer => [ qw(t01)],
counter => [ qw( p03nano_c01 vc2 ipetra)],
flags => [ qw( write_to_disk 1
display_deadtime 1
bell_on_scan_end 1)],
});
}
else
{
$status = Spectra::scan( device => "dummy",
start => 0,
stop => ($np - 1),
delta => 1,
st => $sample_time,
title => "A Pilatus Test Scan",
profile =>
{ timer => [ qw(t01)],
counter => [ qw( p03nano_c01 vc2 ipetra)],
flags => [ qw( write_to_disk 1
display_deadtime 1
bell_on_scan_end 1)],
});
}
finish:
$status;
The file exp_ini.exp contains symbol assignments that allow the use to invoke the scripts from the command line:
! ! exp_ini.exp ! piacq = "run [~.prog]piacq.pl" picfg = "run [~.prog]picfg.pl"