- Adding first working version of new AMOR settings module

- Improved sls magnet driver
This commit is contained in:
koennecke
2005-10-05 07:36:37 +00:00
parent c7280ec25d
commit 544dd37279
21 changed files with 2521 additions and 12 deletions

209
amorset.tex Normal file
View File

@ -0,0 +1,209 @@
\subsection{AMOR Reflectometer Settings}
This is yet another module for calculating the settings for the AMOR
spectrometer. This version is of 2005 and implements the new calculation
scheme as devised by the Jochen where the base line and height zero point
is the beam height at the chop, chop, chopper.
Again a lot of parameters have to be maintained. For each optical bench
component an active flag, a fixed offset for correcting the scale reading to
the actual position and an offset regarding the zero point of the scale need
to be kept. And of course the value as read. This is offloaded into a
separate module, amorcomp. Beamline components to be controlled are:
\begin{description}
\item[DS] The slit at the monochromator bunker
\item[M] The monochromator
\item[Dx] various slits
\item[A] the analyzer
\item[D] the detector.
\end{description}
A master module encloses all those beamline components and performs the
actual calculation. The calculation is controlled through three virtual
motors: m2t (monochromator 2 theta), s2t (sample 2 theta) and ath, the
analyzer angle. For the formula used for the exact calculation, see the
paper from the Jochen.
The amorcomp module provides the following interface:
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap1}
$\langle$amorcompint {\footnotesize ?}$\rangle\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@ typedef struct {@\\
\mbox{}\verb@ int activeFlag; /* component present */@\\
\mbox{}\verb@ double markOffset; /* offset mark to real */@\\
\mbox{}\verb@ double scaleOffset; /* offset of the scale */@\\
\mbox{}\verb@ double readPosition; /* the position as read */@\\
\mbox{}\verb@} amorComp, *pamorComp;@\\
\mbox{}\verb@/*----------------------------------------------------------------------*/@\\
\mbox{}\verb@double calcCompPosition(pamorComp comp); @\\
\mbox{}\verb@int handleCompCommand(pamorComp comp, SConnection *pCon, @\\
\mbox{}\verb@ int argc, char *argv[]);@\\
\mbox{}\verb@int saveAmorComp(FILE *fd, char *name, char *compname, pamorComp comp); @\\
\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}
The amorset module implements the container for all the data and the actual
calculation. Most of the interesting stuff is in the functions relating to
the interpreter interface and the drivable interface. Again the virtual
motors only set values in the amorset data structure and amorset then takes
control off the driving operation.
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap2}
$\langle$amorsetint {\footnotesize ?}$\rangle\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@typedef struct {@\\
\mbox{}\verb@ pObjectDescriptor pDes;@\\
\mbox{}\verb@ pIDrivable pDriv;@\\
\mbox{}\verb@ pIDrivable listDrive;@\\
\mbox{}\verb@ amorComp M;@\\
\mbox{}\verb@ amorComp DS;@\\
\mbox{}\verb@ amorComp D2;@\\
\mbox{}\verb@ amorComp D3;@\\
\mbox{}\verb@ amorComp S;@\\
\mbox{}\verb@ amorComp D4;@\\
\mbox{}\verb@ amorComp A;@\\
\mbox{}\verb@ amorComp D5;@\\
\mbox{}\verb@ amorComp D;@\\
\mbox{}\verb@ double targetm2t;@\\
\mbox{}\verb@ double targets2t;@\\
\mbox{}\verb@ double targetath;@\\
\mbox{}\verb@ double actualm2t;@\\
\mbox{}\verb@ double actuals2t;@\\
\mbox{}\verb@ double actualath;@\\
\mbox{}\verb@ int mustDrive;@\\
\mbox{}\verb@ int mustRecalculate;@\\
\mbox{}\verb@ int driveList;@\\
\mbox{}\verb@ double dspar;@\\
\mbox{}\verb@ int verbose;@\\
\mbox{}\verb@}amorSet, *pamorSet;@\\
\mbox{}\verb@/*--------------------------------------------------------------------*/@\\
\mbox{}\verb@int AmorSetFactory(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
\mbox{}\verb@ int argc, char *argv[]);@\\
\mbox{}\verb@int AmorSetAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
\mbox{}\verb@ int argc, char *argv[]);@\\
\mbox{}\verb@/*============ helper functions for the virtual motors ===============*/ @\\
\mbox{}\verb@void amorSetMotor(pamorSet amor, int type, double value);@\\
\mbox{}\verb@double amorGetMotor(pamorSet amor, SConnection *pCon, int type);@\\
\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}
The virtual motors just implement the bare minimum:
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap3}
$\langle$amordriveint {\footnotesize ?}$\rangle\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@typedef struct{@\\
\mbox{}\verb@ pObjectDescriptor pDes;@\\
\mbox{}\verb@ pIDrivable pDriv;@\\
\mbox{}\verb@ pamorSet mama;@\\
\mbox{}\verb@ int type;@\\
\mbox{}\verb@} amorDrive, *pamorDrive;@\\
\mbox{}\verb@/*-----------------------------------------------------------------*/@\\
\mbox{}\verb@pamorDrive makeAmorDrive(pamorSet papa, int type);@\\
\mbox{}\verb@void killAmorDrive(void *data);@\\
\mbox{}\verb@int AmorDriveAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
\mbox{}\verb@ int argc, char *argv[]);@\\
\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}
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap4}
\verb@"amorset.h"@ {\footnotesize ? }$\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@/*-------------------------------------------------------------------@\\
\mbox{}\verb@ AMORSET together with amorcomp and amordrive implement the position@\\
\mbox{}\verb@ control facility for the reflectometer AMOR. This uses the algorithm@\\
\mbox{}\verb@ with the beam height as the baseline.@\\
\mbox{}\verb@ @\\
\mbox{}\verb@ copyright: see file COPYRIGHT@\\
\mbox{}\verb@ @\\
\mbox{}\verb@ Mark Koennecke, October 2005@\\
\mbox{}\verb@--------------------------------------------------------------------*/@\\
\mbox{}\verb@#ifndef AMORSET@\\
\mbox{}\verb@#define AMORSET@\\
\mbox{}\verb@#include "amorcomp.h"@\\
\mbox{}\verb@@$\langle$amorsetint {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@#endif@\\
\mbox{}\verb@@\\
\mbox{}\verb@@$\diamond$
\end{list}
\vspace{-2ex}
\end{minipage}\\[4ex]
\end{flushleft}
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap5}
\verb@"amorcomp.h"@ {\footnotesize ? }$\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@/*---------------------------------------------------------------------@\\
\mbox{}\verb@ AMOR component handling module. For the new (2005) calculation of the@\\
\mbox{}\verb@ positions using the beam height as zero.@\\
\mbox{}\verb@ @\\
\mbox{}\verb@ copyright: see file COPYRIGHT@\\
\mbox{}\verb@ @\\
\mbox{}\verb@ Mark Koennecke, October 2005@\\
\mbox{}\verb@-----------------------------------------------------------------------*/@\\
\mbox{}\verb@ #ifndef AMORCOMP@\\
\mbox{}\verb@ #define AMORCOMP@\\
\mbox{}\verb@ #include <stdio.h>@\\
\mbox{}\verb@ #include <sics.h>@\\
\mbox{}\verb@ @$\langle$amorcompint {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@ #endif@\\
\mbox{}\verb@ @\\
\mbox{}\verb@@$\diamond$
\end{list}
\vspace{-2ex}
\end{minipage}\\[4ex]
\end{flushleft}
\begin{flushleft} \small
\begin{minipage}{\linewidth} \label{scrap6}
\verb@"amordrive.h"@ {\footnotesize ? }$\equiv$
\vspace{-1ex}
\begin{list}{}{} \item
\mbox{}\verb@@\\
\mbox{}\verb@ /*--------------------------------------------------------------------@\\
\mbox{}\verb@ Part of the AMOR position calculation module.@\\
\mbox{}\verb@@\\
\mbox{}\verb@ copyright: see file COPYRIGHT@\\
\mbox{}\verb@@\\
\mbox{}\verb@ Mark Koennecke, October 2005@\\
\mbox{}\verb@----------------------------------------------------------------------*/@\\
\mbox{}\verb@#ifndef AMORDRIVE@\\
\mbox{}\verb@#define AMORDRIVE@\\
\mbox{}\verb@@$\langle$amordriveint {\footnotesize ?}$\rangle$\verb@@\\
\mbox{}\verb@#endif@\\
\mbox{}\verb@@\\
\mbox{}\verb@ @$\diamond$
\end{list}
\vspace{-2ex}
\end{minipage}\\[4ex]
\end{flushleft}