\subsection{Four Circle Single Counter Measurement Object}
This object implements a single counter reflection measurement routine
for four circle diffractometers. This object is able to read a reflection
listing, drive to each reflection in the list, do a scan on it, integrate
the scan results and write the results to ASCII files. 
Three files will be created as output: one file with the ending
.rfl which contains the reflection profiles for each reflection, a file .asc
which contains a summary in form of HKL, I, sigma(I) for each reflection
and a file ending .err which contains all the error messages obtained during
the run.

This module has evolved to support the following mode advanced feautures:
\begin{itemize}
\item Vary step width and scanned variable in dependence on two theta
\item Calculation mode in order to determine the number of reflections which
can actually be measured from a given list.
\item Remeasuring of weak reflections.
\item Fast scans.
\end{itemize}

The interface to this object consists of these functions:

\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap1}
$\langle$mesureint {\footnotesize ?}$\rangle\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@ typedef struct __Mesure *pMesure;@\\
\mbox{}\verb@/*--------------------- live & death --------------------------------------*/@\\
\mbox{}\verb@  pMesure CreateMesure(pHKL pCryst, pScanData pScanner, @\\
\mbox{}\verb@                       pMotor pOmega, char *pom,@\\
\mbox{}\verb@                       char *pFileRoot,pDataNumber pDanu);@\\
\mbox{}\verb@  void    DeleteMesure(void *pData);@\\
\mbox{}\verb@@\\
\mbox{}\verb@  int MesureFactory(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
\mbox{}\verb@                    int argc, char *argv[]);@\\
\mbox{}\verb@/*------------------- object functions -----------------------------------*/@\\
\mbox{}\verb@  int MesureReflection(pMesure self, float fHKL[3], float fPsi,@\\
\mbox{}\verb@        SConnection *pCon);@\\
\mbox{}\verb@  int MesureGenReflection(pMesure self, float fHKL[3],float fSet[4], SConnection *pCon);@\\
\mbox{}\verb@  int MesureStart(pMesure self, SConnection *pCon);@\\
\mbox{}\verb@  int MesureReopen(pMesure self, char *filename, SConnection *pCon);@\\
\mbox{}\verb@  int MesureClose(pMesure self);@\\
\mbox{}\verb@  int MesureFile(pMesure self, char *pFile, int iSkip, SConnection *pCon);@\\
\mbox{}\verb@  int MesureGenFile(pMesure self, char *pFile, int iSkip, SConnection *pCon);@\\
\mbox{}\verb@  int MesureSetPar(pMesure self, char *name, float fVal);@\\
\mbox{}\verb@  int MesureGetPar(pMesure self, char *name, float *fVal);@\\
\mbox{}\verb@@\\
\mbox{}\verb@  int MesureAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
\mbox{}\verb@                    int argc, char *argv[]);@\\
\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}
All functions return 1 on success, 0 on failure.
\begin{description}
\item[CreateMesure] creates a new pMesure object. Parameters are the HKL
object to use for cystallographic conversions and the scan object to use for
doing the scans. This is followd by the motor for running omega, its name
and the name of the motor for driving omega 2 theta. Finnaly the path to the
data directory and the data number object for automatic filename creation is
specified.
\item[DeleteMesure] wipes the mesure object pData from memory.
\item[MesureFactory] is the factory function for mesure which will be used
by the interpreter to  install mesure into the system.
\item[MesureReflection] measures the single reflection fHKL. It drives
there, calculates scan borders and performs the scan.
\item[MesureGenReflection] measures the single reflection fHKL. It drives
there, calculates scan borders and performs the scan. This version uses
supplied values for the instrument settings.
\item[MesureStart] sets everything up for a new measurement with new file
names.
\item[MesureReopen] reopens the files belonging to the file name given as
base for appending. This is a recovery feature.
\item[MesureFile] opens the file specified as second parameter and reads
each line. Expected is a reflection to measure. Each reflection is then
measured and output written. The last parameter iSkip allows to skip iSkip
lines of the reflection file. This facility exists in order to restart work
on an reflection file which had been interrupted for some reason.
\item[MesureGenFile] opens the file specified as second parameter and reads
each line. Expected is a reflection to measure. Each reflection is then
measured and output written. The last parameter iSkip allows to skip iSkip
lines of the reflection file. This facility exists in order to restart work
on an reflection file which had been interrupted for some reason. This
version acts upon files created by the program HKLGEN.
\item[MesureSetPar] sets the parameter name of Mesure to fVal. A listing of
possible parameters is given below.
\item[MesureGetPar] returns the value of the parameter name in fVal.
\item[MesureAction] implements the interpreter interface to the mesure
object. 
\end{description}
Mesure supports the following parameters:
\begin{description}
\item[np] the number of points per scan.
\item[preset] The preset value for counting.
\item[countmode] the counting mode, can be 0 for timer or 1 for monitor
mode. 
\end{description}


