spec

Software for Diffraction

changes

highlights of modifications for spec release 3.02

RELEASE 3.02.02

These notes summarize the cumulative changes made for spec release 3.02.02 as of April 4, 1995.

New getenv() Function

A new function getenv(s) returns the string value of the environment variable s.

edconf Asks To Confirm Rereading After Edits

The hardware configuration editor edconf now asks you to confirm whether you want to reread the starting or backup configurations (with the r or R commands) if you have made changes to the configuration before having saved them.

Help File Format Changes

The behavior of some of the formatting sequences used in the spec help files has been changed and some new sequences added. The changes allow HTML versions of the files to be created using nroff or GNU groff. See the comments in help/Makefile for information on that.

Escan Macro Change

The Escan macro, when used with the fixQ option, now takes extra measures to ensure that the position in reciprocal space does not drift.

newfile Macro Revision

The newfile macro now separates motor names by at least two spaces in the data file header.

New counter_par() Options

The counter_par() function now supports the following arguments for all controllers:

"unit"
returns the unit number of the indicated counter.
"channel"
returns the channel number of the indicated counter.
"responsive"
returns nonzero if the hardware appears to be working for the indicated counter.
"controller"
returns a string that indicates the controller type of the indicated counter.

New motor_par() Options

The motor_par() function now supports the following arguments for all controllers:

"unit"
returns the unit number of the indicated motor.
"channel"
returns the channel number of the indicated motor.
"responsive"
returns nonzero if the hardware appears to be working for the indicated motor.
"controller"
returns a string that indicates the controller type of the indicated motor.
"active"
returns nonzero if the indicated motor is currently moving.

National Instruments GPIB Support for linux

spec now supports the linux GPIB driver for the National Instruments AT-GPIB card. That driver is available via anonymous ftp from koala.chemie.fu-berlin.de.

CAMAC E500 Channel Multiplexor Improvements

The code for the E500 multiplexor has been changed to insure that the multiplexed motors are always restarted with consistent motor phases relative to the last move of the particular motor. In addition, if more than one multiplexed motor is commanded to move, each such motor will automatically be moved in sequence. The sequence is the order in which the motors are numbered in the config file.

cdef Bug fixed

A bug in the code that reads the portion of a user's state file that stores the cdef-type macros has been fixed. The bug could produce buffer overruns leading to unpredictable side affects.

New D32 Surface Geometry

A new surf_d32 configuration, as used at ESRF beamline D32, has been added.

RELEASE 3.02.01

These notes summarize the cumulative changes made for spec release 3.02.01 as of February 18, 1995.

Expanded Syntax for data_plot() and data_dump()

The element arguments to the data_plot() and data_dump() functions can now be combined in a single space- or comma-delimited string. This change will make a task such as creation of plotting macros to plot a variable numbers of curves in the same plot window easier.

Stand Alone Help File Viewer Now Included

The spec distribution now includes the stand alone CSS help file previewer chelp. This file will automatically be installed in the same directory as the other executables.

edconf Treats Change In Step Size Differently

Previously, changing the step-size parameter in the configuration editor caused the accumulator value to change to keep the motor positions fixed. Users have requested that the behavior be altered so that the accumulator would remain fixed, but the user and dial positions would scale with the change in the step size parameter. That change has been made.

More Efficient Output-File Flushing

Previously, spec flushed file output after each print-type command to an output file or device. spec users have reported that on certain platforms where the output was to an NFS-mounted file system, this frequent flushing introduced considerable delays. spec now performs flushing less frequently. A "flush_interval" parameter, that can be set by the spec_par() function, specifies how many seconds to allow between output buffer flushing. The default "flush_interval" is 0.5 seconds. If the interval is set to zero, the previous frequent-flushing behavior will be restored. Output to the screen is still flushed immediately. Output to other devices is also flushed each time the main spec prompt is issued.

Get Count Scale Factor

The function counter_par(mne, "scale") will return value of the scale factor set in the config file for the indicated counter.

New CAMAC ca_cntl() Function

A new function ca_cntl() allows users to perform CAMAC initialize, clear and inhibit crate operations from within spec on all CAMAC controllers supported by spec. Both ca_cntl("Z") and ca_cntl("init") issue the CAMAC Z (crate initialize) command. Both ca_cntl("C") and ca_cntl("clear") issue the CAMAC C (crate clear) command. The usage ca_cntl("inhibit", 1) sets crate inhibit, while ca_cntl("inhibit", 0) clears crate inhibit. During normal operation, users should not need to issue these commands. Users should probably issue a reconfig after sending a crate initialize or clear.

Increase In Number Of Devices That Can Be Configured

The configuration editor edconf now allows entry of up to twenty rows each of information for non-CAMAC motor controllers and timer/counter devices, MCA-type data acquisition devices, generic serial devices and PC I/O port addresses. The commands ^F and ^B select display of additional rows.

Optional Motor Configuration By Unit/Channel

The configuration editor now allows entering of unit/channel information for motors as an alternative to the automatic consecutive unit/channel assignment normally used. Note: at present, only selected motor controllers (E500, ESRF MAXE) in spec recognize unit/channel information. Unit/channel information, when used, must be enterned for all motors associated with a particular type of motor controller. Manual unit/channel numbering is turned on simply by entering values in the form unit/channel in an otherwise blank cells. Entering a single number changes just the channel number. Entering ^D turns off manual numbering. No consistency checking is done on the assignment in the configuration editor. spec does check for consistency when reading the config file, though. The config file uses the syntax

