- Fixed a few problems with hklscan
- Added transfer of zipped data to conman.c, histogram memory software in order to support the TRICS status display. - Upgraded TRICS data file writing. - First installment of triple axis spectrometer support: initialization of data structures and an implementation of the MAD dr(ive) command.
This commit is contained in:
168
tas.w
Normal file
168
tas.w
Normal file
@@ -0,0 +1,168 @@
|
||||
\subsection{Triple Axis Spectrometer Software}
|
||||
A triple axis spectrometer performs complicated scans in Q--energy space.
|
||||
The triple axis spectrometers pose a couple of challenges to the SICS
|
||||
software: \begin{itemize}
|
||||
\item The command syntax should be as close as possible to the syntax
|
||||
of the ancient tasmad program.
|
||||
\item A relatively complicated algorithm is used for computing the
|
||||
motor positions and magnet settings. It is a selling point when the
|
||||
F77 routine used for this purpose in tasmad can be reused.
|
||||
\item A ILL format scan file must be written after each scan in order
|
||||
to provide compatability with existing data analysis software.
|
||||
\item Provisions must be made to execute a batch file at each scan
|
||||
point in order to allow for polarisation analysis.
|
||||
\item The user interface of tasmad is largely based on parameters
|
||||
which are used to store and manipulate state information.
|
||||
\item There exists a special syntax for assigning variables which
|
||||
requires the parameters to be in a special storage order.
|
||||
\end{itemize}
|
||||
|
||||
These requirements are implemented in the following way: tasmad
|
||||
variables are matched to SICS variables. The scan and drive commands
|
||||
are reimplemented in order to allow for both syntax parsing and the
|
||||
reuse of the triple axis calculation routines. In order to support the
|
||||
strange storage order assignment system the set command is also
|
||||
implemented in this modules as it can share code with scan and drive.
|
||||
All the remaining syntax adaptions will be implemented in the
|
||||
scripting language.
|
||||
|
||||
|
||||
\subsubsection{Data Structures}
|
||||
It would be inconvenient to search all necessary parameters in the
|
||||
interpreter anytime a scan or drive command is used. In order to avoid
|
||||
this, the parameters are cached in a local data structure which is
|
||||
initialized when installing the tas module.
|
||||
|
||||
@d tasdata @{
|
||||
typedef struct {
|
||||
pObjectDescriptor pDes;
|
||||
pSicsVariable tasPar[MAXPAR];
|
||||
pCounter counter;
|
||||
}TASdata, *pTASdata;
|
||||
@}
|
||||
\begin{description}
|
||||
\item[pDes] The standard object descriptor required for any SICs
|
||||
object.
|
||||
\item[floatPar] An array of pointers to float parameters.
|
||||
The parameters are indexed through defined constants.
|
||||
\item[counter] A pointer to the neutron counter.
|
||||
\end{description}
|
||||
The constants for the parameters are defined in the header file.
|
||||
|
||||
\subsubsection{Exported Functions}
|
||||
These are mainly the interpreter inetrface functions:
|
||||
@d tasfunc @{
|
||||
int TASFactory(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]);
|
||||
int TASDrive(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]);
|
||||
int TASScan(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]);
|
||||
int TASSet(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]);
|
||||
@}
|
||||
|
||||
|
||||
@o tas.h @{
|
||||
/*----------------------------------------------------------------------
|
||||
Header file for the SICS triple axis module. Implements new drive
|
||||
and scan commands for triple axis which use the old tasmad F77
|
||||
routine for calculating the spectrometer setting angles.
|
||||
|
||||
Mark Koennecke, November 2000
|
||||
------------------------------------------------------------------------*/
|
||||
#ifndef SICSTAS
|
||||
#define SICSTAS
|
||||
|
||||
/*------------------------- parameter defines -------------------------*/
|
||||
#define WAV 0
|
||||
#define DM 1
|
||||
#define DA 2
|
||||
#define ETAM 3
|
||||
#define ETAA 4
|
||||
#define TI 5
|
||||
#define MN 6
|
||||
#define IF1V 7
|
||||
#define IF2V 8
|
||||
#define IF1H 9
|
||||
#define IF2H 10
|
||||
#define HELM 11
|
||||
#define AS 12
|
||||
#define BS 13
|
||||
#define CS 14
|
||||
#define AA 15
|
||||
#define BB 16
|
||||
#define CC 17
|
||||
#define ETAS 18
|
||||
#define AX 19
|
||||
#define AY 20
|
||||
#define AZ 21
|
||||
#define BX 22
|
||||
#define BY 23
|
||||
#define BZ 24
|
||||
#define EI 25
|
||||
#define KI 26
|
||||
#define EF 27
|
||||
#define KF 28
|
||||
#define QH 29
|
||||
#define QK 30
|
||||
#define QL 31
|
||||
#define EN 32
|
||||
#define QM 33
|
||||
#define HX 34
|
||||
#define HY 35
|
||||
#define HZ 36
|
||||
|
||||
#define DA1 37
|
||||
#define DA2 38
|
||||
#define DA3 39
|
||||
#define DA4 40
|
||||
#define DA5 41
|
||||
#define DA6 42
|
||||
#define DMCV 43
|
||||
#define DSRO 44
|
||||
#define DACH 45
|
||||
#define DMTL 46
|
||||
#define DMTU 47
|
||||
#define DSTL 48
|
||||
#define DSTU 49
|
||||
#define DATL 50
|
||||
#define DATU 51
|
||||
#define DMGL 52
|
||||
#define DSGL 53
|
||||
#define DSGU 54
|
||||
#define DAGL 55
|
||||
#define DEI 56
|
||||
#define DKI 57
|
||||
#define DEF 58
|
||||
#define DKF 59
|
||||
#define DQH 60
|
||||
#define DQK 62
|
||||
#define DQL 62
|
||||
#define DEN 63
|
||||
#define DQM 64
|
||||
#define DT 65
|
||||
#define SM 66
|
||||
#define SS 67
|
||||
#define SA 68
|
||||
#define FX 69
|
||||
#define NP 70
|
||||
#define F1 71
|
||||
#define F2 72
|
||||
#define LPA 73
|
||||
|
||||
#define MRX1 74
|
||||
#define MRX2 75
|
||||
#define ARX1 76
|
||||
#define ARX2 77
|
||||
|
||||
#define MAXPAR 78
|
||||
|
||||
|
||||
/* --------------------- data structure -------------------------------*/
|
||||
@<tasdata@>
|
||||
|
||||
/*---------------------- interface ----------------------------------*/
|
||||
@<tasfunc@>
|
||||
#endif
|
||||
@}
|
||||
Reference in New Issue
Block a user