#
# the following lines are part of /online_dir/TkIrc.pl
#
$Spc::res_h{ blsc} = "pilatus";
#
#
#
$Spc::res_h{ pilatus_title} = { text => "Pilatus-X300K"};
$Spc::res_h{ "pilatus_io1"} = {
label => { name => "ExposureTime [s]",
get => sub { Spectra::tng_attrDoubleRd( "pilatus", "ExposureTime");},
unit => ""},
entry => { set => sub { while(Spectra::tng_state( "pilatus") == 10) # Wait Pilatus to finish
{
Spectra::wait(0.1);
}
Spectra::tng_state( "pilatus");
Spectra::tng_attrDoubleWrt( "pilatus", "ExposureTime", $_[0]);}}};
$Spc::res_h{ "pilatus_io2"} = {
label => { name => "ExposurePeriod [s]",
get => sub { Spectra::tng_attrDoubleRd( "pilatus", "ExposurePeriod");},
unit => ""},
entry => { set => sub { while(Spectra::tng_state( "pilatus") == 10) # Wait Pilatus to finish
{
Spectra::wait(0.1);
}
Spectra::tng_state( "pilatus");
Spectra::tng_attrDoubleWrt( "pilatus", "ExposurePeriod", $_[0]);}}};
$Spc::res_h{ "pilatus_io3"} = {
label => { name => "NbFrames",
get => sub { Spectra::tng_attrLongRd( "pilatus", "NbFrames");}}};
$Spc::res_h{ "pilatus_io4"} = {
label => { name => "FileDir",
width => 30,
get => sub { my $ret = Spectra::tng_attrStringRd( "pilatus", "FileDir");}}};
$Spc::res_h{ "pilatus_io5"} = {
label => { name => "FilePrefix",
get => sub { my $ret = Spectra::tng_attrStringRd( "pilatus", "FilePrefix");
return $ret;},
unit => ""},
entry => { set => sub { while(Spectra::tng_state( "pilatus") == 10) # Wait Pilatus to finish
{
Spectra::wait(0.1);
}
Spectra::tng_state( "pilatus");
Spectra::tng_attrStringWrt( "pilatus", "FilePrefix", $_[0]);}}};
$Spc::res_h{ "pilatus_io5"} = {
label => { name => "FilePostfix",
get => sub { my $ret = Spectra::tng_attrStringRd( "pilatus", "FilePostfix");
# $ret =~ s/^\s*(.*?)\s*$/$1/;
return $ret;}, #}};
unit => ""},
entry => { set => sub { while(Spectra::tng_state( "pilatus") == 10) # Wait Pilatus to finish
{
Spectra::wait(0.1);
}
Spectra::tng_state( "pilatus");
Spectra::tng_attrStringWrt( "pilatus", "FilePostfix",$_[0] );}}};
$Spc::res_h{ "pilatus_io6"} = {
label => { name => "FileStartNum",
get => sub { my $ret = Spectra::tng_attrLongRd( "pilatus", "FileStartNum");
return $ret;},
unit => ""},
entry => { set => sub { while(Spectra::tng_state( "pilatus") == 10) # Wait Pilatus to finish
{
Spectra::wait(0.1);
}
Spectra::tng_state( "pilatus");
Spectra::tng_attrLongWrt( "pilatus", "FileStartNum", $_[0]);}}};
$Spc::res_h{ "pilatus_io7"} = {
label => { name => "State",
get => sub { my $ret = Spectra::tng_state( "pilatus");}}};
$Spc::res_h{ "pilatus_io8"} = {
label => { name => "Threshold [eV]",
get => sub { Spectra::tng_attrLongRd( "pilatus", "Threshold");},
unit => ""},
entry => { set => sub { while(Spectra::tng_state( "pilatus") == 10) # Wait Pilatus to finish
{
Spectra::wait(0.1);
}
Spectra::tng_state( "pilatus");
Spectra::tng_attrLongWrt( "pilatus", "Threshold", $_[0]);}}};
$Spc::res_h{ pilatus_b1} = { name => "Start", #Wait for pilatus to stop before starting
command => sub { while(Spectra::tng_state( "pilatus") == 10)
{
Spectra::wait(0.1);
}
Spectra::tng_inout( "pilatus", "StartStandardAcq");}};
$Spc::res_h{ pilatus_b2} = { name => "Stop",
command => sub { Spectra::tng_inout( "pilatus", "StopAcq");}};
$Spc::res_h{ pilatus_b3} = { name => "Reset",
command => sub { Spectra::tng_inout( "pilatus", "Reset");}};
$Spc::res_h{ pilatus_b4} = { name => "Restart Server",
command => sub { Util::log( "Restart Server");}};
The virtual counter that operates the Pilatus needs the following lines:
if( $method =~ /reset/i)
{
Spectra::tng_attrLongWrt( "pilatus", "NbFrames", 1);
Spectra::pilatus_start( $Spectra::SYM{ scan_name},
$Spectra::SYM{ sample_time},
$Spectra::SYM{ sindex},
".cbf");
return 1;
}
if( $method =~ /read/i)
{
while( Spectra::pilatus_state())
{
Util::log( "waiting for Pilatus ");
Spectra::wait( 0.5);
}
Util::log( "pilatus state " . Spectra::pilatus_state());
return 1;
}