MOT012 = E500:0/3 ...

to store the unit/channel information.

New Motor Position Discrepancy Message (For Some)

A new motor-position discrepancy message has been deployed (currently for selected motor controls only). The new message gives hints to the appropriate course of action when motor position discrepancies arise. The new message is currently implemented for the following motor controllers: Oriel 18092, NSLS MMC32, Huber 9000, MicroControle ITL09, Klinger MM2000, NSK, PI, EPICS motors and ESRF motors. The rest of the motor controllers will be converted to the new message shortly.

Fixed Recursion Bug With Undefined cleanup Macro

A bug that under certain circumstances produced a continuous stream of cleanup: undefined messages has been fixed.

Memory Leaks Fixed

A couple of small memory leaks in spec have been fixed. Also, the memstat command now does a more complete job of memory accounting, including the addition of new categories for memory allocated by cdef() macros and memory allocated for configured hardware.

Macro Fix Involving calcG

To make it easier for users to work with a manually entered orientation matrix, the calcG macro (which sets a flag to indicate the orientation matrix should be recalculated using the current values of the lattice constants, orientation reflections and X-ray wavelength) has been relocated to the sav_ub macro. calcG was formerly included in the savegeo macro (which is defined differently for each diffractometer geometry), which calls sav_ub. (The savegeo macro is called by the save macro, which saves important parameters in a command file.) For users who enter the orientation matrix manually, the sav_ub macro should be redefined with a macro that writes the contents of UB to the save file.

Improvements in Internal Pseudomotor Code

Recent improvements in the internal code for pseudomotors have been propagated to the geo_sixc.c, geo_surf.c, geo_w21h.c and geo_w21v.c source code. The changes require use of the new internal C-code functions set_pseudo_targ() and set_pseudo_pos(). Contact CSS for technical details on adding pseudomotors to geometry code.

Motor/Counter Disabling Implemented

The functions

motor_par(mne, "disable" [, 0|1])

and

counter_par(mne, "disable" [, 0|1])

now work for all motors and counters to disable hardware access of the indicated motor or counter. All usable motors and counters are reenabled on startup and reconfig.

MCA-type Devices Can Be Disabled

Normally MCA-type devices are started and stopped the same as other configured counters by the tcount() and mcount() functions. The function

mca_par("disable" [, 0|1])

now allows that automatic starting and stopping to be disabled. The command works on the device currently selected with the mca_sel() function. Such devices can still be started and stopped using mca_par("run") and mca_par("halt"), and will also be stopped by a ^C typed at the keyboard.

New mca_put() Function

A new function mca_put(g, e) is available. For certain MCA-type devices, this function will send the data in data group g element e to the device.

CAMAC Block Mode Transfers For Selected Controllers

CAMAC block mode transfers are now implemented for the Kinetic Systems 3929 SCSI-CAMAC controller on HP 700 platforms and for the Kinetic Systems 3988 GPIB-CAMAC controller. Block modes transfers are used by some MCA-type modules.

More CAMAC Presence Tests

Simple CAMAC presence tests have been added for the Kinetic Systems 3512 and 3610, the DSP QS450, and the LeCroy 2301, 3512 and 3588 modules. These tests simply see if a module in the selected slot responds to a suitable CAMAC command. The test can't confirm whether the appropriate module is present. Presence tests for CAMAC modules such as the Kinetic Systems 3640 and the DSP E500, where the module can return a unique ID, continue to be performed.

Changes For the CAMAC E500

Several changes have been made in the code for the DSP E500 motor controller. The E500 will no longer make moves smaller than the backlash at the base rate. Rather, the normal acceleration profile will be used. In addition, the E500 will no longer read all the configured motors with each getangles. Rather, positions will be read during hardware configuration, at the end of moves, on sync commands and while moving. Also, the motor positions will not be checked for consistency with the controller before each move, as was done historically. Finally, the E500 code will recognize the new, optional unit/channel configuration information that may be present in the config file.

Changes For the CAMAC KS 3640

The Kinetic Systems 3640 no longer asserts and clears crate inhibit during counting.

Changes For the CAMAC LeCroy 2301

The LeCroy 2301 MCA buffer now implements the mca_par("chan#") to read the contents of channel # and mca_par("chan#", value) to set the contents of channel #. Also the module supports the new mca_put() function. In addition, the LeCroy 2301 now uses CAMAC block-mode transfers on CAMAC controllers where spec supports such transfers.

Changes For the CAMAC DSP 2190/4101

The DSP 2190 MCS Averager/4101 Histogramming Memory now uses CAMAC block-mode transfers on CAMAC controllers where spec supports such transfers.

Changes For ESRF MAXE Motor Controllers

There is now no longer a limit within spec on the number of MAXE controllers that can be configured. The MAXE controller supports the new unit/channel motor configuration option.

Bug With ACS MCB Motor Controller Fixed

A bug in the code in the ACS MCB motor controllers, where rate parameters may not have been set correctly for certain motors, has been fixed.

Better edconf on HP700 Platforms

On the hp700 platforms, the configuration editor edconf is now built with the HP V.4 Curses Library (libcur_colr.a). This library fixes bugs in the less-than-optimal screen updating of the standard curses library. The version of edconf shipped with spec will be statically linked with this library, since it is not part of the standard HP-UX .q instant-ignition installation (although it is included on the HP-UX distribution media).