PSI sics-cvs-psi_pre-ansto-moved (artificially renamed)
This commit is contained in:
@ -10,7 +10,7 @@ This object implements this complex movement as a virtual motor.
|
||||
|
||||
The following formulas are used for the necessary calculations:
|
||||
\begin{eqnarray}
|
||||
delta height & = & h_{s} - R \sin \alpha \\
|
||||
delta height & = & h_{s} - \sin \alpha \\
|
||||
delta x & = & |x_{c} - x_{s}| - R \cos \alpha \\
|
||||
omega & = & -2 MOM + 2 SOM \\
|
||||
\end{eqnarray}
|
||||
@ -18,7 +18,7 @@ with
|
||||
\begin{eqnarray}
|
||||
h_{s} & = & \tan(2MOM)|x_{c} - x_{s}| \\
|
||||
R & = & \sqrt{hs^{2} - |x_{c} - x_{s}|^{2}} \\
|
||||
\alpha & = & 180 -90 - \beta - 2SOM \\
|
||||
\alpha & = & ATT - 2SOM \\
|
||||
\beta & = & 180 - 90 - 2MOM \\
|
||||
MOM & = & polarizer \omega \\
|
||||
SOM & = & sample \omega \\
|
||||
@ -141,6 +141,34 @@ $\langle$amorinterface {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Mark Koennecke, September 1999@\\
|
||||
\mbox{}\verb@----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/* distance detector sample */@\\
|
||||
\mbox{}\verb@#define PARDS 0@\\
|
||||
\mbox{}\verb@/* constant height of sample: height = PARDH + MOTSOZ + MOTSTZ */@\\
|
||||
\mbox{}\verb@#define PARDH 1@\\
|
||||
\mbox{}\verb@/* distance diaphragm 4 - sample */@\\
|
||||
\mbox{}\verb@#define PARDD4 2@\\
|
||||
\mbox{}\verb@/* distance to diaphragm 5 */@\\
|
||||
\mbox{}\verb@#define PARDD5 3@\\
|
||||
\mbox{}\verb@/* interrupt to issue when a motor fails on this */@\\
|
||||
\mbox{}\verb@#define PARINT 4@\\
|
||||
\mbox{}\verb@/* base height of counter station */@\\
|
||||
\mbox{}\verb@#define PARDDH 5@\\
|
||||
\mbox{}\verb@/* height of D4 */@\\
|
||||
\mbox{}\verb@#define PARD4H 6@\\
|
||||
\mbox{}\verb@/* height of D5 */@\\
|
||||
\mbox{}\verb@#define PARD5H 7@\\
|
||||
\mbox{}\verb@/* base height of analyzer */@\\
|
||||
\mbox{}\verb@#define PARANA 8@\\
|
||||
\mbox{}\verb@/* distance of analyzer from sample */@\\
|
||||
\mbox{}\verb@#define PARADIS 9@\\
|
||||
\mbox{}\verb@/* flag analyzer calculation on/off */@\\
|
||||
\mbox{}\verb@#define ANAFLAG 10@\\
|
||||
\mbox{}\verb@/* constant for second detector */@\\
|
||||
\mbox{}\verb@#define PARDDD 11@\\
|
||||
\mbox{}\verb@/* constant part of AOM */@\\
|
||||
\mbox{}\verb@#define PARAOM 12@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\langle$putput {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\langle$amoredata {\footnotesize ?}$\rangle$\verb@@\\
|
||||
|
@ -212,6 +212,29 @@ take care of invoking the apropriate commands on all registered counting
|
||||
devices.
|
||||
|
||||
|
||||
\subsubsection{Locking the Device Executor}
|
||||
In some instances user code may wish to lock the device executor. An
|
||||
example is a long running data saving operation. In order to do this
|
||||
two functions are provided:
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap4}
|
||||
$\langle$devlock {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ void LockDeviceExecutor(pExeList self);@\\
|
||||
\mbox{}\verb@ void UnlockDeviceExecutor(pExeList self);@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\subsubsection{The Rest}
|
||||
The rest of the interface includes initialisation and deletion routines
|
||||
and some access routines. With the devexec being such an important system
|
||||
@ -219,7 +242,7 @@ component a function {\bf GetExecutor} is provided which retrieves a pointer
|
||||
to the global SICS device executor.
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap4}
|
||||
\begin{minipage}{\linewidth} \label{scrap5}
|
||||
\verb@"devexec.h"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
@ -308,7 +331,8 @@ to the global SICS device executor.
|
||||
\mbox{}\verb@ connection with non blocking operation such as motors started@\\
|
||||
\mbox{}\verb@ with run.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@/*--------------------------- Locking ---------------------------------*/@\\
|
||||
\mbox{}\verb@ @$\langle$devlock {\footnotesize ?}$\rangle$\verb@ @\\
|
||||
\mbox{}\verb@/* -------------------------- Executor management -------------------------*/@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@ pExeList GetExecutor(void);@\\
|
||||
|
@ -36,6 +36,8 @@ $\langle$evdata {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ pObjectDescriptor pDes;@\\
|
||||
\mbox{}\verb@ pIDrivable pDrivInt;@\\
|
||||
\mbox{}\verb@ pEVInterface pEnvir;@\\
|
||||
\mbox{}\verb@ pICallBack pCall;@\\
|
||||
\mbox{}\verb@ int callCount;@\\
|
||||
\mbox{}\verb@ pEVDriver pDriv;@\\
|
||||
\mbox{}\verb@ EVMode eMode;@\\
|
||||
\mbox{}\verb@ float fTarget;@\\
|
||||
@ -63,7 +65,8 @@ the second field a pointer to an Drivable interface. Each environment
|
||||
controller needs to implement that in order to allow SICS drive the device
|
||||
to a new value. The third field is a pointer to an environment interface.
|
||||
This is needed in order to enable monitoring of the device when it has
|
||||
reached its target value. The fourth field is a pointer to the driver for
|
||||
reached its target value. Then there is a pointer to a callback
|
||||
interface. The fifth field is a pointer to the driver for
|
||||
the actual hardware. Next is the mode the device is in. Of course there
|
||||
must be floating point value which defines the current target value for the
|
||||
device. pName is a pointer to a string representing the name of the
|
||||
|
@ -17,7 +17,9 @@ $\langle$Modes {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ eHNormal,@\\
|
||||
\mbox{}\verb@ eHTOF,@\\
|
||||
\mbox{}\verb@ eHStrobo,@\\
|
||||
\mbox{}\verb@ eHRPT@\\
|
||||
\mbox{}\verb@ eHRPT,@\\
|
||||
\mbox{}\verb@ ePSD,@\\
|
||||
\mbox{}\verb@ eSANSTOF@\\
|
||||
\mbox{}\verb@ } HistMode;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
@ -29,6 +31,7 @@ $\langle$Modes {\footnotesize ?}$\rangle\equiv$
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
These modes are specific to the SINQ histogram memory.
|
||||
A histogram memory can be operated in transparent mode. It has not yet been
|
||||
defined what this means but it is sort of storing raw data from the detector
|
||||
without any summing or processing. Normal mode is better defined, this is
|
||||
@ -99,6 +102,11 @@ command. Then on initialisation first the logical histogram memory
|
||||
evaluates the general options and then the driver in its Config
|
||||
function evaluates the driver specific options.
|
||||
|
||||
The histogram memory supports several dimensions, a time binning
|
||||
option and optional buffering of histogram memory data read from the
|
||||
actual HM. All this data management stuff is handled in a separate
|
||||
class, HMdata. See the documentation for HMdata for more details.
|
||||
|
||||
|
||||
\subsubsection{The Histogram memory driver}
|
||||
Adhering to the Sics paradigm of dividing any device into a logical device
|
||||
@ -113,16 +121,7 @@ $\langle$HistType {\footnotesize ?}$\rangle\equiv$
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ typedef struct __HistDriver {@\\
|
||||
\mbox{}\verb@ /* configuration data */@\\
|
||||
\mbox{}\verb@ HistMode eHistMode;@\\
|
||||
\mbox{}\verb@ OverFlowMode eFlow;@\\
|
||||
\mbox{}\verb@ int iRank;@\\
|
||||
\mbox{}\verb@ int iDims[MAXDIM];@\\
|
||||
\mbox{}\verb@ int nDim;@\\
|
||||
\mbox{}\verb@ int iLength;@\\
|
||||
\mbox{}\verb@ int iBinWidth;@\\
|
||||
\mbox{}\verb@ float fTime[MAXCHAN];@\\
|
||||
\mbox{}\verb@ int iTimeChan;@\\
|
||||
\mbox{}\verb@ pHMdata data;@\\
|
||||
\mbox{}\verb@ /* counting operations data */@\\
|
||||
\mbox{}\verb@ CounterMode eCount;@\\
|
||||
\mbox{}\verb@ float fCountPreset;@\\
|
||||
@ -183,15 +182,6 @@ $\langle$HistType {\footnotesize ?}$\rangle\equiv$
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
Quite a lot, but a histogram memory is quite a complex piece of equipment.
|
||||
The configuration information is in the elements EhistMode, eOverFlowMode,
|
||||
iRank, iDims and iBinWidth fields. iDim and nDim desribe the logical
|
||||
dimensions of the histogram memory. These may be different from the
|
||||
dimensions used for data transfer. For instance the SANS detector is
|
||||
handled internally as 1600+ numbers where it really is a filed o
|
||||
128*128.
|
||||
Additionally there is an array of
|
||||
floating point values which denote the time binning for time-o-flight
|
||||
operation or the stroboscopic binning axis in stroboscopic mode.
|
||||
|
||||
The fields fPreset and CounterMode hold the counting parameter data.
|
||||
|
||||
@ -324,11 +314,6 @@ $\langle$HistST {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ pICountable pCountInt;@\\
|
||||
\mbox{}\verb@ pICallBack pCall;@\\
|
||||
\mbox{}\verb@ pStringDict pOption;@\\
|
||||
\mbox{}\verb@ HistInt *iLocalData;@\\
|
||||
\mbox{}\verb@ int iLocalLength;@\\
|
||||
\mbox{}\verb@ int iLocalUpdate;@\\
|
||||
\mbox{}\verb@ time_t tLocal;@\\
|
||||
\mbox{}\verb@ int iUpdateIntervall;@\\
|
||||
\mbox{}\verb@ } HistMem;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
@ -451,6 +436,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ float GetHistCountTime(pHistMem self,SConnection *pCon);@\\
|
||||
\mbox{}\verb@ int HistDoCount(pHistMem self, SConnection *pCon);@\\
|
||||
\mbox{}\verb@ int HistBlockCount(pHistMem self, SConnection *pCon);@\\
|
||||
\mbox{}\verb@ void HistDirty(pHistMem self); @\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
@ -488,6 +474,9 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ int GetHistogram(pHistMem self, SConnection *pCon,@\\
|
||||
\mbox{}\verb@ int i,int iStart, int iEnd, HistInt *lData, int iDataLen);@\\
|
||||
\mbox{}\verb@ HistInt *GetHistogramPointer(pHistMem self,SConnection *pCon);@\\
|
||||
\mbox{}\verb@ int GetHistogramDirect(pHistMem self, SConnection *pCon,@\\
|
||||
\mbox{}\verb@ int i, int iStart, int iEnd, @\\
|
||||
\mbox{}\verb@ HistInt *lData, int iDataLen);@\\
|
||||
\mbox{}\verb@ int PresetHistogram(pHistMem self, SConnection *pCon, HistInt lVal);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
@ -514,6 +503,11 @@ initialises the HM from the lData provided. GetHistogram reads an histogram
|
||||
into lData but maximum iDataLen items. PresetHistogram presets the HM to the
|
||||
value lVal. Can be used to clear the HM.
|
||||
|
||||
GetHistogram and GetHistogramPointer try to buffer the data when
|
||||
possible and configured. The configuration happens through the
|
||||
definition of an update intervall. GetHistogramDirect never buffers
|
||||
but goes for the histogram memory directly.
|
||||
|
||||
The histogram memory object buffers the histograms for a adjustable
|
||||
period of time. GetHistogramPointer retrieves a pointer to the local
|
||||
histogram buffer. It also makes sure, that the histogram has been
|
||||
@ -620,7 +614,7 @@ following.
|
||||
\mbox{}\verb@----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#ifndef SICSHISTDRIV@\\
|
||||
\mbox{}\verb@#define SICSHISTDRIV@\\
|
||||
\mbox{}\verb@#define MAXCHAN 4096@\\
|
||||
\mbox{}\verb@#include "hmdata.h"@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\langle$HistType {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@$\langle$HistDrivProt {\footnotesize ?}$\rangle$\verb@@\\
|
||||
|
@ -24,6 +24,7 @@ $\langle$hkldat {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ double fLastHKL[5];@\\
|
||||
\mbox{}\verb@ int iNOR;@\\
|
||||
\mbox{}\verb@ int iQuad;@\\
|
||||
\mbox{}\verb@ int iHM;@\\
|
||||
\mbox{}\verb@ pMotor pTheta;@\\
|
||||
\mbox{}\verb@ pMotor pOmega;@\\
|
||||
\mbox{}\verb@ pMotor pChi;@\\
|
||||
@ -51,6 +52,8 @@ The fields are more or less self explaining:
|
||||
or is updated automatically from a wavelength variable.
|
||||
\item[fLastHKL] the HKL of the last reflection calculated.
|
||||
\item[iNor] a flag for normal beam calculation mode.
|
||||
\item[iHM] a flag for histogram memory mode. In this mode two theta
|
||||
limits are checked alos for detector 2 and 3.
|
||||
\item[pTheta] The two theta motor. All motor are needed for boundary
|
||||
checking.
|
||||
\item[pOmega] The omega axis motor.
|
||||
|
@ -60,6 +60,7 @@ $\langle$obdes {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ /*---------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@ pObjectDescriptor CreateDescriptor(char *name);@\\
|
||||
\mbox{}\verb@ void DeleteDescriptor(pObjectDescriptor self);@\\
|
||||
\mbox{}\verb@ pObjectDescriptor FindDescriptor(void *pData);@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@/*============================================================================@\\
|
||||
\mbox{}\verb@ Objects which do not carry data need a dummy descriptor. Otherwise@\\
|
||||
@ -207,6 +208,8 @@ $\langle$count {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ typedef struct {@\\
|
||||
\mbox{}\verb@ int ID;@\\
|
||||
\mbox{}\verb@ int (*Halt)(void *self);@\\
|
||||
\mbox{}\verb@ void (*SetCountParameters)(void *self, float fPreset,@\\
|
||||
\mbox{}\verb@ CounterMode eMode);\@\\
|
||||
\mbox{}\verb@ int (*StartCount)(void *self, SConnection *pCon);@\\
|
||||
\mbox{}\verb@ int (*CheckCountStatus)(void *self, SConnection *pCon);@\\
|
||||
\mbox{}\verb@ int (*Pause)(void *self, SConnection *pCon);@\\
|
||||
@ -313,6 +316,11 @@ $\langle$cifunc {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ void *pUserData, KillFuncIT pKill);@\\
|
||||
\mbox{}\verb@ int RemoveCallback(pICallBack pInterface, long iID);@\\
|
||||
\mbox{}\verb@ int RemoveCallback2(pICallBack pInterface, void *pUserData);@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int CallbackScript(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
||||
\mbox{}\verb@ int argc, char *argv[]); @\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ pICallBack GetCallbackInterface(void *pData); @\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
@ -360,8 +368,16 @@ RegisterCallBack.
|
||||
search key for deletion is the pointer to user data. All callbacks related
|
||||
to this user data in the interface specified will be removed.
|
||||
|
||||
{\bf CallbackScript} allows to connect callbacks to scripts. Please
|
||||
note, that those scripts will have a dummy connection to clients only
|
||||
and will not be able to write to clients. All output occurring in
|
||||
these scripts will be directed to stdout though, in order to support
|
||||
debugging.
|
||||
|
||||
|
||||
All these functions are implemented in the file callback.c.
|
||||
|
||||
|
||||
\subsubsection{The Environment Interface}
|
||||
This interface is used by the environment monitor in order to monitor
|
||||
the status of a environment controller. The interface looks like this:
|
||||
|
@ -18,6 +18,7 @@ $\langle$servdat {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ pEnvMon pMonitor;@\\
|
||||
\mbox{}\verb@ mkChannel *pServerPort;@\\
|
||||
\mbox{}\verb@ pNetRead pReader;@\\
|
||||
\mbox{}\verb@ int simMode;@\\
|
||||
\mbox{}\verb@ } SicsServer;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
@ -40,6 +41,8 @@ This module monitors sample environment controllers.
|
||||
the SICS server is listening for connections.
|
||||
\item[pReader] points to a data structure which defines the network
|
||||
communication object.
|
||||
\item[simMode] a flag which is true when the SICS server is a simulation
|
||||
server.
|
||||
\end{description}
|
||||
|
||||
|
||||
|
@ -66,6 +66,7 @@ $\langle$scandata {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ SConnection *pCon;@\\
|
||||
\mbox{}\verb@ char pRecover[1024];@\\
|
||||
\mbox{}\verb@ char pHeaderFile[1024];@\\
|
||||
\mbox{}\verb@ int (*PrepareScan)(pScanData self);@\\
|
||||
\mbox{}\verb@ int (*WriteHeader)(pScanData self);@\\
|
||||
\mbox{}\verb@ int (*WriteScanPoints)@\\
|
||||
\mbox{}\verb@ (pScanData self, @\\
|
||||
@ -140,6 +141,9 @@ line is permitted.
|
||||
finding data.
|
||||
\item[pCon] The connection object to use for error reporting during scan
|
||||
execution.
|
||||
\item[PrepareScan] checks limits of scan variables and memorizes
|
||||
important scan information. Sometimes this is not wanted, that is why
|
||||
it is parametrized here.
|
||||
\item[WriteHeader] is a pointer to a function which writes the header part
|
||||
of the scan file. Replace this function if another data format is needed.
|
||||
\item[WriteScanPoints] is a pointer to a function which will be called after
|
||||
@ -158,18 +162,18 @@ scheme is required especiallay for polarising scans.
|
||||
counter to use and is initialized at creation of the scan data structure.
|
||||
\item[pCountername] is the name of the counter used.
|
||||
\item[iChannel] is the channel to use for counting. 0 is the main counter,
|
||||
everything baove one of the monitors.
|
||||
everything above one of the monitors.
|
||||
\item[pCount, iCounts] is a dynamic array containing iCounts sets of
|
||||
counting infomation. For each scan point this array holds the counts
|
||||
measured. iCounts is also the current scan position.
|
||||
\item[iWindow] the width of the window used for peak integration. See
|
||||
integrate.w,c for more details.
|
||||
\item[pCommand] It turned out that a way is needed to define user defined
|
||||
speciality scans. This is implemented by setting the channel number to -10
|
||||
and then have the scan command execute a Tcl script for each scan point.
|
||||
This Tcl script has to return a Tcl list containing the values to enter for
|
||||
counter and monitor for the scan point. pCommand now is the name of the
|
||||
Tcl procedure to invoke.
|
||||
speciality scans, especially for those magnetic polarized guys. The way
|
||||
it is done is that scan has to be configured user. In this mode, ScanCount
|
||||
will call a script which does everything necessary at the scan point,
|
||||
including adding data to the data file. pCommand now holds the name of
|
||||
the script to invoke.
|
||||
\item[pSpecial] Usually NULL. A entry which allows customized scans to keep
|
||||
some additional data in the scan data structure.
|
||||
\end{description}
|
||||
@ -221,7 +225,23 @@ $\langle$scaninter {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ /*@\\
|
||||
\mbox{}\verb@ resets the configurable scan functions to their default values.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int NonCheckPrepare(pScanData self);@\\
|
||||
\mbox{}\verb@ /*@\\
|
||||
\mbox{}\verb@ a function for the PrepareScan field in the scan data structure@\\
|
||||
\mbox{}\verb@ which does not check the boundaries of the scan as the default@\\
|
||||
\mbox{}\verb@ PrepareScan does.@\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int AppendScanLine(pScanData self, char *line);@\\
|
||||
\mbox{}\verb@ /*@\\
|
||||
\mbox{}\verb@ AppendScanLine appends a line to the scan data file. When finished@\\
|
||||
\mbox{}\verb@ it updates the position pointer in the file to point behind the@\\
|
||||
\mbox{}\verb@ added line. @\\
|
||||
\mbox{}\verb@ */@\\
|
||||
\mbox{}\verb@ int StoreScanCounts(pScanData self, char *data);@\\
|
||||
\mbox{}\verb@ /*@\\
|
||||
\mbox{}\verb@ parses the numbers in data and stores them as the count and@\\
|
||||
\mbox{}\verb@ monitor data for the current scan point.@\\
|
||||
\mbox{}\verb@ */ @\\
|
||||
\mbox{}\verb@/*------------------------ Interpreter Interface --------------------------*/@\\
|
||||
\mbox{}\verb@ int ScanFactory(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
||||
\mbox{}\verb@ int argc, char *argv[]);@\\
|
||||
@ -279,6 +299,17 @@ summed counts and the variance. See the section on integrate for more
|
||||
details.
|
||||
\item[ResetScanFunctions] reinstalls the default functions for scan
|
||||
processing into the ScanData structure.
|
||||
\item[NonCheckPrepare] Before a scan is started, various data
|
||||
structures in the scan object are initialized. Thereby the scan
|
||||
boundaries are checked against the motor limits. For some scans this
|
||||
is not feasible. This version omits this check and must be entered as
|
||||
the PrepareScan function field in the scan data structure by code
|
||||
using the scan module.
|
||||
\item[AppendScanLine] appends a line to the scan file. This is useful
|
||||
for user configured scans, for instance in polarisation mode.
|
||||
\item[StoreScanCounts] parses the data given in data and stores the
|
||||
numbers as count values as the count data for the current scan point.
|
||||
Another feature for supporting user configurable scans.
|
||||
\item[SimScan] creates a simulated gaussian peak with the given
|
||||
parameters. Used for debugging several things.
|
||||
\item[ScanFactory] is the SICS interpreter object creation function
|
||||
|
@ -30,6 +30,10 @@ $\langle$SQType {\footnotesize ?}$\rangle\equiv$
|
||||
\mbox{}\verb@ pSINQHM pMaster;@\\
|
||||
\mbox{}\verb@ int iLastHMError;@\\
|
||||
\mbox{}\verb@ int iLastCTError;@\\
|
||||
\mbox{}\verb@ HistMode eHistMode;@\\
|
||||
\mbox{}\verb@ int iBinWidth;@\\
|
||||
\mbox{}\verb@ OverFlowMode eFlow;@\\
|
||||
\mbox{}\verb@ int extraDetector;@\\
|
||||
\mbox{}\verb@ } SinqHMDriv;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
@ -59,7 +63,10 @@ The driver implements all the functions specified in the driver interface.
|
||||
Please note that these contain functions for the deletion of driver private
|
||||
data structures which will be automatically called form DeleteHistDriver.
|
||||
Therefore the only function to define is CreateSINQDriver which sets things
|
||||
up.
|
||||
up. Another function is isSINQHMDriv which tests if the driver given as an
|
||||
argument actually is a SINQHM driver. This is currently only used in
|
||||
amorstat.c which has to circumvent normal SICS mechanisms for performance
|
||||
reasons.
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap2}
|
||||
@ -68,6 +75,7 @@ $\langle$Protos {\footnotesize ?}$\rangle\equiv$
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ pHistDriver CreateSINQDriver(pStringDict pOption);@\\
|
||||
\mbox{}\verb@ int isSINQHMDriv(pHistDriver test);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
|
Reference in New Issue
Block a user