- A couple of small fixes for memory and initialization problems.
This is to make valgrind happy SKIPPED: psi/amorscan.c psi/el734hp.c psi/psi.c psi/tasscan.c
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
<TITLE>The Internal Scan Command</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<H1>The Internal Scan Command</H1>
|
||||
<H1>The Internal Scan Commands</H1>
|
||||
<P>
|
||||
Scans are preformed from a variety of commands in SICS. All these commands
|
||||
are just Tcl--wrappers around an internal scan object implemented in C. This
|
||||
@ -13,6 +13,29 @@ command</a> in the initialisation file. This command install the internal
|
||||
scan object under a user defined name. For the rest of this document it is
|
||||
assumed that this name is xxscan.
|
||||
</P>
|
||||
<h2>Scan Concepts</2>
|
||||
<p>
|
||||
Scanning in SICS evolved a little over time. It turned out that scans
|
||||
are a demanding job for a programmer because of the plethora of
|
||||
special scans people wish to perform and the many data file formats which
|
||||
have to be supported. This requires a very high degree of
|
||||
configurability. Under several refactorings the internal scan command
|
||||
has grown to become:
|
||||
<ul>
|
||||
<li>A controller for the scan process.
|
||||
<li>A container to store scanned variables and counts during the
|
||||
process of a scan. This includes commands to store and retrieve such
|
||||
values.
|
||||
<li>A container for the configuration of the scan. A scan is
|
||||
configured by specifying functions to be called at the various steps
|
||||
during the scan. These are preconfigured to the standard scan
|
||||
functions. An API is provided to replace some or all of the scan
|
||||
functions by user defined ones.
|
||||
</ul>
|
||||
The internal scan object is augmented by a library of standard scan
|
||||
functions. The transition to the new model is not yet clean in order
|
||||
not to break to much old code.
|
||||
</p>
|
||||
The scan object (named here xxscan, but may have another name) understands
|
||||
the following commands:
|
||||
<DL>
|
||||
@ -28,6 +51,8 @@ different parameters.
|
||||
the counter mode to use (this can be either timer or monitor) and preset
|
||||
which is the preset value for the counter. Scan data is written to an output
|
||||
file.
|
||||
<dt>xxscan continue NP mode preset
|
||||
<dd>Continues an interrupted scan. Used by the recovery feauture.
|
||||
<DT>xxscan silent NP mode preset
|
||||
<DD>Executes a scan. The arguments are: NP the number of scan points, mode
|
||||
the counter mode to use (this can be either timer or monitor) and preset
|
||||
@ -47,16 +72,33 @@ command sets the channel to collect data from. The argument n is an integer
|
||||
ID for the channel to use.
|
||||
<DT>xxscan getcounts
|
||||
<DD>Retrieves the counst collected during the scan.
|
||||
<dt>xxscan getmonitor i
|
||||
<dd>Prints the monitor values collected during the scan for the
|
||||
monitor number i
|
||||
<dt>xxscan gettime
|
||||
<dd>Prints the counting times for the scan points in the current scan.
|
||||
<dt>xxscan np
|
||||
<dd>Prints the number of points in the current scan.
|
||||
<DT>xxscan getvardata n
|
||||
<DD>This command retrieves the values of a scan variable during the scan
|
||||
(the x axis). The argument n is the ID of the scan variable to retrieve data
|
||||
for. ID is 0 for the first scan variable added, 1 for the second etc.
|
||||
<dt>xxscan noscanvar
|
||||
<dd>Prints the number of scan variables
|
||||
<dt>xxscan getvarpar i
|
||||
<dd>Prints the name , start and step of the scan variable number i
|
||||
<DT>xxscan interest
|
||||
<DD>A SICS client can be automatically notified about scan progress. This is
|
||||
switched on with this command. Three types of messages are sent: A string
|
||||
NewScan on start of the scan, a string ScanEnd after the scan has finished
|
||||
and a string scan.Counts = {109292 8377 ...} with the scan values after each
|
||||
finished scan point.
|
||||
<dt>xxscan uuinterest
|
||||
<dd>As above but the array of counts is transferred in UU encoded
|
||||
format.
|
||||
<dt>xxscan dyninterest
|
||||
<dd>As above but scan points are printed one by one as a list
|
||||
containing: point number first_scan_var_pos counts.
|
||||
<DT>xxscan uninterest
|
||||
<DD> Uninterest switches automatic notification about scan progress off.
|
||||
<DT>xxscan integrate
|
||||
@ -87,10 +129,70 @@ object. Currently there are two:
|
||||
<li><b>amor</b>, a special mode the reflectometer AMOR which writes
|
||||
NeXus files.
|
||||
</ul>
|
||||
<dt>xxscan storecounts counts time mon1 mon2 ...
|
||||
<dD>This stores an entry of count values into the scan data
|
||||
structure. To be used from user defined scan functions. The scan
|
||||
pointer is incremented by one.
|
||||
<dt>xxscan storecounter
|
||||
<dd>Store the counts and monitors in the counter object configured for
|
||||
the scan into the scan data structure. Increments the scan pointer by
|
||||
one.
|
||||
<dt>xxscan appendvarpos i pos
|
||||
<dd>Append pos to the array of positions for scan variable i. To be
|
||||
used from user defined scan functions.
|
||||
<dt>xxscan callback scanstart | scanpoint | scanend
|
||||
<dd>Triggers callbacks configured on the scan object. May be used by
|
||||
user functions implementing own scan loops.
|
||||
<dt>xxscan function list
|
||||
<dd>Lists the available configurable function names. The calling style
|
||||
of these functions is described in the next section about stdscan.
|
||||
<dt>xxscan function functionname
|
||||
<dd>Returns the currently configured function for functionname.
|
||||
<dt>xxscan function functionname newfunctionname
|
||||
<dd>Sets a new function to be called for the function functionname in
|
||||
the scan.
|
||||
</DL>
|
||||
</P>
|
||||
<p>
|
||||
<h2>User Defined Scans</h2>
|
||||
<h2>User Definable Scan Functions</h2>
|
||||
<p>The last commands in the last section allowed to overload the
|
||||
functions implementing various operations during the scan with user
|
||||
defined methods. This section is the reference for these
|
||||
functions. The following operations during a scan be configured:
|
||||
<dl>
|
||||
<dt>writeheader
|
||||
<dd>Is supposed to write the header of the data file
|
||||
<dt>prepare
|
||||
<dd>Prepare does all the necessary operations necessary before a scan
|
||||
starts.
|
||||
<dt>drive
|
||||
<dd>Is called to drive to the next scan point
|
||||
<dt>count
|
||||
<dd>Is called at each scan point to perform the counting operation
|
||||
<dt>collect
|
||||
<dd>Is called for each scan point. This function is supposed to store
|
||||
the scan data into the scan data structure.
|
||||
<dt>writepoint
|
||||
<dd>Is called for each scan point and is meant to print information
|
||||
about the scan point to the data file and to the user.
|
||||
<dt>userdata
|
||||
<dd>This is the name of a user defined object which may be used to
|
||||
store user data for the scan.
|
||||
</dl>
|
||||
The exact invocations of the functions:
|
||||
<ul>
|
||||
<li>writeheader scanobjectname userobjectname
|
||||
<li>prepare scanobjectname userobjectname
|
||||
<li>drive scanobjectname userobjectname point
|
||||
<li>count scanobjectname userobjectname point
|
||||
<li>collect scanobjectname userobjectname point
|
||||
<li>writepoint scanobjectname userobjectname point
|
||||
</ul>
|
||||
scanobjectname is the name of the scan object invoking the
|
||||
function. This can be used for querying the scan
|
||||
object. userobjectname is the name of a entity as specified as
|
||||
userdata in the configuration. point is the number of the current scan point.
|
||||
</p>
|
||||
<h2>User Defined Scans(Old Style)</h2>
|
||||
<p>
|
||||
In some cases users wish to control the scan more closely, i.e. do
|
||||
multiple counting operations at the same point etc. This is especially
|
||||
@ -133,6 +235,44 @@ command:
|
||||
In all this replace xxxscan with the name of the internal scan
|
||||
command.
|
||||
</p>
|
||||
<h2>Differential Scans</h2>
|
||||
<p>
|
||||
When aligning or when searching peaks a very fast scan is
|
||||
required. This is the differential scan. It starts a motor and
|
||||
collects counts while the motor is running. The counts collected are
|
||||
the monitor normalized difference to the previous reading. This
|
||||
functionality can be configured into SICS with the command:
|
||||
<pre>
|
||||
MakeDiffScan
|
||||
</pre> in the configuration file. An optional parameter defines
|
||||
another name then diffscan (the default) for this object. Differential
|
||||
scans can only be run against one motor as it cannot be guaranteed that
|
||||
motors in a coordinated movement operate at the same speed. The
|
||||
procedure to use diffscan is:
|
||||
<ul>
|
||||
<li>Configure a scan variable into a SICS scan object: xxscan add var
|
||||
start step
|
||||
<li>Run diffscan as: diffscan scanobjectname end_position_of_scan
|
||||
This runs the differential scan. Scanobjectname is the name of a SICS
|
||||
internal scan object. It will be used to store the results of the
|
||||
scan. While the scan is running some basic information is printed. The
|
||||
scan will range from the start given in the xxscan add command to the
|
||||
end position given in this call.
|
||||
</ul>
|
||||
The diffscan object has two configurable parameters:
|
||||
<dl>
|
||||
<dt>monitor
|
||||
<dd>The monitor number to normalize against. For maximum precision
|
||||
this should be a monitor with a lot of intensity on it.
|
||||
<dt>skip
|
||||
<dd>The number of SICS main loop cycles to skip between readings. This
|
||||
can be used to control the amount of data generated during a
|
||||
differential scan. This may become a problem if there is fast hardware.
|
||||
</dl>
|
||||
A word of warning: positions found in differential scans may not be
|
||||
totally correct. The differential scan might even miss peaks when the
|
||||
relationship between motor speed and sampling rate is bad.
|
||||
</p>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
|
Reference in New Issue
Block a user