\subsubsection{Four Circle Table}
In order to support the variation of scan parameters with two theta a table is needed which
holds the necessary parameters. This table is implemented in a separate module. The 
interface to this module is:
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap2}
$\langle$fourtableint {\footnotesize ?}$\rangle\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@        int MakeFourCircleTable();@\\
\mbox{}\verb@        void DeleteFourCircleTable(int handle);@\\
\mbox{}\verb@        int HandleFourCircleCommands(int handle, SConnection *pCon, @\\
\mbox{}\verb@                int argc, char *argv[], int *err);@\\
\mbox{}\verb@        char  *GetFourCircleScanVar(int handle, double two_theta);@\\
\mbox{}\verb@        double GetFourCircleStep(int handle, double two_theta);@\\
\mbox{}\verb@        int  SaveFourCircleTable(int handle, char *objName, FILE *fd);@\\
\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}
Many functions takes as the first argument a handle to the four circle table as
 created by MakeFourCircleTable.
\begin{description}
\item[MakeFourCircleTable] creats a four circle table. Returns a handle with which
the table can be referred to later.
\item[DeleteFourCircleTable] removes a four circle table. The single argument is
 a handle to a four circle tbale as created by MakeFourCircle.
\item[HandleFourCircleCommands] handles interpreter commands which allow to
 edit or list the table described by handle. pCon is used for output. argc, argv are
 the arguments to the command. The returns 1 when the command was handled, 0 else.
 If there was an error, err is set to 0. 
\item[GetFourCircleScanVar] retrieves the scan variable to use for the two theta 
 value given.
\item[GetFourCircleStep] retrieves the step width to use for the two theta 
 value given.
\item[SaveFourCircleTable] saves the configuration of the table into fd. objName is the 
name of the object to which this table belongs.
\end{description}


\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap3}
\verb@"mesure.h"@ {\footnotesize ? }$\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@/*----------------------------------------------------------------------------@\\
\mbox{}\verb@                         M E S U R E@\\
\mbox{}\verb@@\\
\mbox{}\verb@ A SICS object for doing four circle measurements with a single@\\
\mbox{}\verb@ counter. @\\
\mbox{}\verb@@\\
\mbox{}\verb@ copyright: see copyright.h@\\
\mbox{}\verb@@\\
\mbox{}\verb@ Mark Koennecke, April 1998@\\
\mbox{}\verb@ Heavily reworked: Mark Koennecke, February-March 2005 @\\
\mbox{}\verb@---------------------------------------------------------------------------*/@\\
\mbox{}\verb@#ifndef SICSMESURE@\\
\mbox{}\verb@#define SICSMESURE@\\
\mbox{}\verb@@$\langle$mesureint {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@#endif@\\
\mbox{}\verb@@$\diamond$
\end{list}
\vspace{-2ex}
\end{minipage}\\[4ex]
\end{flushleft}
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap4}
\verb@"fourtable.h"@ {\footnotesize ? }$\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@/*---------------------------------------------------------------------------@\\
\mbox{}\verb@                  F O U R T A B L E@\\
\mbox{}\verb@@\\
\mbox{}\verb@ A SICS object which holds the variation of scan parameters for four circle@\\
\mbox{}\verb@ reflection list measurements.@\\
\mbox{}\verb@ copyright: see copyright.h@\\
\mbox{}\verb@@\\
\mbox{}\verb@ Mark Koennecke, February 2005@\\
\mbox{}\verb@---------------------------------------------------------------------------*/@\\
\mbox{}\verb@#ifndef FOURTABLE@\\
\mbox{}\verb@#define FOURTABLE@\\
\mbox{}\verb@@$\langle$fourtableint {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@#endif@\\
\mbox{}\verb@@$\diamond$
\end{list}
\vspace{-2ex}
\end{minipage}\\[4ex]
\end{flushleft}
