Files
sicspsi/sinqhm/hist_mem_spec.tex
cvs 064ec37e9a - Rearranged directory structure for forking out ANSTO
- Refactored site specific stuff into a site module
- PSI specific stuff is now in the PSI directory.
- The old version has been tagged with pre-ansto
2003-06-20 10:18:47 +00:00

2678 lines
112 KiB
TeX
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% TAS_SRC:[PSI.NOTES]HIST_MEM_SPEC.TEX - Ident 1.4
% ====================================
%%
%%====================================================================
\documentclass[openbib,a4paper,twoside,12pt]{article}
\usepackage{array}
\usepackage{epsfig}
%
\newcommand{\nc}{\newcommand}
\newcommand{\rc}{\renewcommand}
%
\nc{\myident}{Vn 1.5}
\nc{\mydate}{23rd November, 1999}
%
%%====================================================================
%%
%% +--------------------------------------------------------------+
%% | Paul Scherrer Institute |
%% | SINQ Division |
%% | |
%% | This software may be used freely by non-profit organizations.|
%% | It may be copied provided that the name of P.S.I. and of the |
%% | author is included. Neither P.S.I. nor the author assume any |
%% | responsibility for the use of this software outside of P.S.I.|
%% +--------------------------------------------------------------+
%%
%% Project . . . . . . . . . . : SINQ
%% Brief Document Title . . . . : Specification of SinqHM Histogram Memory
%% Author . . . . . . . . . . . : D.Maden
%% Date of creation . . . . . . : 2-Apr-1997
%%
%% Updates:
%% 2-Apr-1997 DM. Initial Latex Version.
%% 1.3a 3-Dec-1998 DM. Add details of SQHM__TOF configuration.
%% 1.4a 15-Jun-1999 DM. Add details of SQHM_MERGE command.
%% 1.4b 17-Aug-1999 DM. Rename SQHM_MERGE as SQHM_PROJECT.
%%====================================================================
%% To process this file on PSICL0:
%%
%% $ import tex
%% $ set default usr_scroot:[maden]
%% $ copy lnsa09::tas_src:[psi.notes]hist_mem_spec.tex []
%% $ copy lnsa09::tas_src:[psi.notes]hist_mem_spec_fig%.ps []
%% $ copy lnsa09::tas_src:[psi.notes]psi_logo.ps,sinq_logo []
%% $ latex hist_mem_spec
%% $ dvips/printer=lps20 hist_mem_spec
%% $ print/noti/noflag/par=(side=two,page_orientation=portrait) -
%% /que=whga_u119_ps1 hist_mem_spec.ps
%%====================================================================
%%
\addtolength{\textheight}{40mm}
\setlength{\textwidth}{160mm}
\setlength{\oddsidemargin}{8mm}
\setlength{\evensidemargin}{-10mm}
\setlength{\topmargin}{-20mm}
%
\setcounter{tocdepth}{2}
%
\parskip 1.0ex plus 5pt minus 5pt % Space between paragraphs.
%%\setlength{\parindent}{0em}
%
%%%\rc{\thepage}{\arabic{page}%
%%% \setcounter{footnote}{0}}
\rc{\topfraction}{0.9}
\rc{\bottomfraction}{0.9}
\nc{\botfigrule}{\vspace*{-3pt}%
\hspace*{\fill}\rule{0.75\columnwidth}{0.4pt}\hspace*{\fill}%
\vspace*{-2.6pt}}
\nc{\topfigrule}{\vspace*{-3pt}%
\hspace*{\fill}\rule{0.75\columnwidth}{0.4pt}\hspace*{\fill}%
\vspace*{-2.6pt}}
%
\nc{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\let\PBS=\PreserveBackslash % shorthand
%
% Define "\usc" to get a proper underscore!!
\nc{\usc}{\protect\makebox[0.6em]{\protect\rule{0.5em}{0.1ex}}}
%
\nc{\camac}{\protect\makebox[4.1em][l]{CAMAC}}
\nc{\musr}{\protect\makebox[2.1em][l]{$\mu$SR}}
%
\nc{\myfile}{tas{\usc}src:[psi.notes]hist{\usc}mem{\usc}spec.tex}
%
\nc{\Topbox}[1]{
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){120}}
\put(120,7){\line(0,-1){7}}
\put(30,7){\line(0,-1){1}}
\put(60,7){\line(0,-1){1}}
\put(90,7){\line(0,-1){1}}
\put(60,3.5){\makebox(0,0){\textsf{#1}}}
\put(0,7){\makebox(5,3)[lt]{\textsf{\tiny{31}}}}
\put(115,7){\makebox(5,3)[rt]{\textsf{\tiny{0}}}}
}
%
\nc{\Midbox}[1]{
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){120}}
\put(120,7){\line(0,-1){7}}
\put(30,7){\line(0,-1){1}}
\put(60,7){\line(0,-1){1}}
\put(90,7){\line(0,-1){1}}
\put(60,3.5){\makebox(0,0){\textsf{#1}}}
}
%
\nc{\Midwordbox}[2]{
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){120}}
\put(120,7){\line(0,-1){7}}
\put(30,7){\line(0,-1){1}}
\put(60,7){\line(0,-1){7}}
\put(90,7){\line(0,-1){1}}
\put(30,3.5){\makebox(0,0){\textsf{#1}}}
\put(90,3.5){\makebox(0,0){\textsf{#2}}}
}
%
\nc{\Midbytebox}[4]{
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){120}}
\put(120,7){\line(0,-1){7}}
\put(30,7){\line(0,-1){7}}
\put(60,7){\line(0,-1){7}}
\put(90,7){\line(0,-1){7}}
\put(15,3.5){\makebox(0,0){\textsf{#1}}}
\put(45,3.5){\makebox(0,0){\textsf{#2}}}
\put(75,3.5){\makebox(0,0){\textsf{#3}}}
\put(105,3.5){\makebox(0,0){\textsf{#4}}}
}
%
\nc{\Midbody}[1]{
\put(0,0){\line(0,1){7}}
\put(120,7){\line(0,-1){7}}
\put(0,7){\line(1,0){1}}
\put(120,7){\line(-1,0){1}}
\put(60,3.5){\makebox(0,0){\textsf{#1}}}
}
%
\nc{\Midbodydashed}[1]{
\put(0,0){\multiput(0,1)(0,2){3}{\line(0,1){1}}}
\put(120,0){\multiput(0,1)(0,2){3}{\line(0,1){1}}}
\put(0,7){\line(1,0){1}}
\put(120,7){\line(-1,0){1}}
\put(60,3.5){\makebox(0,0){\textsf{#1}}}
}
%
\nc{\Botbox}[1]{
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){120}}
\put(120,7){\line(0,-1){7}}
\put(0,0){\line(1,0){120}}
\put(30,7){\line(0,-1){1}}
\put(60,7){\line(0,-1){1}}
\put(90,7){\line(0,-1){1}}
\put(60,3.5){\makebox(0,0){\textsf{#1}}}
}
%
\nc{\Botbody}[1]{
\put(0,0){\line(0,1){7}}
\put(120,7){\line(0,-1){7}}
\put(0,0){\line(1,0){120}}
\put(0,7){\line(1,0){1}}
\put(120,7){\line(-1,0){1}}
\put(30,0){\line(0,1){1}}
\put(60,0){\line(0,1){1}}
\put(90,0){\line(0,1){1}}
\put(60,3.5){\makebox(0,0){\textsf{#1}}}
}
%
\nc{\Botwordbox}[2]{
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){120}}
\put(120,7){\line(0,-1){7}}
\put(0,0){\line(1,0){120}}
\put(30,7){\line(0,-1){1}}
\put(60,7){\line(0,-1){7}}
\put(90,7){\line(0,-1){1}}
\put(30,3.5){\makebox(0,0){\textsf{#1}}}
\put(90,3.5){\makebox(0,0){\textsf{#2}}}
}
%
\nc{\Topwbox}[2]{ % Same as \Topbox but with width arg.
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}%
\line(0,-1){7}}
\put(#1,6){\line(0,1){1}}
\put(#1,0){\put(#1,6){\line(0,1){1}}}
\put(#1,0){\put(#1,0){\put(#1,6){\line(0,1){1}}}}
\put(#1,0){\put(#1,3.5){\makebox(0,0){\textsf{#2}}}}
\put(0,7){\makebox(5,3)[lt]{\textsf{\tiny{31}}}}
\put(#1,0){\put(#1,0){\put(#1,0){\put(#1,0){\put(-5,7){%
\makebox(5,3)[rt]{\textsf{\tiny{0}}}}}}}}
}
%
\nc{\Midwbox}[2]{ % Same as \Midbox but with width arg.
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}%
\line(0,-1){7}}
\put(#1,6){\line(0,1){1}}
\put(#1,0){\put(#1,6){\line(0,1){1}}}
\put(#1,0){\put(#1,0){\put(#1,6){\line(0,1){1}}}}
\put(#1,0){\put(#1,3.5){\makebox(0,0){\textsf{#2}}}}
}
%
\nc{\Midwwordbox}[3]{ % Same as \Midwordbox but with width arg.
\put(0,0){\line(0,1){7}}
\put(0,7){\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}%
\line(0,-1){7}}
\put(#1,6){\line(0,1){1}}
\put(#1,0){\put(#1,0){\line(0,1){7}}}
\put(#1,0){\put(#1,0){\put(#1,6){\line(0,1){1}}}}
\put(#1,3.5){\makebox(0,0){\textsf{#2}}}
\put(#1,0){\put(#1,0){\put(#1,3.5){\makebox(0,0){\textsf{#3}}}}}
}
%
\nc{\Botwwordbox}[3]{ % Same as \Botwordbox but with width arg.
\put(0,0){\line(0,1){7}}
\put(0,0){\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}%
\line(0,1){7}}
\put(0,7){\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}\line(1,0){#1}}
\put(#1,6){\line(0,1){1}}
\put(#1,0){\put(#1,0){\line(0,1){7}}}
\put(#1,0){\put(#1,0){\put(#1,6){\line(0,1){1}}}}
\put(#1,3.5){\makebox(0,0){\textsf{#2}}}
\put(#1,0){\put(#1,0){\put(#1,3.5){\makebox(0,0){\textsf{#3}}}}}
}
%
\nc{\Tabrow}[3]{%
\textsf{#1} & \textsf{\textbf{#2}} & \textsf{#3} \\%
}%
%
\nc{\sfbf}[1]{\textsf{\textbf{#1}}}
%
\setlength{\unitlength}{1.0mm}
%
% Define insertplot is insert a PostScript plot.
% Usage:
% \insertplot{<file>}{<height>}{<left-margin>}
% Example:
% \insertplot{dvipsdoc.pal}{70mm}{5.0mm}
%
\def\insertplot#1#2#3{\par
\hbox{%
\hskip #3
\vbox to #2{
\vfil
\special{ps: plotfile #1}
}%
}
}
%
\title{The SINQ Histogram Memory \\ SinqHM}
\author{D. Maden}
\date{\mydate}
%
\pagestyle{empty}
\begin{document}
\begin{center}\begin{picture}(160,242)(16,5)
\put(0,0){
\linethickness{0.80mm}
\put(0, 0){\framebox(180,255){~}}
% Horizontal lines - bottom to top
\linethickness{0.40mm}
\put(0, 12){\line(1,0){180}}
\linethickness{0.30mm}
\multiput(124, 17)(0,5){8}{\line(1,0){56}}
\linethickness{0.60mm}
\put(124, 63){\line(1,0){56}}
\put(124, 57){\line(1,0){56}}
\linethickness{0.40mm}
\put(0, 76){\line(1,0){180}}
\put(0, 98){\line(1,0){180}}
\put(0, 154){\line(1,0){180}}
\put(0, 184){\line(1,0){180}}
\put(0, 206){\line(1,0){180}}
\put(0, 218){\line(1,0){180}}
\linethickness{0.80mm}
\put(0, 230){\line(1,0){180}}
% Vertical lines - left to right
\linethickness{0.40mm}
\put( 40, 230){\line(0,1){25}}
\put( 60, 206){\line(0,1){12}}
\put( 90, 0){\line(0,1){12}}
\put(120, 184){\line(0,1){46}}
\put(140, 218){\line(0,1){37}}
%
\linethickness{0.40mm}
\put(124, 12){\line(0,1){64}}
\put(138, 12){\line(0,1){51}}
\linethickness{0.60mm}
\put(152, 12){\line(0,1){51}}
\linethickness{0.40mm}
\put(166, 12){\line(0,1){51}}
%
\put(50, 232){\shortstack{%
{\huge Paul Scherrer Institut} \\
{W\"{u}renlingen und Villigen} \\
{\large CH-5232 Villigen PSI} \\[1.0ex]
{\tiny{\em (N\"{u}r f\"{u}r internen Gebrauch)}}}}
\put(160, 250){\makebox(0,0){\Large Projekt}}
\put( 2, 228){\makebox(0,0)[l]{\tiny Klassifizierung:}}
\put(122, 228){\makebox(0,0)[l]{\tiny Kurzzeichen:}}
\put(142, 228){\makebox(0,0)[l]{\tiny PSP-Nr:}}
\put( 2, 216){\makebox(0,0)[l]{\tiny Ersatz f\"{u}r:}}
\put( 62, 216){\makebox(0,0)[l]{\tiny Erstellungs/\"{A}nderungsdatum:}}
\put(122, 216){\makebox(0,0)[l]{\tiny Doku-Nr:}}
\put( 2, 204){\makebox(0,0)[l]{\tiny Federf. Autor:}}
\put( 2, 201){\makebox(0,0)[l]{\tiny Co-autoren:}}
\put(122, 204){\makebox(0,0)[l]{\tiny Unterschrift Federf. Autor:}}
\put( 2, 182){\makebox(0,0)[l]{\tiny Titel:}}
\put( 2, 152){\makebox(0,0)[l]{\tiny Kurztext bzw. Inhalt:}}
\put(110, 152){\makebox(0,0)[l]{\tiny Doppelseitig:}}
\put(128, 152){\makebox(0,0)[l]{\tiny Ja}}
\put(135, 152){\makebox(0,0)[l]{$\bullet$}}
\put(128, 149){\makebox(0,0)[l]{\tiny Nein}}
\put(135, 149){\makebox(0,0)[l]{$\circ$}}
\put(145, 152){\makebox(0,0)[l]{\tiny Seitenzahl total:}}
\put( 2, 96){\makebox(0,0)[l]{\tiny Schlagw\"{o}rter/Suchkriterien:}}
\put( 2, 74){\makebox(0,0)[l]{\tiny Verteiler:}}
\put(126, 74){\makebox(0,0)[l]{\tiny Erstellereigene Doku-Nr:}}
\put(131, 60){\makebox(0,0){PSP}} \put(145, 60){\makebox(0,0){Visum}}
\put(159, 60){\makebox(0,0){PSP}} \put(173, 60){\makebox(0,0){Visum}}
%
\put(131,54.5){\makebox(0,0){\tiny 8}}
\put(131,49.5){\makebox(0,0){\tiny 82}}
\put(131,44.5){\makebox(0,0){\tiny 83}}
\put(131,39.5){\makebox(0,0){\tiny 84}}
\put(131,34.5){\makebox(0,0){\tiny 85}}
\put(131,29.5){\makebox(0,0){\tiny 86}}
\put(131,24.5){\makebox(0,0){\tiny 89}}
%
\put(159,54.5){\makebox(0,0){\tiny 811}}
\put(159,49.5){\makebox(0,0){\tiny 812}}
\put(159,44.5){\makebox(0,0){\tiny 813}}
\put(159,39.5){\makebox(0,0){\tiny 814}}
\put(159,34.5){\makebox(0,0){\tiny 815}}
\put(159,29.5){\makebox(0,0){\tiny 816}}
\put(159,24.5){\makebox(0,0){\tiny 817}}
%
\put( 2, 10){\makebox(0,0)[l]{\tiny Datum:}}
\put( 47, 10){\makebox(0,0)[l]{\tiny Visum FBV:}}
\put( 92, 10){\makebox(0,0)[l]{\tiny Datum:}}
\put(137, 10){\makebox(0,0)[l]{\tiny Visum PL:}}
%
\put(2,230){\epsfig{bbllx=93,bblly=697,bburx=207,bbury=754,%
file=psi_logo.ps,%
height=20mm,clip=}}
%
\put(150,232){\epsfig{bbllx=122,bblly=700,bburx=201,bbury=740,%
file=sinq_logo.ps,%
height=14mm,clip=}}
%
\put( 25,223){\makebox(0,0)[l]{Basisunterlage}}
\put(130,223){\makebox(0,0){FI}}
\put(160,223){\makebox(0,0){89}}
\put( 90,210){\makebox(0,0){\mydate}}
\put(150,210){\makebox(0,0){891/MD36-701.-}}
\put( 25,195){\makebox(0,0)[l]{Maden, D}}
\put( 25,175){\makebox(0,0)[l]{The SINQ Histogram Memory, SinqHM}}
\put(170,152){\makebox(0,0){39}}
\put( 25,135){\shortstack[l]{%
This note specifies the interface between the data \\
acquisition software and the SINQ histogramming memories}}
\put( 25, 86){\shortstack[l]{%
\tiny HISTOGRAM MEMORY \\
\tiny SINQHM}}
\put( 25, 60){\shortstack[l]{%
\tiny D. Maden, WHGA/247 \\
\tiny SINQ-Sekretariat, WHGA/249}}
\put(150, 69){\makebox(0,0){\myident}}
}
\end{picture}\end{center}
\cleardoublepage
%
\setcounter{page}{1}
%
\maketitle
%
\thispagestyle{myheadings}
\rc{\thepage}{}
\markboth%
{\rm \roman{page}\hspace*{-8mm}\underline{\hspace*{126mm}SinqHM \myident}}%
{\underline{\rm SinqHM \myident \hspace*{44mm} File = \myfile}}
%
\begin{abstract}
\noindent This note specifies the interface
between the data acquisition software and
the SINQ histogramming memories.
\end{abstract}
%
\tableofcontents
%
\cleardoublepage
\rc{\thepage}{\arabic{page}}
%
\pagestyle{myheadings}
\markboth{\hspace*{-8mm} \underline{\rm \hspace*{126mm} SinqHM \myident}}%
{\underline{\rm SinqHM \myident \hspace*{126mm}} \hspace*{-8mm}}
%
\section{Introduction}
% ======================
%
This note specifies the interface between the SINQ histogram memory,
SinqHM, and the data acquisition software.
The histogram memory is based on a VME Power-PC single board
computer (MVME-1603). In the first instance, access to the memory
from the data acquisition software will be via its Ethernet interface.
At a later date, it is possible to consider a read-out of the memory
either via the VME bus or via a higher speed network technology. The
client/server nature of the specification should make such extensions
relatively simple.
The initial version of this specification, therefore, is concerned
exclusively with defining a TCP/IP client/server model which will
allow the control and read-out of the histogram memory via its
Ethernet interface. The histogram memory will act as a TCP/IP
server offering data access to several data acquisition clients
simultaneously. Many of the concepts described here are similar to
those implemented in the histogram memory server package which is
in use on \musr experiments at PSI \cite{CTN94005}.
This document assumes a certain familiarity with the C programming
language. The header file {\em SinqHM{\usc}def.h} defines all data
structures and symbols referred to in the text.
%
\section{Histogramming Concepts and Definitions}
% ================================================
%
It appears that there are differences in terminology associated with
histograms and the histogramming process according to one's scientific
background. These differences can naturally lead to some confusion.
The purpose of this section is to try to remove this confusion by
describing the process of histogramming in abstract terms and defining
the various terms as used in this document. Some of the limitations
implicit in the SinqHM implementation will also be discussed.
The description of PAW, the Physics Analysis Workstation software
package from the CERN
Program Library \cite{PAW}, should be consulted for more
information\footnote{Warning: this reference naturally presents the high
energy physicist's histogramming terminology!}.
A {\em histogram} is a frequency distribution of an {\em
Ntuple}\footnote{An {\em Ntuple} is a list of identical data structures
where each element describes a single event. In the simple
case typical of neutron diffraction experiments, an element of the Ntuple
might be a single integer giving the number of the counter which detected
a neutron. In the more complex situation of a signal from a position
sensitive detector, an element of the Ntuple might be several integers
giving the various ADC values associated with the signal.}. Each element
of the {\em Ntuple} specifies a measured event such as a detected
neutron. The processing of an element may generate one or more
quantities characterising the event. The process of generating a
frequency distribution of these quantities is referred to as {\em
histogram filling} or simply {\em histogramming}.
The number of quantities which are used to define an event
determines the dimension of the histogram. For SinqHM, the events of
interest are detected neutrons and the various dimensions of a histogram
might be:
\begin{itemize}
\item the x- or y-coordinate of a position sensitive detector;
\item the time-of-flight of a neutron;
\item the wire number of a one-dimensional counter array or
the counter number of an array of counters.
\end{itemize}
%
The histogram is defined by dividing each of its dimensions into
a number of intervals called {\em bins} or {\em cells}. Once the bin
boundaries in each dimension have been specified, the total number of
bins can be calculated and space may be reserved for compiling the
histogram. SinqHM refers to this operation as {\em configuring} the
histogram memory. Other histogram packages such as HBOOK \cite{PAW} refer
to it as {\em booking} the histogram.
In the general case, the bin boundaries are floating point numbers. It is
also possible that bin boundaries along a particular axis are not equally
spaced. A further consideration when configuring the histogram memory is
the maximum number of events to be recorded in each bin. This determines
the number of bytes of computer memory to be reserved for each
bin\footnote{SinqHM allows the user to specify that each bin be associated
with either 1, 2 or 4 bytes of storage.}. There is
naturally a trade-off between available computer memory, the desired
experimental resolution and the statistical errors. The
action to be taken by the histogramming process on bin overflow should
also be specified\footnote{SinqHM will wrap
overflowed bins to zero by default. Other actions are possible (see
Section~\ref{Sect-sinqhm-config})}.
Once storage space for the histogram has been reserved, the histogram may
by {\em filled}. The process of filling a histogram consists of
processing each element of the Ntuple to obtain the index of a bin in the
histogram corresponding to the element. This bin is then incremented.
In the general case, it is conceivable that the bin increment be weighted
in some way so that the bin content could be a floating point number
rather than a simple counter.
The Ntuple to be processed by SinqHM consists of events occuring in
real-time during an experimental run. It is therefore vital that the
event processing should be efficient in order to minimise the
experimental deadtime. For this reason and also because the data to be
processed by SinqHM is mainly of integer type,
the histogramming procedures implemented in SinqHM are restricted to
integer quantities, i.e. the bin boundaries are specified as
integers and the histogram bin content is a simple integer counter.
Updating a histogram involves adding one to the contents of a single bin.
In many cases, the
dimension of a histogram is somewhat arbitrary since,
in practice, a histogram is stored as a one dimensional array in
computer memory: an $m \times n$ 2-dimensional histogram may equally
well be considered as $m$ 1-dimensional histograms with $n$ bins each.
SinqHM does not have a well-defined policy in this respect. In general,
though, the dimension of a histogram as perceived by SinqHM is a
function of the number of values used to access a bin. For example:
\begin{itemize}
\item On the FOCUS time-of-flight instrument, a histogram bin is defined
by the number of the counter which detected the neutron and the time at
which the neutron was detected after the chopper's start pulse. SinqHM
considers this to be a 2-dimensional histogram.
\item On the SANS small angle scattering instrument, the x/y position
of the neutron in the 128~$\times$~128 2-dimensional detector is
encoded into a single 14 bit integer. SinqHM therefore considers
this to be a 1-dimensional histogram with 16384 bins. Physically,
however, a 2-dimensional interpretation would be more meaningful. If the
instrument is operated in time-of-flight mode, the result is a
2-dimensional histogram with the x/y position as one dimension
and time as the second dimension. It is also possible to operate the
instrument in {\em stroboscopic} mode in which a cyclic variation
in the conditions of the sample could be considered as yet another
dimension of the histogram. However, in the specification of SinqHM,
it has been decided to consider instead that the stroboscopic phase
be treated as a histogram selector rather than as an extra histogram
dimension.
\item On experiments with polarised neutrons, the up/down polarity
could be used as an extra dimension to the histogram. The histogram
would only have
two bins in this dimension. As with the SANS stroboscopic mode, it
has been decided to treat the up/down bit as a histogram selector
rather than as an extra histogram dimension.
\end{itemize}
\noindent The problem of selecting the number of bytes of computer memory
associated with each bin has already been mentioned. In some
histogramming package implementations, this
parameter is referred to as the {\em bin-width}, i.e. its width in
computer memory. In this document, however, this parameter will be
referred to as {\em bytes-per-bin}. The term {\em bin-width} will be used
to refer to the physical width of the bin. For example, in a time-of
flight spectrum, the {\em bin-width}\footnote{The terms {\em bin-span} or
{\em span} may sometimes be used instead.} might refer to the time in
nsecs spanned by the bin and, in the case where the parameter being
histogrammed is a counter number, {\em bin-width} will refer to the
number of counters combined into one bin. In this latter case, the term
{\em bin-compression} may be used instead.
%
\section{Hardware Overview}
% ===========================
%
\label{Sect-hardware}
%
The data acquisition hardware of a typical SINQ instrument is as
shown in Figure~\ref{Fig-hard-config}. The various types of multi-detector
which are
planned for SINQ instruments can be interfaced via the
multi-detector interface to a 100 Mbaud fibre optic link to the
histogram memory. The multi-detector interface is set up via
front-panel switches and via its serial RS-232-C interface.
An inhibit signal\footnote{The inhibit
signal can, for
example, be generated by the {\em rate-low} output from an EL737
Neutron Counter. It is therefore referred to as {\em Neutron Rate Low}
or {\em NRL}.} can be input to the multi-detector interface. The
state of this signal is transmitted along with the detector data
to the histogram memory and will be used to suppress data
acquisition by the histogram memory.
\begin{figure}[b]%
\begin{center}%
\epsfig{bbllx=82,bblly=35,bburx=552,bbury=470,%
file=hist_mem_spec_fig1.ps,%
height=147mm,clip=}%
\caption{Typical SINQ Instrument Configuration}%
\label{Fig-hard-config}%
\end{center}%
\end{figure}
The host communicates with the various serial devices, which are used to
control the instrument, via the TCP/IP based terminal server.
The main interaction between the physicists and the instrument
hardware is via the {\em host} computer.
%
\section{Software Components}
% =============================
%
The software components of the SinqHM sub-system are shown in
Figure~\ref{Fig-soft-comp}.
The SinqHM-master process is responsible for creating
offspring processes which then run asynchro\-nously under the
PowerPC's operating system. When the SinqHM sub-system is first
started, only SinqHM-master is running. It is waiting to accept a
connection on its TCP/IP listener port from a client whose first
job is to ``configure'' SinqHM. ``Configuring the Histogram Memory''
involves specifying the mode in which the histogram memory is to
operate, reserving and initialising the histogram memory buffer,
creating the necessary semaphores for synchronising access to this
buffer and activating the {\em histogram filler} background process.
\begin{figure}[b]%
\begin{center}%
\epsfig{bbllx=102,bblly=40,bburx=535,bbury=590,%
file=hist_mem_spec_fig2.ps,%
height=165mm,clip=}%
\caption{SinqHM Software Components}%
\label{Fig-soft-comp}%
\end{center}%
\end{figure}
The main activity of the {\em filler} process is to read data from the
fibre-optic link and update the defined histograms accordingly. It
will use the RS-232-C connection to the front-end electronics, as
described in Section~\ref{Sect-mdi-comm}, for forwarding any necessary
configuration information to the electronics. It is also possible
to instruct {\em filler} to suspend and resume data acquisition but it
is expected that this will not be the normal method used to
control data acquisition. Instead, the data acquisition software
(running on the host computer) will usually inhibit data
acquisition by inhibiting the EL737 neutron counter. This will
then cause suspension of data acquisition by {\em filler} via the
inhibit signal to the multi-detector interface (see
Fig.~\ref{Fig-hard-config}).
Once SinqHM has been configured, SinqHM-master enters its normal
operating mode where it will accept requests from clients. These
requests may either be of a one-off nature or they may involve the
creation of a SinqHM-server process for a long-term connection
between the client and the SinqHM system. One-off requests are
suitable for infrequent operations such as the setting of the contents of
the histogram memory to zero in preparation for a new data acquisition
run. A long-term connection would be suitable for a client which is
generating an updating display of the histogram contents.
Figure~\ref{Fig-soft-comp} shows the
situation in which SinqHM has been configured
and has set up long-term connections for 3 clients. One of these
clients could, for example, be responsible for making a regular
archive of the histogram contents to disk file while the other two
could be programs which periodically show the current contents of
all or part of the histogram memory buffer. These two display
programs could quite well be running on two different hosts such
as the DECstation in the experimental barrack and a workstation in
a physicist's office.
The general procedure for configuring SinqHM is described in
Section~\ref{Sect-config-sinqhm} whereas
the general procedure for creating a long-term
connection to a SinqHM-server is described in
Section~\ref{Sect-serv-setup}. The
detailed definition of messages to SinqHM is given in
Section~\ref{Sect-sinqhm-comm}.
\begin{figure}[b]%
\begin{center}%
\epsfig{bbllx=136,bblly=40,bburx=507,bbury=480,%
file=hist_mem_spec_fig3.ps,%
height=155mm,clip=}%
\caption{Configuring SinqHM}%
\label{Fig-conf-sinqhm}%
\end{center}%
\end{figure}
\section{Configuring the SinqHM Master}
% =======================================
%
\label{Sect-config-sinqhm}
%
The general procedure for configuring SinqHM is shown in
Figure~\ref{Fig-conf-sinqhm}.
Note that the creation of the ``Histogram Filler'' is indicated as
being via a Posix {\em fork} operation. Unfortunately, the operating
system which is being used to develop SinqHM on the PowerPC,
VxWorks, does not provide the {\em fork} system call. The {\em taskSpawn}
system call is used instead.
The details of the configure request which is sent to SinqHM
Master are given in Section~\ref{Sect-sinqhm-config}.
This request will define the type
of detector which is connected to the front-end electronics, the
size and number of histograms required, whether ``stroboscopic''
(gummi) mode is to be used to switch between histograms as a result
of indicators in the data flow from the detector, etc., etc.
\section{Setting up a Client/Server TCP/IP Data Acquisition Connection}
% =======================================================================
%
\label{Sect-serv-setup}
%
Once SinqHM has been configured, SinqHM-master will accept
requests from clients for the establishment of a long-term
client/server connection. The procedure for doing this is shown in
Figure~\ref{Fig-tcpip-setup}.
Note that the connection is a two step process. This is
{\bf not} the normal procedure for establishing TCP/IP client/server
connections.
\begin{figure}[b]%
\begin{center}%
\epsfig{bbllx=141,bblly=37,bburx=500,bbury=565,%
file=hist_mem_spec_fig4.ps,%
height=170mm,clip=}%
\caption{TCP/IP Client/Server Setup}%
\label{Fig-tcpip-setup}%
\end{center}%
\end{figure}
The normal procedure would be for a server to invoke the {\em accept}
procedure to await a connection from a client. The return value of
the procedure would be a socket which could be used for communicating with
the client. Since a server usually wishes to support several
clients simultaneously, it would be
usual for the server to {\em fork} at this
point in order to create a child process which would then handle
the communication with the client using this socket. The parent
returns to the {\em accept} call to await connections from further
clients via the original socket. In this way, it is simple to
generate single-threaded code in the server and to let the
operating system handle the multi-processing aspects of the
system.
However, when the Histogram Memory package was implemented
for the \musr experi\-ments at PSI using the VAXeln real-time
operating system, it was found that the POSIX version of the {\em fork}
procedure created a child process with too much autonomy for it to
be able to use a socket passed to it by its parent. Because of
some of the conditions which the POSIX standard imposes on child
processes created via the {\em fork} procedure\footnote{e.g. a child
should be able to survive the termination of its parent.}, it is
possible that other real-time operating systems may also suffer from
this same problem.
In order not to abandon POSIX compatibility as a goal
in the implementation of the SinqHM package, it has been decided to use
the same two step procedure for setting up client/server connections for
SinqHM. The procedure is as follows:
\begin{itemize}
\item The server establishes a base port and waits for clients to
connect to it by calling the {\em accept} procedure.
\item The client connects to the base port and sends a
$<$serve-me$>$ request.
\item The server responds by finding a free port (it maintains a pool
of ports to be used by its children), setting a global semaphore
to the {\em claimed} state, {\em forking} to create a child and
informing
the child which port it is to use. From now on, the terms
{\em server-master} and {\em server-child} will be used to
distinguish the
two server processes.
\item The server-master then waits for the server-child to set the
global semaphore to the {\em released} state to indicate that it has
completed its initialisation.The server-child creates a socket
of its own, {\em binds} it to the port specified by the server-master,
sets it to be a {\em listener} and then releases the semaphore on
which the server-master is waiting. It then waits via the {\em accept}
procedure for the client to connect to it.
\item On continuing from the wait for the global semaphore to become
free, the server-master sends the port number of the
server-child to the client. It then closes this connection and
loops to {\em accept} a further connection to its base port from
another client.
\item The client, having received the port number from the
server-master, closes its connection with server-master, creates
a new socket and uses it to connect to the server-child.
\item This completes the setup of the client/server connection to
SinqHM.
\end{itemize}
\newpage
%
\section{Communication with SinqHM}
% ===================================
%
\label{Sect-sinqhm-comm}
%
All communication with SinqHM (master or child)
is initiated from the client side by sending a message of 64 bytes. The
format\footnote{Data structures and symbols are defined in
the {\em SinqHM{\usc}def.h} header file.} of the message is defined by
{\em struct req{\usc}buff{\usc}struct} and
has the form:
%
\begin{center}\begin{picture}(125,42)(0,-42)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{command}}
\put(0,-21){\Midbox{}}
\put(0,-28){\Midbodydashed{command-body (56 bytes)}}
\put(0,-35){\Midbody{}}
\put(0,-42){\Botbody{}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{90mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{Value = 0x12345678\footnotemark. It %
allows SinqHM to decide what byte swapping %
is required, if any.}
\Tabrow{command}{cmnd}{Command verb.}
\Tabrow{command-body}{}{56 bytes of command dependent data.}
\hline
\end{tabular}\end{center}
\footnotetext{For the benefit of readers not familiar with the C
programming language, {\em 0x} indicates a hexadecimal number.}
%
If there are data associated with the command (e.g. the SQHM{\usc}WRITE
command), the command may be followed by extra data. In such cases,
the parameters in the command-body will indicate to SinqHM how many
extra bytes of data it must receive. The client must not send any further
commands until it has sent the indicated number of data bytes.
When SinqHM has completed the command, it returns a status
response to the client. The response to all commands is a 64 byte
message defined by {\em struct rply{\usc}buff{\usc}struct}. Its format is:
%
\begin{center}\begin{picture}(125,49)(0,-49)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{status}}
\put(0,-21){\Midbox{sub-status}}
\put(0,-28){\Midbox{}}
\put(0,-35){\Midbodydashed{reply-body (52 bytes)}}
\put(0,-42){\Midbody{}}
\put(0,-49){\Botbody{}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{90mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{Value = 0x12345678. It allows the client %
to decide what byte swapping is required, %
if any.}
\Tabrow{status}{status}{Status code}
\Tabrow{sub-status}{sub{\usc}status}{Secondary status code}
\Tabrow{reply-body}{}{52 bytes of command dependent data.}
\hline
\end{tabular}\end{center}
%
The following values for status are possible:
%
{\sffamily\begin{center}\begin{tabular}{|lr|lr|} \hline
KER{\usc}{\usc}SUCCESS & 1 &
KER{\usc}{\usc}BAD{\usc}VALUE & -6 \\
KER{\usc}{\usc}BAD{\usc}CREATE & -2 &
KER{\usc}{\usc}BAD{\usc}RECV & -14 \\
KER{\usc}{\usc}BAD{\usc}STATE & -4 &
KER{\usc}{\usc}BAD{\usc}ALLOC & -16 \\
\hline
\end{tabular}\end{center}}
%
\noindent Depending on the command (e.g. the SQHM{\usc}READ command) and
the values of \sfbf{status} and
\sfbf{sub{\usc}status}, the status response may be
followed by extra data. In such cases, the parameters in the reply-body
will indicate to the client how many extra bytes of data it must
receive. These extra bytes must be read by the client before further
commands are sent to SinqHM.
\noindent If the value of \sfbf{status} indicates an error,
the reply-body will contain a zero-terminated ASCII string which may help
in locating the problem.
%
\begin{itemize}
\item[{\bf Note:}] In the various diagrams of commands and status
messages which follow, only the defined fields will be
shown. The bytes which must be added as padding to
bring the total message length up to 64 bytes will not
be shown.
\end{itemize}
The following values of \sfbf{cmnd} are recognised by SinqHM:
%
{\sffamily\begin{center}\begin{tabular}{|p{40mm}cp{75mm}|} \hline
\textbf{Symbolic Name} & \textbf{Value} & \textbf{Description} \\
\hline
SQHM{\usc}CNCT & 0x01 & Create a SinqHM-server (child) and %
open a connection to it. \\
SQHM{\usc}CLOSE & 0x02 & Close connection to SinqHM-server. \\
SQHM{\usc}CONFIG & 0x03 & Configure SinqHM. \\
SQHM{\usc}DAQ & 0x04 & Functions related to data %
acquisition. \\
SQHM{\usc}DBG & 0x05 & Set debug level. \\
SQHM{\usc}DECONFIG & 0x06 & De-configure SinqHM. \\
SQHM{\usc}EXIT & 0x07 & Instruct SinqHM to close down. \\
SQHM{\usc}IDENT & 0x0e & Get SinqHM identification. \\
SQHM{\usc}PROJECT & 0x0d & Read projected histogram data. \\
SQHM{\usc}READ & 0x08 & Read an area of histogram memory. \\
SQHM{\usc}SELECT & 0x09 & Select active histogram. \\
SQHM{\usc}STATUS & 0x0a & Get SinqHM status. \\
SQHM{\usc}WRITE & 0x0b & Pre-set an area of histogram %
memory. \\
SQHM{\usc}ZERO & 0x0c & Zero an area of histogram memory. \\
\hline
\end{tabular}\end{center}}
%
The various commands are detailed in the following subsections.
The programs SINQHM{\usc}CTRL and SINQHM{\usc}CLIENT, described in
Sections~\ref{Sect-sinqhm-ctrl} and \ref{Sect-sinqhm-client}, are
utility programs which may be used to
issue most of these commands to SinqHM.
%
\newpage
%
\subsection{SQHM{\usc}CNCT}
% ===========================
%
The SQHM{\usc}CNCT command is the first step in establishing a
client/server relationship with SinqHM. It causes SinqHM-master to
create a SinqHM-server process to which one may open a connection
as a client. This command may only be sent after SinqHM has been
configured. The format of the SQHM{\usc}CNCT command is:
%
\begin{center}\begin{picture}(125,28)(0,-28)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}CNCT}}
\put(0,-21){\Midbox{max-packet-size}}
\put(0,-28){\Botbox{startup-mode}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{80mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}CNCT}{cmnd}{Command verb}
\Tabrow{max-packet-size}{u.cnct.max{\usc}pkt}{Maximum packet size
supported by client.}
\Tabrow{startup-mode}{u.cnct.strt{\usc}mode}{Startup mode of
SinqHM-server.}
\hline
\end{tabular}\end{center}
\sfbf{max{\usc}pkt} should be set to a proposed maximum
packet size in bytes\footnote{A value of 8192 is recommended. This is
the maximum value which is to be used for the {\em len} argument in
calls to the send/recv TCP/IP functions. Although the TCP/IP protocol
hides the underlying packet nature of network communications, it has been
found that the use of much larger values for {\em len} seems to cause
problems.} for communication with the server. The value should be at least
1024. SinqHM will respond with the actual value to be used. The
actual value will not be greater than \sfbf{max{\usc}pkt}.
The value of \sfbf{strt{\usc}mode} is passed by SinqHM-master
to the created SinqHM-server process. It should normally be set to zero.
If it is set non-zero, the server process will suspend itself as soon as
it is started. This is intended to allow the server process to be debugged
interactively.
In response to the SQHM{\usc}CNCT command, SinqHM-master allocates a
TCP/IP port number for a new server process, establishes the packet size
which the server should use and creates the server process. The server is
passed the value of the TCP/IP port number and the value of
\sfbf{strt{\usc}mode}. It then waits for the server to
initialise itself before returning a status response to the client. The
format of the response is shown below. Values of the
\sfbf{status} field may be:
%
{\sffamily\begin{center}\begin{tabular}{|p{40mm}p{100mm}|} \hline
KER{\usc}{\usc}SUCCESS & SinqHM-server started successfully.\\
KER{\usc}{\usc}BAD{\usc}STATE & SinqHM has not yet been configured.\\
KER{\usc}{\usc}BAD{\usc}CREATE & Creation of child process failed. The
cause is indicated by \textbf{sub{\usc}status}.
Possible values are: \\
& \hspace*{5mm} -1 Spawn failed. \\
& \hspace*{5mm} -2 No more ports available. \\
& \hspace*{5mm} -3 The child took more than 15 seconds to \\
& \hspace*{15mm} initialise itself. The child has been
terminated. \\
& \hspace*{5mm} -4 The child had a start-up problem. \\
\hline
\end{tabular}\end{center}}
%
\newpage
The format of the status response to a SQHM{\usc}CNCT command is:
%
\begin{center}\begin{picture}(125,112)(0,-112)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0, -14){\Midbox{status}}
\put(0, -21){\Midbox{sub-status}}
\put(0, -28){\Midbox{port-number}}
\put(0, -35){\Midbox{packet-size}}
\put(0, -42){\Midbox{hist-mode}}
\put(0, -49){\Midbox{number-hists}}
\put(0, -56){\Midbox{number-bins}}
\put(0, -63){\Midbox{bytes-per-bin}}
\put(0, -70){\Midbox{current-hist}}
\put(0, -77){\Midbox{max-free-block}}
\put(0, -84){\Midbox{total-bytes}}
\put(0, -91){\Midbox{low-cntr}}
\put(0, -98){\Midbox{low-bin}}
\put(0,-105){\Midbox{compress}}
\put(0,-112){\Botbox{up-time}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{80mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{status}{status}{Status code}
\Tabrow{sub-status}{sub{\usc}status}{Secondary status code}
\Tabrow{port-number}{u.cnct.port}{TCP/IP port number of SinqHM-server}
\Tabrow{packet-size}{u.cnct.pkt{\usc}size}{Client/server packet size}
\Tabrow{hist-mode}{u.cnct.hm{\usc}mode}{Histogram memory mode}
\Tabrow{number-hists}{u.cnct.n{\usc}hists}{Number of defined histograms}
\Tabrow{number-bins}{u.cnct.num{\usc}bins}{Number of bins per histogram}
\Tabrow{bytes-per-bin}{u.cnct.bytes{\usc}per{\usc}bin}{Number of bytes
per bin (1, 2 or 4)}
\Tabrow{current-hist}{u.cnct.curr{\usc}hist}{Currently selected histogram}
\Tabrow{max-free-block}{u.cnct.max{\usc}block}{Largest free memory block %
(in bytes)}
\Tabrow{total-bytes}{u.cnct.total{\usc}bytes}{Size of all defined histograms}
\Tabrow{low-cntr}{u.cnct.lo{\usc}cntr}{First defined counter}
\Tabrow{low-bin}{u.cnct.lo{\usc}bin}{Lower edge of first bin}
\Tabrow{compress}{u.cnct.compress}{Bin compression factor}
\Tabrow{up-time}{u.cnct.up{\usc}time}{SinqHM up-time in seconds}
\hline
\end{tabular}\end{center}
%
If the value of \sfbf{status} indicates success, the value of
\sfbf{port} is the
value to be used by the client in establishing its connection to
the SinqHM-server. \sfbf{pkt{\usc}size} will be the maximum
value of the {\em len}
argument which the server will use in calls to the {\em send/recv}
functions. The value will not be greater than
\sfbf{max{\usc}pkt}. The values
of \sfbf{hm{\usc}mode}, \sfbf{n{\usc}hists},
\sfbf{num{\usc}bins},
\sfbf{bytes{\usc}per{\usc}bin},
\sfbf{total{\usc}bytes},
\sfbf{lo{\usc}cntr}, \sfbf{lo{\usc}bin} and
\sfbf{compress} indicate the
configuration\footnote{Note: in TOF mode, it is possible to define a more
complex configuration than can be described in the 64 byte status
response. At present, there is no way of obtaining this detailed
information from SinqHM.} of the histogram memory (see
Sect.~\ref{Sect-sinqhm-config}).
\sfbf{curr{\usc}hist} indicates the currently selected
histogram (see Sect.~\ref{Sect-sinqhm-select}).
\sfbf{max{\usc}block} indicates
the maximum free memory block currently
available in the histogram memory. \sfbf{up{\usc}time}, which is set
whether or not \sfbf{status} indicates success, gives the time in seconds
since SinqHM-master was started.
%
\vspace*{20mm}
%
\subsection{SQHM{\usc}CLOSE}
% ============================
%
The SQHM{\usc}CLOSE command is used to terminate communication with
one's SinqHM-server. There are no command dependent parameters and
there is {\bf no status response}. The SinqHM-server will simply tidy up,
close its TCP/IP socket and exit.
The SQHM{\usc}CLOSE command will be ignored if issued to SinqHM-master.
%
\newpage
%
\subsection{SQHM{\usc}CONFIG}
% =============================
%
\label{Sect-sinqhm-config}
%
The SQHM{\usc}CONFIG command is used to configure SinqHM. It informs
SinqHM-master of the required histogram memory space, the type of
detector from which data will be coming and the mode in which
histograms are to be filled. Until SinqHM has been successfully
configured, it will not establish any client/server connections. The
format of the SQHM{\usc}CONFIG command is:
%
\begin{center}\begin{picture}(125,49)(0,-49)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}CONFIG}}
\put(0,-21){\Midbox{hist-mode}}
\put(0,-28){\Midbox{}}
\put(0,-35){\Midbody{mode dependent parameters}}
\put(0,-42){\Midbody{see Sections~\ref{SubSect-transp},
\ref{SubSect-hm-dig}, \ref{SubSect-TOF},
\ref{SubSect-HRPT} and \ref{SubSect-PSD}}}
\put(0,-49){\Botbody{}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{75mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}CONFIG}{cmnd}{Command verb}
\Tabrow{hist-mode}{u.cnfg.mode}{Histogram memory mode}
\hline
\end{tabular}\end{center}
%
The \sfbf{mode} parameter specifies the basic operating mode
of the histogram memory. This mode must agree with the set-up of
the multi-detector interface since the format of data packets from this
interface is mode dependent. Values which may be taken by
\sfbf{mode} are:
%
{\sffamily\begin{center}\begin{tabular}{|p{37mm}cp{94mm}|} \hline
\multicolumn{3}{|l|}{Supported values of \textbf{mode}} \\
\hline
SQHM{\usc}{\usc}TRANS & 0x1000 & Transparent mode. See
Section~\ref{SubSect-transp}. \\
SQHM{\usc}{\usc}HM{\usc}DIG & 0x2000 & Histogram mode with
digitised read-out. See
Section~\ref{SubSect-hm-dig}. \\
SQHM{\usc}{\usc}TOF & 0x3000 & Time-of-flight mode. See
Section~\ref{SubSect-TOF}. \\
SQHM{\usc}{\usc}HM{\usc}PSD & 0x4000 & Histogram mode with
TriCS type position sensitive detector
(charge division read-out). See
Section~\ref{SubSect-PSD}. \\
SQHM{\usc}{\usc}HRPT & 0x5000 & Histogram mode for HRPT type
interface. See
Section~\ref{SubSect-HRPT}. \\
\hline
\end{tabular}\end{center}}
%
It is also possible to set modifier bits in the \sfbf{mode} parameter.
These may be used to refine the operation of the histogramming function.
The defined modifier bits are listed in the upper table on the next
page.\\[1.0ex]
%
In response to a SQHM{\usc}CONFIG command,
SinqHM-master will reserve the required buffer space for the
histograms and start the SinqHM-filler process. Once the filler
process has initialised itself, a status response is returned.
Only the \sfbf{status} and \sfbf{sub{\usc}status}
fields of the response are significant. Possible values for \sfbf{status}
in the status response are listed in the lower table on the next
page.
%
{\sffamily\begin{center}\begin{tabular}{|p{37mm}cp{94mm}|} \hline
\multicolumn{3}{|l|}{Modifier bits of \textbf{mode}} \\
\hline
SQHM{\usc}{\usc}DEBUG & 0x01 & Can be set to facilitate interactive %
debugging of the histogram memory software. If this %
bit is set, the histogram filler process will suspend %
itself after being started to allow the use of an %
interactive debugger. \\
SQHM{\usc}{\usc}UD & 0x02 & The \textsl{up/down} bit delivered by
the front-end electronics will be used to select
the histogram to be updated. The value of
\textbf{n{\usc}hists} must be a multiple of 2
in this mode. This bit and the SQHM{\usc}{\usc}STROBO
bit are mutually exclusive. \\
SQHM{\usc}{\usc}BO{\usc}MSK & 0x18 & Bin-overflow mask - use this
to mask out the \textsl{bin-overflow} bits
of \textbf{mode} as defined in the following
3 entries. \\
SQHM{\usc}{\usc}BO{\usc}IGN & 0x00 & Ignore bin overflows. An
overflowing bin will wrap-around to zero. \\
SQHM{\usc}{\usc}BO{\usc}SMAX & 0x08 & Stop at maximum. If a bin
overflows, stop incrementing the bin when the maximum
count in the bin is reached. Other bins will continue
to count. \\
SQHM{\usc}{\usc}BO{\usc}CNT & 0x10 & Count bin overflows. If a bin
overflows, the number of the overflowing bin is
added to a table where the number of overflows of
this bin are recorded. This feature is not yet
supported. \\
SQHM{\usc}{\usc}STROBO & 0x20 & The raw data from the
fibre-optic link is expected to be
single-channel-stroboscopic-mode. The
binning-address-bits delivered
by the front-end electronics will be
used to select the histogram
which will be updated. The value of
\textbf{n{\usc}hists} must be a multiple of
16. This bit and the SQHM{\usc}{\usc}UD
bit are mutually exclusive.
Note that a finer selection of the
histogram which is to be updated based on
the time-stamp information in the raw data is
not yet defined. \\
SQHM{\usc}{\usc}REFLECT & 0x40 & The histogram wires will be
reflected (needed by HRPT). \\
SQHM{\usc}{\usc}NO{\usc}STAT & 0x80 & The status info displayed by
Filler on the COM1 port will be suppressed. \\
\hline
\end{tabular}\end{center}}
%
{\sffamily\begin{center}\begin{tabular}{|p{40mm}p{104mm}|} \hline
KER{\usc}{\usc}SUCCESS & SinqHM-filler started successfully.\\
KER{\usc}{\usc}BAD{\usc}STATE & SinqHM has already been configured.\\
KER{\usc}{\usc}BAD{\usc}VALUE & Invalid parameter found. \\
KER{\usc}{\usc}BAD{\usc}ALLOC & Not enough space available for
histogram memory buffer. The maximum
available space in bytes is given by
\textbf{sub{\usc}status}. \\
KER{\usc}{\usc}BAD{\usc}CREATE & Creation of SinqHM-filler failed. The
cause is indicated \\
& by \textbf{sub{\usc}status}. Possible values are: \\
& \hspace*{5mm} -1 Spawn failed. \\
& \hspace*{5mm} -2 SinqHM-filler already active (should
not be possible). \\
& \hspace*{5mm} -3 SinqHM-filler took more than 15 seconds
to \\
& \hspace*{15mm} initialise itself. It has been
terminated. \\
& \hspace*{5mm} -4 SinqHM-filler had a start-up problem. \\
\hline
\end{tabular}\end{center}}
%
\newpage
%
\subsubsection{SQHM{\usc}{\usc}TRANS: Transparent Mode}
% =======================================================
%
\label{SubSect-transp}
%
No histogramming is done in Transparent Mode. The raw data as read from
the fibre-optic link is buffered and transferred to the host on request.
The format of the SQHM{\usc}TRANS command is:
%
\begin{center}\begin{picture}(125,35)(0,-35)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}CONFIG}}
\put(0,-21){\Midbox{SQHM{\usc}{\usc}TRANS}}
\put(0,-28){\Midbox{buff-number}}
\put(0,-35){\Botbox{buff-size}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{68mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}CONFIG}{cmnd}{Command verb}
\Tabrow{SQHM{\usc}{\usc}TRANS}{mode}{The selected mode}
\Tabrow{buff-number}{$<$prefix$>$.n{\usc}buffs}{Number of buffers to
use.}
\Tabrow{buff-size}{$<$prefix$>$.n{\usc}bytes}{Size of each buffer in
bytes.}
\hline
\end{tabular}\end{center}
%
\sfbf{$<$prefix$>$} is
\sfbf{u.cnfg.u.trans}.\\[1.0ex]
%
The buffers are used cyclically. Their contents may be read via the
SQHM{\usc}READ command.
%
\newpage
%
\subsubsection{SQHM{\usc}{\usc}HM{\usc}DIG: Digitised Histogram Mode}
% =====================================================================
%
\label{SubSect-hm-dig}
%
The raw data from the fibre-optic link is expected to be
\textsl{single-channel-histogram-mode}. It will be histogrammed into the
currently selected histogram (see Sect.~\ref{Sect-sinqhm-select}). If the
SQHM{\usc}{\usc}UD or SQHM{\usc}{\usc}STROBO modifier bit of
\sfbf{mode} is
set, the {\em up/down bit} or the {\em binning-address-bits} in the
fibre-optic data packets will be used to select one of a group of adjacent
histograms to be updated.\\[1.0ex]
%
The format of the SQHM{\usc}CONFIG command for Digitised Histogram Mode
is:
%
\begin{center}\begin{picture}(125,56)(0,-56)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}CONFIG}}
\put(0,-21){\Midbox{SQHM{\usc}{\usc}HM{\usc}DIG}}
\put(0,-28){\Midbox{number-hists}}
\put(0,-35){\Midbox{low-bin}}
\put(0,-42){\Midbox{number-bins}}
\put(0,-49){\Midbox{bytes-per-bin}}
\put(0,-56){\Botbox{bin-compress}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{68mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}} \hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}CONFIG}{cmnd}{Command verb}
\Tabrow{SQHM{\usc}{\usc}HM{\usc}DIG}{mode}{The selected mode}
\Tabrow{number-hists}{$<$prefix$>$.n{\usc}hists}{Number of
defined histograms.}
\Tabrow{low-bin}{$<$prefix$>$.lo{\usc}bin}{Coordinate of lower
edge of first bin.}
\Tabrow{number-bins}{$<$prefix$>$.num{\usc}bins}{Number of bins
per histogram.}
\Tabrow{bytes-per-bin}{$<$prefix$>$.bytes{\usc}per{\usc}bin}{%
Number of bytes per bin (1, 2 or 4).}
\Tabrow{bin-compress}{$<$prefix$>$.compress}{Bin compression factor
(bin width).}
\hline
\end{tabular}\end{center}
%
\sfbf{$<$prefix$>$} is
\sfbf{u.cnfg.u.hm{\usc}dig}.\\[1.0ex]
%
Let $x$ be the 16-bit data field obtained from the fibre-optic event
packet. If\\[1.0ex]
%
\hspace*{\fill}
$ x < \sfbf{lo{\usc}bin} $
\hspace*{\fill} \\[1.0ex]
%
the lower {\em out-of-range} counter for the histogram will be
incremented. If\\[1.0ex]
%
\hspace*{\fill}
$ x \geq (\sfbf{lo{\usc}bin} + \sfbf{num{\usc}bins} \times
\sfbf{compress}) $
\hspace*{\fill} \\[1.0ex]
%
the upper {\em out-of-range} counter for the histogram will be
incremented. Otherwise, the index of the bin to be incremented
is:\\[1.0ex]
%
\hspace*{\fill}
$ (x - \sfbf{lo{\usc}bin})/\sfbf{compress} $
\hspace*{\fill} \\[1.0ex]
%
In most cases, \sfbf{lo{\usc}bin} will be 0 and
\sfbf{compress} will be 1.
%
\newpage
%
\subsubsection{SQHM{\usc}{\usc}TOF: Time-of-Flight Mode}
% ========================================================
%
\label{SubSect-TOF}
%
Time-of-flight (TOF) histograms are intrinsically 2-dimensional. One
dimension is the time after the start signal at which the neutron was
detected and the other dimension is the position (or number) of the
detector which detected the neutron. There are two special
requirements for TOF spectra which
complicate the definition of the configuration command. These are:
\begin{itemize}
\item the time-span of the bins of the histogram along the time axis may
not be constant. It may, for example, be preferable to define bin
boundaries so that the bin width is constant after the histograms have
been converted to energy space.
\item it may be necessary to define different time-binning for various
sections of the bank of detectors.
\end{itemize}
%
For this reason, two special data structures have been defined for use in
the SQHM{\usc}{\usc}TOF mode configuration command. These are the {\em
edge-array} and {\em counter-bank} data structures.\\[1.5ex]
%
\hspace*{-3mm}\textbf{The {\em edge-array} Structure}
\noindent The {\em edge-array} data structure is \sfbf{struct
tof{\usc}edge{\usc}arr}. It is used to specify the bin coordinates of a
histogram. Its format is:
%
\begin{center}\begin{picture}(125,35)(0,-35)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{number-bins}}
\put(0,-14){\Midbox{flag}}
\put(0,-21){\Midbox{}}
\put(0,-28){\Midbody{edges}}
\put(0,-35){\Botbody{}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{68mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}} \hline
\Tabrow{number-bins}{n{\usc}bins}{Number of bins per counter.}
\Tabrow{flag}{flag}{If set to 1, variable bin width.}
\Tabrow{edges}{edges[]}{Array of lower bin edges.}
\hline
\end{tabular}\end{center}
%
If the least significant bit of \sfbf{flag} is zero, the associated
histogram has a fixed bin width
along the time axis. In this case, \sfbf{edges[]} has 2 elements giving
the lower edge of the first two bins. From this, the lower edges of the
complete time axis of the histogram can be computed. \\[1.0ex]
%
If the least significant bit of \sfbf{flag} is non-zero, the associated
histogram has a variable bin
width. In this case, \sfbf{edges[]} must have (\sfbf{n{\usc}bins} + 1)
elements giving the lower edges of all the bins. The last element should
be 1 greater than the upper edge of the last bin. \\[1.5ex]
%
\hspace*{-3mm}\textbf{The {\em counter-bank} Structure}
\noindent The {\em counter-bank} data structure is \sfbf{struct
tof{\usc}bank}. It is used to specify a group of TOF counters, all of
which have the same histogram binning along the time axis. Its format is:
%
\begin{center}\begin{picture}(125,28)(0,-28)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{first-cntr}}
\put(0,-14){\Midbox{number-cntrs}}
\put(0,-21){\Midbox{edge-index}}
\put(0,-28){\Botbox{bytes-per-bin}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{68mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}} \hline
\Tabrow{first-cntr}{first}{Number of first counter in bank.}
\Tabrow{number-cntrs}{n{\usc}cntrs}{Number of counters in bank.}
\Tabrow{edge-index}{edge{\usc}indx}{Index of corresponding edge-array.}
\Tabrow{bytes-per-bin}{bytes{\usc}per{\usc}bin}{Number of bytes per bin
(1, 2 or 4).}
\hline
\end{tabular}\end{center}
%
Having defined the {\em edge-array} and {\em counter-bank} data
structures, it is now possible to define the SQHM{\usc}{\usc}TOF mode
configuration command as follows:
%
\begin{center}\begin{picture}(125,84)(0,-84)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}CONFIG}}
\put(0,-21){\Midbox{SQHM{\usc}{\usc}TOF}}
\put(0,-28){\Midbox{extra-bytes}}
\put(0,-35){\Midwordbox{n-banks}{n-edges}}
\put(0,-42){\Midbox{preset-delay}}
\put(0,-49){\Midbox{}}
\put(0,-56){\Midbodydashed{edge[0] $\ldots$ edge[n-edges]}}
\put(0,-63){\Botbody{}}
\put(0,-70){\Midbox{}}
\put(0,-77){\Midbodydashed{bank[0] $\ldots$ bank[n-banks]}}
\put(0,-84){\Botbody{}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{68mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}} \hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}CONFIG}{cmnd}{Command verb}
\Tabrow{SQHM{\usc}{\usc}TOF}{mode}{The selected mode}
\Tabrow{extra-bytes}{$<$prefix$>$.n{\usc}extra{\usc}bytes}{Number of
extra bytes to read.}
\Tabrow{n-edges}{$<$prefix$>$.n{\usc}edges}{Number of edge arrays
following.}
\Tabrow{n-banks}{$<$prefix$>$.n{\usc}banks}{Number of counter banks
following.}
\Tabrow{preset-delay}{$<$prefix$>$.preset{\usc}delay}{Time delay for
sending to multi-detector interface.}
\Tabrow{edge[i]}{$<$prefix$>$.edge{\usc}0}{An edge array.}
\Tabrow{bank[j]}{$<$prefix$>$.bank{\usc}0}{A counter bank.}
\hline
\end{tabular}\end{center}
%
\sfbf{$<$prefix$>$} is
\sfbf{u.cnfg.u.tof}. \\[1.0ex]
%
If the data required for the edge-arrays and counter-banks exceeds the
normal 64-byte limit for a message to SinqHM, the parameter
\sfbf{n{\usc}extra{\usc}bytes} must indicate the number of extra bytes
which must be read by SinqHM to complete the message. For the case of
fixed bin width histograms and a single counter-bank,
\sfbf{n{\usc}extra{\usc}bytes} will be zero. The
\sfbf{preset{\usc}delay} is sent to the multi-detector interface via
the COM2 port of the MVME-1603 PowerPC module. See
Section~\ref{Sect-mdi-comm} for details.\\[1.0ex]
%
Note that, if there is more than one edge-array or if the
edge-array defines bins with a variable width, the location of the
counter-banks in the command must be computed at run time.
%
\vspace*{10mm}
%
\subsubsection{SQHM{\usc}{\usc}HRPT: HRPT Detector Mode}
% ============================================================================
%
\label{SubSect-HRPT}
%
The raw data from the fibre-optic link is expected to be
\textsl{3-channel-histogram-mode} as defined for the CERCA interface for
the HRPT detector. It will be histogrammed into the
currently selected histogram (see Sect.~\ref{Sect-sinqhm-select}). If the
SQHM{\usc}{\usc}UD or SQHM{\usc}{\usc}STROBO modifier bit of
\sfbf{mode} is
set, the {\em up/down bit} or the {\em binning-address-bits} in the
fibre-optic data packets will be used to select one of a group of adjacent
histograms to be updated.\\[1.0ex]
%
The format of the SQHM{\usc}CONFIG command for HRPT mode is the same
as for Digitised Histogram Mode (see Sect.~\ref{SubSect-hm-dig})
except for the \sfbf{mode} field, which must naturally be set to
\sfbf{SQHM{\usc}{\usc}HRPT} rather than
\sfbf{SQHM{\usc}{\usc}HM{\usc}DIG}.
%
\vspace*{10mm}
%
\subsubsection{SQHM{\usc}{\usc}HM{\usc}PSD: Position Sensitive Detector Mode}
% ============================================================================
%
\label{SubSect-PSD}
%
The instruments TRICS and AMOR use 2D position sensitive detectors
provided by the EMBL at ILL. These detectors have a delay line
readout. This means the detector readout for each neutron is two
delay values. From these values the actual detector positions can be
calculated from the formula:
\begin{equation}
pos = \frac{(delay - offset)}{factor}
\end{equation}
Thus the configuration message must carry two additional values for each
of the two detector dimensions.
AMOR will be operated in time--of--flight mode. For TRICS this is not
necessary. However, as the data telegrams coming from the fibre optic
link contain the time binning information in any case it was decided
to treat both conditions equally as a variation of the time--of--flight
case. For a description of the edge and bank data structures
involved see \ref{SubSect-TOF}. TRICS detectors will then be
treated as a time--of--flight detector with a single huge timebin.
Thus the SQHM{\usc}{\usc}HM{\usc}PSD configuration command looks as follows:
\begin{center}\begin{picture}(125,105)(0,-105)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}CONFIG}}
\put(0,-21){\Midbox{SQHM{\usc}{\usc}HM{\usc}{\usc}PSD}}
\put(0,-28){\Midbox{extra-bytes}}
\put(0,-35){\Midwordbox{n-banks}{n-edges}}
\put(0,-42){\Midbox{preset-delay}}
\put(0,-49){\Midwordbox{x-Factor}{y-Factor}}
\put(0,-56){\Midwordbox{X Offset}{Y Offset}}
\put(0,-63){\Midwordbox{x Size}{y Size}}
\put(0,-70){\Midbox{}}
\put(0,-76){\Midbodydashed{edge[0] $\ldots$ edge[n-edges]}}
\put(0,-84){\Botbody{}}
\put(0,-91){\Midbox{}}
\put(0,-98){\Midbodydashed{bank[0] $\ldots$ bank[n-banks]}}
\put(0,-105){\Botbody{}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{68mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}} \hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}CONFIG}{cmnd}{Command verb}
\Tabrow{SQHM{\usc}{\usc}HM{\usc}{\usc}PSD}{mode}{The selected mode}
\Tabrow{extra-bytes}{$<$prefix$>$.n{\usc}extra{\usc}bytes}{Number of
extra bytes to read.}
\Tabrow{n-edges}{$<$prefix$>$.n{\usc}edges}{Number of edge arrays
following.}
\Tabrow{n-banks}{$<$prefix$>$.n{\usc}banks}{Number of counter banks
following.}
\Tabrow{preset-delay}{$<$prefix$>$.preset{\usc}delay}{Time delay for
sending to multi-detector interface.}
\Tabrow{x-Factor}{$<$prefix$>$.xFactor}{Division factor for
calculating x position.}
\Tabrow{y-factor}{$<$prefix$>$.yFactor}{Division factor for
calculating y position.}
\Tabrow{x Offset}{$<$prefix$>$.xOffset}{Offset value for
calculating x position.}
\Tabrow{y Offset}{$<$prefix$>$.yOffset}{Offset value for
calculating y position.}
\Tabrow{xSize}{$<$prefix$>$.xSize}{Number of detector wires in
x direction.}
\Tabrow{ySize}{$<$prefix$>$.ySize}{Number of detector wires in
y direction.}
\Tabrow{edge[i]}{$<$prefix$>$.edge{\usc}0}{An edge array.}
\Tabrow{bank[j]}{$<$prefix$>$.bank{\usc}0}{A counter bank.}
\hline
\end{tabular}\end{center}
%
\newpage
%
\subsection{SQHM{\usc}DAQ}
% ==========================
%
The SQHM{\usc}DAQ command is used for operations related to the
enabling and inhibiting of data acquisition by SinqHM. As
mentioned in Section~\ref{Sect-hardware},
the method of data acquisition control
used in the SinqHM histogram memory is to apply a signal to the
inhibit input of the multi-detector interface to disable data
acquisition by the histogram memory. In this situation, the
SQHM{\usc}DAQ command is not necessary. It has been provided to allow
the possibility of extending SinqHM for use in other types of
experiment, such as \musr, where the data acquisition control
philosophy is somewhat different.
In order to understand the details of the command, it is first
necessary to describe the way in which the command is implemented.
SinqHM maintains a mask, {\em Dsbl{\usc}Mask}, in a region of memory
which is
accessible to SinqHM-filler and to the SinqHM-servers. Both
SinqHM-filler and the SinqHM-servers are each associated with a
particular bit in {\em Dsbl{\usc}Mask}. If the mask is non-zero, data
acquisition will be inhibited.
When SinqHM-filler is first started in response to a SQHM{\usc}CONFIG
command, it flushes the FIFO from the fibre-optic link and clears
{\em Dsbl{\usc}Mask}. Data acquisition is therefore enabled.
However, since
the inhibit input to the multi-detector interface is presumably
set at this point and remains so until the user starts a data
acquisition run via the EL737 neutron counter, any data which
SinqHM-filler reads from the fibre-optic link will be discarded.
Whenever a SinqHM-server is started in response to a SQHM{\usc}CNCT
command, its associated bit is cleared. Whenever a server exits,
it also ensures that its bit is clear. The SQHM{\usc}DAQ command allows
a user to manipulate the bits in {\em Dsbl{\usc}Mask} and hence to control
whether SinqHM-filler will read data from the fibre-optic link or
not. Because of the high speed of the PowerPC processor and the
way in which SinqHM-filler has been implemented, the test to see
if {\em Dsbl{\usc}Mask} is set or not adds only about 30 nsec
to the read-out loop of the histogram memory.
The format of the SQHM{\usc}DAQ command, which may only be issued once
SinqHM has been successfully configured, is:
%
\begin{center}\begin{picture}(125,21)(0,-21)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}DAQ}}
\put(0,-21){\Botbox{modifier}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{75mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}DAQ}{cmnd}{Command verb}
\Tabrow{modifier}{u.daq.sub{\usc}cmnd}{Command modifier (see below)}
\hline
\end{tabular}\end{center}
%
The values which may be taken by \sfbf{sub{\usc}cmnd} are
given in the following table.
If the commands DAQ{\usc}{\usc}CLR and DAQ{\usc}{\usc}INH are issued as
one-off commands to SinqHM-master, they behave as though DAQ{\usc}{\usc}GO
and DAQ{\usc}{\usc}STOP commands had been issued.
%
{\sffamily\begin{center}\begin{tabular}{|p{37mm}cp{94mm}|} \hline
\multicolumn{3}{|l|}{Supported values of \textbf{sub{\usc}cmnd}} \\
\hline
DAQ{\usc}{\usc}CLR & 0x0001 & Clear the client's bit in
\textsl{Dsbl{\usc}Mask}. If, as a result, the
mask becomes zero, data acquisition will be
enabled. \\
DAQ{\usc}{\usc}GO & 0x0002 & Instruct SinqHM-filler to clear its bit
in \textsl{Dsbl{\usc}Mask}. \\
DAQ{\usc}{\usc}INH & 0x0003 & Set the client's bit in
\textsl{Dsbl{\usc}Mask}. This is guaranteed
to disable data acquisition. \\
DAQ{\usc}{\usc}STOP & 0x0004 & Instruct SinqHM-filler to set its bit
in \textsl{Dsbl{\usc}Mask}. \\
DAQ{\usc}{\usc}TST & 0x0005 & Read the state of
\textsl{Dsbl{\usc}Mask}. \\
\hline
\end{tabular}\end{center}}
The format of the status response to a SQHM{\usc}DAQ command is:
%
\begin{center}\begin{picture}(125,35)(0,-35)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{status}}
\put(0,-21){\Midbox{sub-status}}
\put(0,-28){\Midwordbox{daq-state-was}{daq-state-now}}
\put(0,-35){\Botwordbox{server-mask}{filler-mask}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{85mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{status}{status}{Status code}
\Tabrow{sub-status}{sub{\usc}status}{Secondary status code}
\Tabrow{daq-state-now}{u.daq.daq{\usc}now}{New (or current) data
acquisition status (= value of \textsl{Dsbl{\usc}Mask})}
\Tabrow{daq-state-was}{u.daq.daq{\usc}was}{Previous data acquisition
status (= old value of \textsl{Dsbl{\usc}Mask}).}
\Tabrow{filler-mask}{u.daq.filler{\usc}mask}{Mask indicating which bit
in \textbf{daq{\usc}now} corresponds to
SinqHM-filler.}
\Tabrow{server-mask}{u.daq.server{\usc}mask}{Mask indicating which bit
in \textbf{daq{\usc}now} corresponds to the
client which issued the SQHM{\usc}DAQ command.}
\hline
\end{tabular}\end{center}
%
The only values for \sfbf{status} should be
KER{\usc}{\usc}SUCCESS and
KER{\usc}{\usc}BAD{\usc}VALUE, the latter indicating that
\sfbf{sub{\usc}cmnd} is invalid.
Any other value which might occur indicates a software problem,
probably related to accessing the semaphore associated with
{\em Dsbl{\usc}Mask}.
\noindent If \sfbf{daq{\usc}now} is non-zero, data acquisition by
SinqHM is disabled.
Each non-zero bit in \sfbf{daq{\usc}now} corresponds to a
process in SinqHM
which is inhibiting data acquisition. \sfbf{filler{\usc}mask}
indicates the
bit which is associated with SinqHM-filler.
\sfbf{client{\usc}mask} indicates
the bit which is associated with the client which issued the
SQHM{\usc}DAQ command.
\noindent \sfbf{daq{\usc}was} is a copy of {\em Dsbl{\usc}Mask} prior
to the execution of the current command.
%
\newpage
%
%
\subsection{SQHM{\usc}DBG}
% ==========================
%
The SQHM{\usc}DBG command is used to enable the display of diagnostic
messages from SinqHM. A mask of 4 bits may be set to select various
diagnostic messages. The diagnostic messages are directed to the COM1
console port of the PowerPC module. The format of the command is:
%
\begin{center}\begin{picture}(125,21)(0,-21)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}DBG}}
\put(0,-21){\Botbox{debug-mask}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{80mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}DBG}{cmnd}{Command verb}
\Tabrow{debug-mask}{u.dgb.mask}{Mask of bits selecting various debug
print switches. The least significant
4 bits are relevant.}
\hline
\end{tabular}\end{center}
%
Setting \sfbf{mask} to a value of 15 will enable all diagnostic messages.
\noindent The response to the SQHM{\usc}DBG command will have
\sfbf{status} set to KER{\usc}{\usc}SUCCESS.
%
\newpage
%
\subsection{SQHM{\usc}DECONFIG}
% ===============================
%
The SQHM{\usc}DECONFIG command is used to de-configure SinqHM (usually
in preparation for a new SQHM{\usc}CONFIG command). The
format of the command is:
%
\begin{center}\begin{picture}(125,21)(0,-21)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}DECONFIG}}
\put(0,-21){\Botbox{harshness}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{70mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}DECONFIG}{cmnd}{Command verb}
\Tabrow{harshness}{u.decnfg.sub{\usc}code}{Command modifier (see below)}
\hline
\end{tabular}\end{center}
%
SinqHM-master will check to see if there are any active
SinqHM-server (child) processes active. If there are no active
children, the SinqHM-filler process will be terminated and SinqHM
returns to the de-configured state.
\noindent If there are active children, however, the
\sfbf{sub{\usc}code} (harshness)
field is used. If it is zero, then the condition is considered to
be an error.
\noindent If it is non-zero, then SinqHM-master will be more ruthless. All
its active children (including SinqHM-filler) will be terminated
and it will then return to the de-configured state.
\noindent Possible values for \sfbf{status} in the status response to the
SQHM{\usc}DECONFIG command are:
%
{\sffamily\begin{center}\begin{tabular}{|p{40mm}p{110mm}|} \hline
KER{\usc}{\usc}SUCCESS & SinqHM has been successfully
de-configured.\\
KER{\usc}{\usc}BAD{\usc}STATE & Either: \\
& \hspace*{5mm} - there are active clients and
\textbf{sub{\usc}code} was zero or \\
& \hspace*{5mm} - there were problems terminating
the children. \\
\hline
\end{tabular}\end{center}}
%
\vspace*{10mm}
%
\subsection{SQHM{\usc}EXIT}
% ===========================
%
The SQHM{\usc}EXIT command is used to terminate SinqHM-master and all
its children. It is only recognised as a one-off command to
SinqHM-master. It will not be recognised by a SinqHM-server.
It is normally only of interest in debugging situations since
manual intervention on the histogram memory module is required
afterwards to start up SinqHM-master again. The status response is
the same as for the SQHM{\usc}DECONFIG command. An error status will
only be returned if SinqHM-master has trouble terminating its
children. It will, in any case, proceed to exit.
%
\newpage
%
\subsection{SQHM{\usc}IDENT}
% ============================
%
The SQHM{\usc}IDENT command is used for obtaining information about
the revision status of the SinqHM software running in the histogram
memory. There are no command dependent parameters. The format of the
status response is:
%
\begin{center}\begin{picture}(125,77)(10,-77)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topwbox{35}{bigend}}
\put(0,-14){\Midwbox{35}{status}}
\put(0,-21){\Midwbox{35}{sub{\usc}status}}
\put(0,-28){\Midwbox{35}{u.ident.n{\usc}extra{\usc}bytes}}
\put(0,-35){\Midwbox{35}{u.ident.up{\usc}time}}
\put(0,-42){\Midwwordbox{35}%
{u.ident.offset{\usc}vxWorks{\usc}date}%
{u.ident.offset{\usc}vxWorks{\usc}ident}}
\put(0,-49){\Midwwordbox{35}%
{u.ident.offset{\usc}def{\usc}ident}%
{u.ident.offset{\usc}instr}}
\put(0,-56){\Midwwordbox{35}%
{u.ident.offset{\usc}sinqhm{\usc}main{\usc}date}%
{u.ident.offset{\usc}sinqhm{\usc}main{\usc}ident}}
\put(0,-63){\Midwwordbox{35}%
{u.ident.offset{\usc}sinqhm{\usc}server{\usc}date}%
{u.ident.offset{\usc}sinqhm{\usc}server{\usc}ident}}
\put(0,-70){\Midwwordbox{35}%
{u.ident.offset{\usc}sinqhm{\usc}filler{\usc}date}%
{u.ident.offset{\usc}sinqhm{\usc}filler{\usc}ident}}
\put(0,-77){\Botwwordbox{35}%
{u.ident.offset{\usc}sinqhm{\usc}routines{\usc}date}%
{u.ident.offset{\usc}sinqhm{\usc}routines{\usc}ident}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|lp{90mm}|} \hline
\sfbf{Symbol Name} & \sfbf{Description} \\ \hline
\sfbf{bigend} & \textsf{%
See Section~\ref{Sect-sinqhm-comm}} \\
\sfbf{status} & \textsf{%
Status code} \\
\sfbf{sub{\usc}status} & \textsf{%
Secondary status code} \\
\sfbf{n{\usc}extra{\usc}bytes} & \textsf{%
Number of extra bytes to receive.} \\
\sfbf{up{\usc}time} & \textsf{%
SinqHM up-time in seconds} \\
\sfbf{offset{\usc}vxWorks{\usc}ident} & \textsf{%
Revision level of the vxWorks system.} \\
\sfbf{offset{\usc}vxWorks{\usc}date} & \textsf{%
Date on which the vxWorks system was created.} \\
\sfbf{offset{\usc}instr} & \textsf{%
Instrument for which SinqHM was compiled.} \\
\sfbf{offset{\usc}def{\usc}ident} & \textsf{%
Revision level of SinqHM{\usc}def.h} \\
\sfbf{offset{\usc}sinqhm{\usc}main{\usc}ident} & \textsf{%
Revision level of SinqHM{\usc}srv{\usc}main.c} \\
\sfbf{offset{\usc}sinqhm{\usc}main{\usc}date} & \textsf{%
Date on which SinqHM{\usc}srv{\usc}main.c was compiled.} \\
\sfbf{offset{\usc}sinqhm{\usc}server{\usc}ident} & \textsf{%
Revision level of SinqHM{\usc}srv{\usc}server.c} \\
\sfbf{offset{\usc}sinqhm{\usc}server{\usc}date} & \textsf{%
Date on which SinqHM{\usc}srv{\usc}server.c was compiled.} \\
\sfbf{offset{\usc}sinqhm{\usc}filler{\usc}ident} & \textsf{%
Revision level of SinqHM{\usc}srv{\usc}filler.c} \\
\sfbf{offset{\usc}sinqhm{\usc}filler{\usc}date} & \textsf{%
Date on which SinqHM{\usc}srv{\usc}filler.c was compiled.} \\
\sfbf{offset{\usc}sinqhm{\usc}routines{\usc}ident} & \textsf{%
Revision level of SinqHM{\usc}srv{\usc}routines.c} \\
\sfbf{offset{\usc}sinqhm{\usc}routines{\usc}date} & \textsf{%
Date on which SinqHM{\usc}srv{\usc}routines.c was compiled.} \\
\hline
\end{tabular}\end{center}
%
Possible values for \sfbf{status} in the status response to the
SQHM{\usc}IDENT command are KER{\usc}{\usc}SUCCESS, indicating success,
and KER{\usc}{\usc}BAD{\usc}ALLOC, indicating that Sinq\-HM was unable
to reserve buffer space for composing the revision status response.
If \sfbf{status} indicates success, the status response is followed
by \sfbf{n{\usc}extra{\usc}bytes} of data giving the requested revision
status of SinqHM. This extra block of data must be read by the client
before further commands are sent to SinqHM. The various {\em offset} items
in the status response specify byte offsets from the start of this extra
block to null-terminated strings.
%
\newpage
%
\subsection{SQHM{\usc}PROJECT}
% ==============================
%
The SQHM{\usc}PROJECT command is used for projecting a rectangular
region of two-dimensional histogram data onto the x or y axis
and reading it out. It is intended to be used, for example, for adding
together a number of TOF histograms in order to obtain a fast, rough
status display from the histogram memory of large histogram arrays
which would take too long to read out otherwise.
\noindent The command may also be used to obtain a projection within a
one-dimensional histogram. This is intended for detectors such as SANS
which are physically two-dimensional but where the electronics presents
the data to the histogram memory in a one-dimensional form. It may be
useful in such cases to be able to generate an x- or y-projection of
the data in the histogram memory rather than having to transfer the
complete histogram data over the network.
\noindent The format of the command is:
%
\begin{center}\begin{picture}(125,63)(0,-63)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{bigend}}
\put(0,-14){\Midbox{cmnd = SQHM{\usc}PROJECT}}
\put(0,-21){\Midbox{u.project.sub{\usc}code}}
\put(0,-28){\Midbox{u.project.x{\usc}lo}}
\put(0,-35){\Midbox{u.project.nx}}
\put(0,-42){\Midbox{u.project.y{\usc}lo}}
\put(0,-49){\Midbox{u.project.ny}}
\put(0,-56){\Midbox{u.project.xdim}}
\put(0,-63){\Botbox{u.project.nhist}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|lp{95mm}|} \hline
\sfbf{Symbol Name} & \sfbf{Description} \\ \hline
%
\sfbf{bigend} & \textsf{%
See Section~\ref{Sect-sinqhm-comm}} \\
\sfbf{cmnd} & \textsf{%
Command verb = SQHM{\usc}PROJECT} \\
\sfbf{sub{\usc}code} & \textsf{%
Sub-code} \\
\sfbf{x{\usc}lo} & \textsf{%
Number of first bin in x-direction.} \\
\sfbf{nx} & \textsf{%
Number of bins in x-direction.} \\
\sfbf{y{\usc}lo} & \textsf{%
Number of first bin in y-direction.} \\
\sfbf{ny} & \textsf{%
Number of bins in y-direction.} \\
\sfbf{xdim} & \textsf{%
If PROJECT{\usc}{\usc}1{\usc}DIM is set, the histogram dimension
in x-direction.} \\
\sfbf{nhist} & \textsf{%
If PROJECT{\usc}{\usc}1{\usc}DIM is set, the number of the histogram
to be projected.} \\
\hline
\end{tabular}\end{center}
%
The following bits are defined in \sfbf{sub{\usc}code}:
%
{\sffamily\begin{center}\begin{tabular}{|p{37mm}cp{75mm}|} \hline
PROJECT{\usc}{\usc}ON{\usc}Y & 0x0001 & Project onto y-axis. \\
PROJECT{\usc}{\usc}1{\usc}DIM & 0x0002 & Make projection of a
1-dim histogram. \\
\hline
\end{tabular}\end{center}}
%
\noindent The interpretation and default values for the various parameters
depend on the configured mode of the histogram memory and the settings
of bits in \sfbf{sub{\usc}code}. The following description is limited to
the known applications of the SQHM{\usc}PROJECT command. Other
combinations may also work but may not be physically meaningful.
\subsubsection{SQHM{\usc}{\usc}TOF Mode and PROJECT{\usc}{\usc}1{\usc}DIM
= 0}
%
In TOF mode, it is expected that the SQHM{\usc}PROJECT command will be
used to combine TOF spectra from adjacent counters.
\noindent In this case,
\sfbf{y{\usc}lo} specifies the number of the first counter and
\sfbf{ny} specifies the number of adjacent counters whose spectra are
to be combined. The parameters \sfbf{x{\usc}lo} and \sfbf{nx} specify
the range of bins in each spectrum which is to be combined.
\noindent An error
will be reported if all counters in the specified range do not have the
same edge-array (see Section~\ref{SubSect-TOF}).
\subsubsection{SQHM{\usc}{\usc}HM{\usc}DIG or SQHM{\usc}{\usc}HRPT Mode
and \\ PROJECT{\usc}{\usc}1{\usc}DIM = 0}
%
In SQHM{\usc}{\usc}HM{\usc}DIG and SQHM{\usc}{\usc}HRPT modes, it is
possible for multiple histograms to be defined, e.g. for stroboscopic
type measurements. The SQHM{\usc}PROJECT command may be used for
combining a range of these histograms by setting the
PROJECT{\usc}{\usc}1{\usc}DIM bit to zero.
\noindent In this case,
\sfbf{y{\usc}lo} specifies the number of the first histogram and
\sfbf{ny} specifies the number of adjacent histograms which are to be
combined. The parameters \sfbf{x{\usc}lo} and \sfbf{nx} specify
the range of bins in each histogram which is to be combined.
\subsubsection{SQHM{\usc}{\usc}HM{\usc}DIG or SQHM{\usc}{\usc}HRPT Mode
and \\ PROJECT{\usc}{\usc}1{\usc}DIM = 1}
%
In SQHM{\usc}{\usc}HM{\usc}DIG and SQHM{\usc}{\usc}HRPT modes, it is
possible for SinqHM to consider a histogram to be one-dimensional whereas
it would be more natural for it to be considered as a two-dimensional
histogram.
A typical example is the SANS detector at SINQ which is a 128~$\times$~128
x-y detector. This appears to the histogram memory as a 16k
one-dimensional histogram since the 7-bits of x and 7-bits of y
information from
the detector are combined into a 14-bit word before being presented to it.
In this case, the PROJECT{\usc}{\usc}1{\usc}DIM bit may be set to force
SinqHM to consider the histogram as two-dimensional.
\noindent The \sfbf{x{\usc}lo}, \sfbf{nx}, \sfbf{y{\usc}lo} and \sfbf{ny}
arguments define the rectangle of interest. \sfbf{xdim}
provides SinqHM with the size of the histogram in the x
dimension\footnote{Histograms are assumed to be stored so that bins in
the x-direction are adjacent.}. \sfbf{xdim} must be an exact divisor
of the number of bins per histogram. \sfbf{nhist} is used to select
which of the defined histograms is to be projected.
\noindent PROJECT{\usc}{\usc}ON{\usc}Y bit may be set to request that
the histogram be projected onto the y-axis. In this case, \sfbf{ny}
rather than \sfbf{nx} bins of data will be returned.
\noindent Having checked the validity of the parameters, SinqHM tries to
reserve sufficient buffer space to hold the projected histogram
contents. If this succeeds, which it usually will since it is usually only
necessary to reserve a relatively small amount of memory,
data acquisition is inhibited, the projected histogram data is computed,
data acquisition is re-enabled
and the status response plus data are sent to the client.\\[1.0ex]
%
\noindent If buffer space is not available, an error status is returned
to the client.\\[1.0ex]
%
\noindent The format of the status response is:
%
\begin{center}\begin{picture}(125,49)(0,-49)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{bigend}}
\put(0,-14){\Midbox{status}}
\put(0,-21){\Midbox{sub{\usc}status}}
\put(0,-28){\Midbox{u.project.n{\usc}bins}}
\put(0,-35){\Midbox{u.project.bytes{\usc}per{\usc}bin = 4}}
\put(0,-42){\Midbox{u.project.cnts{\usc}lo}}
\put(0,-49){\Botbox{u.project.cnts{\usc}hi}}
}
\end{picture}\end{center}
%
If the value of \sfbf{status} is KER{\usc}{\usc}SUCCESS, the
status response is
followed by
(\sfbf{n{\usc}bins} $\times$ 4) bytes
of histogram data which must
be received before any other commands are issued. \sfbf{n{\usc}bins}
will be either \sfbf{nx} or \sfbf{ny} depending on the setting of
PROJECT{\usc}{\usc}ON{\usc}Y. The only other
possible values of \sfbf{status} should be
KER{\usc}{\usc}BAD{\usc}VALUE, which indicates
that a command parameter was invalid and KER{\usc}{\usc}BAD{\usc}ALLOC,
which indicates that SinqHM was unable to reserve buffer space for
projecting the histogram data. Any other value of
\sfbf{status}
indicates a software problem in the SinqHM package.\\[1.0ex]
%
\sfbf{cnts{\usc}lo} and \sfbf{cnts{\usc}hi} are the lower and
upper {\em out-of-range} counters for the projected histogram. They count
events which are either below or above the range of the histogram bins.
The values will be the sum of the counters for the projected histograms.
%
\newpage
%
\subsection{SQHM{\usc}READ}
% ===========================
%
The SQHM{\usc}READ command is used for reading data from the histogram
memory. It may only be issued once SinqHM has been successfully
configured. The format of the command is:
\begin{center}\begin{picture}(125,35)(0,-35)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}READ}}
\put(0,-21){\Midbox{hist-number}}
\put(0,-28){\Midbox{first-bin}}
\put(0,-35){\Botbox{number-bins}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{75mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}READ}{cmnd}{Command verb}
\Tabrow{hist-number}{u.read.hist{\usc}no}{Histogram number (see below).}
\Tabrow{first-bin}{u.read.first{\usc}bin}{Number of first bin to be
read.}
\Tabrow{number-bins}{u.read.n{\usc}bins}{Number of bins to read.}
\hline
\end{tabular}\end{center}
%
In SQHM{\usc}{\usc}HM{\usc}DIG or SQHM{\usc}{\usc}HRPT mode,
\sfbf{hist{\usc}no} specifies the
number of the histogram which is to be read or -1. If \sfbf{hist{\usc}no}
is -1, then \sfbf{first{\usc}bin} and \sfbf{n{\usc}bins} specify a portion
of the total histogram buffer considered as a single histogram of size
(\sfbf{n{\usc}hists} $\times$ \sfbf{num{\usc}bins}) bins. Otherwise,
\sfbf{first{\usc}bin} and \sfbf{n{\usc}bins} specify a portion of the
histogram to be read. If
\sfbf{hist{\usc}no}~=~%
\sfbf{first{\usc}bin}~=~%
\sfbf{n{\usc}bins}~=~-1
the complete histogram memory buffer will be read.
\noindent In SQHM{\usc}{\usc}TOF mode, \sfbf{hist{\usc}no} is assumed to
specify a counter number or -1. If \sfbf{hist{\usc}no} is -1, then
\sfbf{first{\usc}bin} and \sfbf{n{\usc}bins} are used as in
SQHM{\usc}{\usc}HM{\usc}DIG mode. Otherwise, \sfbf{first{\usc}bin} and
\sfbf{n{\usc}bins} select a portion of the time histogram of the
specified counter which is to be read.
\noindent Having checked the validity of the parameters, SinqHM tries to
reserve sufficient buffer space for making a copy of the histogram
contents. If this succeeds, data acquisition is inhibited, a copy
of the histogram contents is made, data acquisition is re-enabled
and the status response plus data are sent to the client. If
buffer space is not available for making a copy of the histogram
contents, data acquisition will not be inhibited during the
transmission of data to the client. This is because the
transmission may be quite long and could therefore cause the loss
of data. The data will therefore be slightly skewed.
\noindent The format of the status response is given in the diagram below.
If the value of \sfbf{status} is KER{\usc}{\usc}SUCCESS, the
status response is
followed by
(\sfbf{n{\usc}bins} $\times$
\sfbf{bytes{\usc}per{\usc}bin}) bytes
of histogram data which must
be received before any other commands are issued. The only other
possible value of \sfbf{status} should be
KER{\usc}{\usc}BAD{\usc}VALUE which indicates
that a command parameter was invalid. Any other value of
\sfbf{status}
indicates a software problem in the SinqHM package.
%
\begin{center}\begin{picture}(125,56)(0,-56)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{status}}
\put(0,-21){\Midbox{sub-status}}
\put(0,-28){\Midbox{first-bin (\textbf{u.read.first{\usc}bin})}}
\put(0,-35){\Midbox{number-bins (\textbf{u.read.n{\usc}bins})}}
\put(0,-42){\Midbox{bytes-per-bin
(\textbf{u.read.bytes{\usc}per{\usc}bin})}}
\put(0,-49){\Midbox{low-cnts (\textbf{u.read.cnts{\usc}lo})}}
\put(0,-56){\Botbox{high-cnts (\textbf{u.read.cnts{\usc}hi})}}
}
\end{picture}\end{center}
\noindent \sfbf{cnts{\usc}lo} and \sfbf{cnts{\usc}hi} are the lower and
upper {\em out-of-range} counters for the selected histogram. They count
events which are either below or above the range of the histogram bins. If
more than one histogram is defined, there are 2 such counters defined for
each histogram. If \sfbf{hist{\usc}no} was specified as -1, the values
will be the sum of the counters for all defined histograms.
%
\vspace*{20mm}
%
\subsection{SQHM{\usc}SELECT}
% =============================
%
\label{Sect-sinqhm-select}
%
The format of the SQHM{\usc}SELECT command, which may only be issued
once SinqHM has been successfully configured, is:
%
\begin{center}\begin{picture}(125,21)(0,-21)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}SELECT}}
\put(0,-21){\Botbox{hist-number}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{75mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}SELECT}{cmnd}{Command verb}
\Tabrow{hist-number}{u.select.hist{\usc}no}{Histogram number to be
selected}
\hline
\end{tabular}\end{center}
%
When SinqHM is configured, the user may specify that space be
reserved for multiple histograms. If so, the histogram or
group\footnote{If the SQHM{\usc}UD mode modifier was specified,
\sfbf{hist{\usc}no} must be a multiple of 2 and selects a
pair of histograms which will be active. If the SQHM{\usc}STROBO mode
modifier was specified, \sfbf{hist{\usc}no} must be a multiple
of 16.} of histograms which is currently active, i.e.
which will be updated as data are read from the fibre-optic link, can be
selected using the SQHM{\usc}SELECT command.
There are no command-specific fields in the status response from
a SQHM{\usc}SELECT command. A value of KER{\usc}{\usc}BAD{\usc}VALUE for
\sfbf{status}
indicates that \sfbf{hist{\usc}no} is illegal.
%
\newpage
%
\subsection{SQHM{\usc}STATUS}
% =============================
%
The SQHM{\usc}STATUS command is used to obtain the status of SinqHM.
There are no command dependent
parameters. The format of the status response is:
%
\begin{center}\begin{picture}(125,105)(0,-105)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{status}}
\put(0,-21){\Midbox{sub-status}}
\put(0,-28){\Midbox{config-state}}
\put(0,-35){\Midwordbox{current-hist}{number-hists}}
\put(0,-42){\Midbox{bins-per-hist}}
\put(0,-49){\Midbox{max-num-hists}}
\put(0,-56){\Midbox{max-num-bins}}
\put(0,-63){\Midbytebox{bin-compress}{bytes-per-bin}%
{active-servers}{max-servers}}
\put(0,-70){\Midwordbox{filler-mask}{daq-state-now}}
\put(0,-77){\Midbox{max-free-block}}
\put(0,-84){\Midwordbox{flags}{tsi-status}}
\put(0,-91){\Midbox{dead-time/delay-to-start}}
\put(0,-98){\Midbox{number-bad-events}}
\put(0,-105){\Botbox{up-time}}
}
\end{picture}\end{center}
%
All of these fields occur in the description of other commands.
The following list therefore only gives the various symbol names:
%
{\sffamily\begin{center}\begin{tabular}{|ll|ll|} \hline
\textbf{Field} & \textbf{Symbol Name} & \textbf{Field} &
\textbf{Symbol Name} \\ \hline
big-end-id & \textbf{bigend} &
bytes-per-bin & \textbf{bytes{\usc}per{\usc}bin} \\
status & \textbf{status} &
bin-compress & \textbf{compress} \\
sub-status & \textbf{sub{\usc}status} &
daq-state-now & \textbf{daq{\usc}now} \\
config-state & \textbf{cfg{\usc}state} &
filler-mask & \textbf{filler{\usc}mask} \\
number-hists & \textbf{n{\usc}hists} &
max-free-block & \textbf{max{\usc}block} \\
current-hist & \textbf{curr{\usc}hist} &
tsi-status & \textbf{tsi{\usc}status} \\
bins-per-hist & \textbf{num{\usc}bins} &
flags & \textbf{flags} \\
max-num-hists & \textbf{max{\usc}n{\usc}hists} &
dead-time/ & \textbf{dt{\usc}or{\usc}dts.both} \\
max-num-bins & \textbf{max{\usc}num{\usc}bins} &
\hspace*{3mm}delay-to-start & \\
max-servers & \textbf{max{\usc}srvrs} &
number-bad-events & \textbf{num{\usc}bad{\usc}events} \\
active-servers & \textbf{act{\usc}srvrs} &
up-time & \textbf{up{\usc}time} \\
\hline
\end{tabular}\end{center}}
\noindent The prefix \sfbf{u.status} is required for each of the above
symbols.\\[1.0ex]
%
\sfbf{tsi{\usc}status} is the status word (i.e. the last two bytes)
contained in the last {\em Timing Status Info} packet received from the
multi-detector interface. The \sfbf{flags} item gives various flag bits
from the last {\em Timing Status Info} packet. The various bits in
\sfbf{flags} are:
{\sffamily\begin{center}\begin{tabular}{|p{48mm}cp{75mm}|} \hline
STATUS{\usc}FLAGS{\usc}{\usc}PF & 0x8000 & Power Fail \\
STATUS{\usc}FLAGS{\usc}{\usc}SWC & 0x4000 & Status Word Changed \\
STATUS{\usc}FLAGS{\usc}{\usc}NRL & 0x2000 & Neutron Rate Low \\
STATUS{\usc}FLAGS{\usc}{\usc}DAQ & 0x1000 & DAQ on -- set if Hdr Mask Bits
are correct so that data acq is active \\
STATUS{\usc}FLAGS{\usc}{\usc}SYNC3 & 0x0800 & Ext Synch Bit 3 \\
STATUS{\usc}FLAGS{\usc}{\usc}SYNC2 & 0x0400 & Ext Synch Bit 2 \\
STATUS{\usc}FLAGS{\usc}{\usc}SYNC1 & 0x0200 & Ext Synch Bit 1 \\
STATUS{\usc}FLAGS{\usc}{\usc}SYNC0 & 0x0100 & Ext Synch Bit 0 \\
STATUS{\usc}FLAGS{\usc}{\usc}UD & 0x0080 & UD - Up/Down \\
STATUS{\usc}FLAGS{\usc}{\usc}GU & 0x0040 & GU - Gummi (i.e. Strobo) \\
\hline
\end{tabular}\end{center}}
\noindent Note that \sfbf{STATUS{\usc}FLAGS{\usc}{\usc}DAQ} is a derived
quantity. The derivation is intrument dependent. The following table lists
the requirements which must be satisfied in order for this bit to be set.
{\sffamily\begin{center}\begin{tabular}{|c|l|l|} \hline
\textbf{Instrument} & \textbf{Conditions for DAQ = 1} &
\textbf{Significance} \\ \hline
FOCUS & NRL = 0 & Neutron rate not low \\
& SYNC2 = 0 & Neutron counter is counting \\ \hline
HRPT & SYNC2 = 1 & ?? \\
& SYNC0 = 0 & ?? \\ \hline
Other & NRL = 0 & Neutron rate not low \\\hline
\end{tabular}\end{center}}
\newpage
%
%
\subsection{SQHM{\usc}WRITE}
% ===========================
%
The SQHM{\usc}WRITE command is the opposite of the SQHM{\usc}READ command.
It allows a user to preset a region of the histogram memory. It
may only be issued once SinqHM has been successfully configured.
The command format is:
%
\begin{center}\begin{picture}(125,42)(0,-42)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}WRITE}}
\put(0,-21){\Midbox{hist-number}}
\put(0,-28){\Midbox{first-bin}}
\put(0,-35){\Midbox{number-bins}}
\put(0,-42){\Botbox{bytes-per-bin}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{70mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}WRITE}{cmnd}{Command verb.}
\Tabrow{hist-number}{u.write.hist{\usc}no}{Histogram number.}
\Tabrow{first-bin}{u.write.first{\usc}bin}{Number of first bin to be
written.}
\Tabrow{number-bins}{u.write.n{\usc}bins}{Number of bins to write.}
\Tabrow{bytes-per-bin}{u.write.bytes{\usc}per{\usc}bin}{Number of bytes
per bin (1, 2 or 4).}
\hline
\end{tabular}\end{center}
%
\sfbf{hist{\usc}no} has the same meaning as for the
SQHM{\usc}READ command. Since SQHM{\usc}WRITE is intended mainly for
debugging and demonstration purposes, data acquisition is not inhibited
whilst data is read over the network and written to the histogram memory
buffer.
The SQHM{\usc}WRITE command must be followed by
$(\sfbf{n{\usc}bins} \times
\sfbf{bytes{\usc}per{\usc}bin})$
bytes of histogram data.
There are no command-specific fields in the status response to an
SQHM{\usc}WRITE command. Possible error values for
\sfbf{status} are:
%
{\sffamily\begin{center}\begin{tabular}{|p{40mm}p{110mm}|} \hline
KER{\usc}{\usc}BAD{\usc}STATE & SinqHM has not yet been configured. \\
KER{\usc}{\usc}BAD{\usc}VALUE & A command parameter is invalid. \\
KER{\usc}{\usc}BAD{\usc}RECV & SinqHM had problems reading the
histogram data over the network. \\
\hline
\end{tabular}\end{center}}
%
\newpage
%
\subsection{SQHM{\usc}ZERO}
% ===========================
%
The SQHM{\usc}ZERO command is used for setting a region of the
histogram memory buffer to zero. It may only be issued once SinqHM
has been successfully configured. The command format is:
%
\begin{center}\begin{picture}(125,35)(0,-35)
\linethickness{0.15mm} \put(0,0){
\put(0, -7){\Topbox{big-end-id}}
\put(0,-14){\Midbox{SQHM{\usc}ZERO}}
\put(0,-21){\Midbox{hist-number}}
\put(0,-28){\Midbox{first-bin}}
\put(0,-35){\Botbox{number-bins}}
}
\end{picture}\end{center}
%
\begin{center}\begin{tabular}{|llp{70mm}|} \hline
\Tabrow{\textbf{Field}}{Symbol Name}{\textbf{Description}}
\hline
\Tabrow{big-end-id}{bigend}{See Section~\ref{Sect-sinqhm-comm}}
\Tabrow{SQHM{\usc}ZERO}{cmnd}{Command verb}
\Tabrow{hist-number}{u.zero.hist{\usc}no}{Histogram number.}
\Tabrow{first-bin}{u.zero.first{\usc}bin}{Number of first bin to zero.}
\Tabrow{number-bins}{u.zero.n{\usc}bins}{Number of bins to zero.}
\hline
\end{tabular}\end{center}
%
The parameters are the same as for the SQHM{\usc}WRITE command except
that there is no histogram data accompanying the command. In
addition, if\\[1.0ex]
%
\hspace*{\fill}\sfbf{hist{\usc}no} =
\sfbf{first{\usc}bin} =
\sfbf{n{\usc}bins} = -1\hspace*{\fill}\\[1.0ex]
%
the complete histogram memory buffer will be set to zero.
Data acquisition is disabled whilst the histogram memory buffer is
set to zero. The status response is the same as for the SQHM{\usc}WRITE
command.
%
\newpage
%
\section{The SinqHM Control Program, SINQHM{\usc}CTRL}
% ======================================================
%
\label{Sect-sinqhm-ctrl}
%
The SINQHM{\usc}CTRL program can be used for transmitting commands to
SinqHM-master. It has been implemented for both the OpenVMS and
Unix operating systems.
%
\subsection{Using SINQHM{\usc}CTRL under OpenVMS}
% =================================================
%
\label{Sect-sinqhm-ctrl-vms}
%
In order to use SINQHM{\usc}CTRL under OpenVMS, it is necessary to
define a so-called DCL Foreign Command. This is best achieved by
including a command of the form:\\[1.0ex]
%
\hspace*{20mm}\texttt{\$ ctrl :== \$mad{\usc}exe:sinqhm{\usc}ctrl}
\\[1.0ex]
%
in one's login command file. One may also specify the TCP/IP host
parameters of the histogram memory via the logical name
SINQHM{\usc}FRONTEND\footnote{It is also possible to specify the
histogram memory by means of the {\em -host} option on the command
line.}, e.g.\\[1.0ex]
%
\hspace*{20mm}\texttt{\$ define/job sinqhm{\usc}frontend
"<host>,<port>,<pkt>"} \\[1.0ex]
%
where \verb#<host># is the name of the histogram memory (no
default), \verb#<port>#
is the TCP/IP port of SinqHM (default = 2400) and \verb#<pkt># is the
packet size for messages to and from SinqHM (default = 8192).
Once this has been done, it is then possible to execute the
following commands:
{\ttfamily\begin{tabbing}%
%
\hspace*{20mm}\=\$ ctrl config \verb#<#modifier\verb#>#mmmm\=! .. \kill
\>\$ ctrl config \verb#<#modifier\verb#># \>! Send SQHM{\usc}CONFIG %
command \\
\>\$ ctrl debug \verb#<#level\verb#># \>! Send SQHM{\usc}DBG %
command \\
\>\$ ctrl deconfig \verb#<#severity\verb#># \>! Send %
SQHM{\usc}DECONFIG command \\
\>\$ ctrl go \>! Send SQHM{\usc}DAQ/GO %
command \\
\>\$ ctrl help \verb#<#subject\verb#># \>! Display some help text\\
\>\$ ctrl rundown \>! Send SQHM{\usc}EXIT %
command \\
\>\$ ctrl show \>! Send SQHM{\usc}STATUS %
command \\
\>\$ ctrl stop \>! Send SQHM{\usc}DAQ/STOP %
command \\
\>\$ ctrl zero \>! Send SQHM{\usc}ZERO %
command
\end{tabbing}}
%
\noindent%
The parameters for the SQHM{\usc}CONFIG command are taken from
logical name definitions. The primary logical name is:
%
{\sffamily\begin{center}\begin{tabular}{|llp{71mm}|} \hline
\textbf{Logical Name} & \textbf{Default Value} & \textbf{Description} \\
\hline
SINQHM{\usc}MODE & \verb#"HM_DIG"# & The histogramming mode. \\
\hline
\end{tabular}\end{center}}
%
\noindent%
Further logical names are used depending on the value of
SINQHM{\usc}MODE as follows:\\[1.0ex]
%
{\bf SINQHM{\usc}MODE = \verb#"HM_DIG"# or \verb#"HRPT"#:}
%
{\sffamily\begin{center}\begin{tabular}{|lcp{69mm}|} \hline
\textbf{Logical Name} & \textbf{Default Value} & \textbf{Description} \\
\hline
SINQHM{\usc}NBINS & \verb#None# & Number of bins per histogram. \\
SINQHM{\usc}LOW{\usc}BIN & \verb#0# & First bin of histogram. \\
SINQHM{\usc}COMPRESS & \verb#0# & Bin compression factor \\
SINQHM{\usc}BYTES{\usc}PER{\usc}BIN & \verb##4 & Number of bytes per
bin (1, 2 or 4).\\
SINQHM{\usc}NHISTS & \verb#1# & Number of histograms.\\
\hline
\end{tabular}\end{center}}
%
\noindent%
{\bf SINQHM{\usc}MODE = \verb#"TOF"#:}
%
{\sffamily\begin{center}\begin{tabular}{|lcp{69mm}|} \hline
\textbf{Logical Name} & \textbf{Default Value} & \textbf{Description} \\
\hline
SINQHM{\usc}NCNTRS & \verb#None# & Number of counters.\\
SINQHM{\usc}LOW{\usc}CNTR & \verb#0# & Number of first counter.\\
SINQHM{\usc}NBINS & \verb#None# & Number of bins per histogram. \\
SINQHM{\usc}LOW{\usc}BIN & \verb#0# & First bin of histogram. \\
SINQHM{\usc}BIN{\usc}SPAN & \verb#None# & Time span per bin.\\
SINQHM{\usc}BYTES{\usc}PER{\usc}BIN & \verb##4 & Number of bytes per
bin (1, 2 or 4).\\
\hline
\end{tabular}\end{center}}
%
\noindent The values of the sub-mode bits in the SQHM{\usc}CONFIG
request to
SinqHM may be set by appending the tokens \verb#"BO_IGN"#,
\verb#"BO_SMAX"#, \verb#"BO_CNT"#, \verb#"UD"#, \verb#"STROBO"#,
\verb#"REFLECT"# or \verb#"NO_STAT"# to the value
of SINQHM{\usc}MODE.
\noindent \verb#<modifier># may be specified as \verb#"suspend"#. If so,
the SQHM{\usc}{\usc}DEBUG
modifier bit in \sfbf{mode} will be set so that SinqHM-filler
will suspend itself as soon as it starts. This is intended to allow
interactive debugging of SinqHM-filler.
\noindent \verb#<level>#
may be ``on'', ``off'' or an integer in the range 0 to 15.
The default is ``on'' which corresponds to level 1.
\noindent The SQHM{\usc}DECONFIG command will be sent with
\sfbf{sub{\usc}code} (harshness) set to zero unless
\verb#<severity># is specified as ``harsh''. In this
case, \sfbf{sub{\usc}code} will be set to 1.
\noindent The \sfbf{zero} command will set the entire
histogram buffer to zero.
%
\subsection{Using SINQHM{\usc}CTRL under Unix}
% ==============================================
%
The exact use of SINQHM{\usc}CTRL under Unix depends on the shell which
is being used. In the following, this is assumed to be {\em csh}.
It is also assumed that the {\em sinqhm{\usc}ctrl} executable is
located in directory \textsf{/data/lnslib/bin}.
The invocation of SINQHM{\usc}CTRL can be facilitated by defining
an alias such as:\\[1.0ex]
%
\hspace*{20mm} \verb#alias ctrl /data/lnslib/bin/sinqhm_ctrl# \\[1.0ex]
%
in one's \textsf{\$HOME/.cshrc} shell initialisation script. Once
this has been done, the program can be used in the same way as
is described above for OpenVMS except that one uses environment variables
instead of logical names, e.g.\\[1.0ex]
%
\hspace*{20mm} \verb#setenv SINQHM_MODE "TOF"#
%
%
\section{The SinqHM Client Program, SINQHM{\usc}CLIENT}
% =======================================================
%
\label{Sect-sinqhm-client}
%
The SINQHM{\usc}CLIENT, as opposed to the SINQHM{\usc}CTRL, program can
be used for communicating with SinqHM for functions which usually
require a long-lived link such as the display of the histogram data.
As with SINQHM{\usc}CTRL, it
has been implemented for both the OpenVMS and Unix operating systems.
The following description refers to the Unix implementation. By referring
to Section~\ref{Sect-sinqhm-ctrl-vms}, it should be clear how to run the
program under OpenVMS.
\noindent Assuming that the program is located in the
directory \textsf{/data/lnslib/bin}, define an alias as follows:\\[1.0ex]
%
\hspace*{20mm} \verb#alias client /data/lnslib/bin/sinqhm_client# \\[1.0ex]
%
The program can then be started via a command of the form:\\[1.0ex]
%
\hspace*{20mm} \verb#client -host <host>#\\[1.0ex]
%
where \verb#<host># specifies the name of the histogram memory. One
should then obtain a prompt of the form:\\[1.0ex]
%
\hspace*{20mm}\verb#The following commands are available:# \\
\hspace*{20mm}\verb# Help Open Status Read 2D Project Dump# \\
\hspace*{20mm}\verb# LOAD WRITE W2D GO STOP ZERO Quit# \\[1.0ex]
%
More information can then be obtained via the help command.
%
\section{Communication with Multi-detector Interface}
% =====================================================
%
\label{Sect-mdi-comm}
%
SinqHM can communicate with the front-end electronics via the
full-duplex RS-232-C COM2 port of the MVME-1603 PowerPC module.
The details of this communication have still to be worked out.
Here is a very, very, very preliminary proposal.
SinqHM can send the following messages to the front-end
electronics:
%
\begin{center}\begin{tabular}{|cp{90mm}|} \hline
\rule{0em}{2.5ex}\verb#RMT 1# & Set the front-ent electronics to
remote mode. \\
\rule{0em}{2.5ex}\verb#DT <val># & Set TOF start time delay to
\verb#<val>#. \\ \hline
\end{tabular}\end{center}
%
\section{Update History}
% ========================
%
\label{Updates}
%
This document has had the following changes:
%
\begin{center}\begin{tabular}{llp{90mm}}
\sfbf{Version} & \sfbf{Date} & \sfbf{Description} \\[1.0ex]
Vn 1.5 & 23-Nov-1999 & a) Add SQHM{\usc}IDENT command. \\
& & b) Add SQHM{\usc}PROJECT command. \\
& & c) Add HRPT support. \\
Draft 1.4 & 9-Dec-1998 & Add TOF support. \\
Draft 1.3 & 10-Jul-1997 & Mainly expanded documentation. \\
Draft 1.2 & 19-Mar-1997 & Initial release.
\end{tabular}\end{center}
%
\begin{thebibliography}{9}
\bibitem{CTN94005} D. Maden, PSI, Oct 1994 \\
{\em The \musr Histogram Memory Server for the KAV-30 rtVAX} \\
CTN-94-005
\bibitem{PAW} CERN Program Library, Long Write-up, Feb 1995 \\
{\em PAW Physics Analysis Workstation} \\
Entry Q121
\end{thebibliography}
\end{document}