The MAR CCD can be operated as a virtual counter (online -tki). The contributions of Martin Dommach (Perl, client programming) and Edgar Weckert (implementing the state history) are aknowledged.
if( $method =~ /reset/i)
{
Spectra::marccd_abort();
return 0 if( !Spectra::marccd_start());
return Spectra::marccd_open_shutter();
}
if( $method =~ /read/i)
{
return 0 if( !Spectra::marccd_close_shutter());
return 0 if( !Spectra::marccd_readout());
return 0 if( !Spectra::marccd_correct());
my $fname = $Spectra::SYM{ scan_name} . "_" . $Spectra::SYM{ sindex};
return Spectra::marccd_writefile( $fname);
}
Online decodes the symbol MARCCD_HOST when it opens the
connection on port 2002. Immediately after the open Online
sends the string abort\012 to ensure that the CCD is
in a known state.
To operate the MarCCD the server has to be started:
/home/marccd/bin/linux/marccd
It is important to take a background image first. Otherwise the correct() function causes a program crash. The remote control is enabled by 'Acquire' - 'Remote' - 'Start'.
Note that the chapter 'Beamline specific code' in Online -Tki manual contains an example that demonstrates how the MAR-CCD can be operated by a widget.
Here is a list of available functions:
Spectra::marccd_abort()
sends "abort\012"
Spectra::marccd_get_state()
sends "get_state\012"
returns (depending on the version):
IDLE 0
ACQUIRE 1
READOUT 2
CORRECT 3
WRITING 4
ABORTING 5
UNAVAILABLE 6
ERROR 7
BUSY 8
Spectra::marccd_wait_for_state()
waits for a specified state,
e.g. marccd_wait_for_state( "40") means state was WRITING, now IDLE
Spectra::marccd_start()
sends "Start\012" and waits for state "81"
Spectra::marccd_readout()
sends "readout,0\012", sleeps 2s and waits for state "20"
Spectra::marccd_readout_bg()
sends "readout,1\012", sleeps 2s and waits for state "20"
Spectra::marccd_readout_mr()
sends "readout,2\012", sleeps 2s and waits for state "20"
Spectra::marccd_correct()
sends "correct\012" and waits for state "30"
Spectra::marccd_writefile( "fname")
sends "writefile,${fname},1\012" and waits for state "40"