# # 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; }