\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@ pMotor p2Theta, char *p2t,@\\ \mbox{}\verb@ char *pFileRoot,pDataNumber pDanu, char *headerTemplate);@\\ \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@ float GetFourCirclePreset(int handle, double twoTheta);@\\ \mbox{}\verb@ int GetFourCircleScanNP(int handle, double twoTheta);@\\ \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}