Pilatus-300K, B1, BW4, P03, P09

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

Figure 14.8: Pilatus-300K, P03, P09
Image blscPilatus300KP03

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