
did not have enough counts - Reduced polling frequency in emon - Fixed a scriptcontext bug which would cause it to dump core in SctTransact on interrupts - Fixed an issue with missing <nl> at the end of batch files - Added a feature which does not call halt when counting stops in hmcontrol.c This is necessary for the BOA CCD - Initalized doNotFree properly in hipadaba.c - Added the travelling salesman reflection measurement algorithm - Added another component to amorset - Removed old SicsWait from nserver.c - Added a means to nxscript to write 16 bit data for BOA - Modified tasub to accept a drivabel as a motor and not only a motor. This became necessary to make EIGER work as A2 on EIGER is a virtual motor
214 lines
8.8 KiB
TeX
214 lines
8.8 KiB
TeX
\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 chopper;@\\
|
|
\mbox{}\verb@ amorComp M;@\\
|
|
\mbox{}\verb@ amorComp DS;@\\
|
|
\mbox{}\verb@ amorComp D1;@\\
|
|
\mbox{}\verb@ amorComp D2;@\\
|
|
\mbox{}\verb@ amorComp D3;@\\
|
|
\mbox{}\verb@ amorComp EL;@\\
|
|
\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@ double detectoroffset;@\\
|
|
\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}
|