Technical Reference
Table of Contents
  1. Introduction
  2. System Requirements
  3. Architecture
  4. Logical Unit Numbers
  5. The DSSCV Array
  6. Common Event Flags
  7. References

See also RA Users Guide

Ravi Kochhar
Department of Physiology
University of Wisconsin
Madison, Wi. 53706
Technical Report no. 17
Feb. 16, 1999
Rev. 1.004, Oct. 23, 2001
Back to Computing Page


These are the technical notes for the program RA, which is one of the main data collection programs used in the Physiology Auditory Lab at the Univ. of Wisconsin. The word "RA" is an acronym for "Response Area", and was originally designed to collect just such data. A "Response Area" is a way of defining a single neuron's response to auditory stimulus by systematically varying the Frequency and Intensity of a pure tone stimulus over the entire range that the unit responds, and recording the spike discharge rate at each "stimulus point". A "stimulus point" is defined as one particular combination of Freq-Intensity, and may include it many repetitions of the stimulus.

The RA program has since been extended to do more than just a traditional reponse area, but some of the terminology is still used in the same way. Data are collected and stored as separate "datasets" in a data file. Each dataset consists of one or more stimulus points, and each stimulus point conists of one or more repetition of the stimulus. See the DAFLIB documentation for a discussion of data storage formats.

The most basic type of data collected by the RA program are of two types: "Unit (Spike Time) Data" and "Analog Data". One or both of these is collected at each stimulus point within a dataset, and stored in the data file for that experiment. Typically, there is only data file for each animal (or subject) used for experiments, but this is not a requirement, and in some cases (such as behavior expts), there may be several separate data files for the each animal/subject.

Back to Top

System Requirements

(a) Hardware

RA was originally written for a Harris (Datacraft) 6024/5 computer with the D.M.S. operating system, and ran on that system from approx. 1977 to 1987. In 1987 it was converted to run on a MicroVAX-II computer with a RAMTEK color graphics display and the VAX/VMS operating system. It currently runs on a Digital VAXstation 3200 using the built in VWS graphics display and OpenVMS V5.5-2. Most recently (1999) it is in the process of being ported to the Windows/NT operating system.

The RA program is heavily dependent on the underlying data acquisition and graphics display hardware. It also calls several system services and therefore depends on the operating system. As such, it is not an easy program to port from one system to another, but an effort has been made to separate system-dependent and system-independent parts into separate modules.

The Harris version of RA used the DSS-1 (Digital Stimulus System) hardware designed and built by Dick Olson and Bill Rhode (see Ref # 1), which also included a UET (Unit Event Timer) and a hardware Histogram Binner. The original DSS had three independent channels of stimulus output, a 16,000 word general waveform buffer (GEWAB) and attenutors at the output of each channel, with a range of 0 to 132 dB with 1 dB increment. It also featured many knobs, joysticks and LED displays, and some experiments could be done by simple manual control from the DSS front panel. The sub-system was completed by a high-speed 12-bit A/D converter and Spectrum Analyzer designed and built by Pat Wilson, and DMA graphics controller and display built by the Physical Sciences Lab, UW-Madison.

The VAXstation version of RA relies on the DSS-II hardware built by Dick Olson for stimulus generation (completed in 1986). The DSS-II is an improved and lighter-weight version of the original DSS, and connects to the VAXstation via a DRV11-WA interface card to the system Q-Bus. It has two independent channels of stimulus output, using 16-bit DACs, each with attenuators that can be set from 0 to 127 dB in 1 dB increments, and a 1,000,000 (16-bit) word waveform memory (GEWAB) for playback of non-standard sounds. It features a more flexible timer sub-system, and two independent duration and delay timers per channel. This allows for additional expt. types such as mixing tones and noise in the same DSS channel (digitally). It also allows more output modes, such as computed noise, AM, FM, etc. and a user definable on/off window (vs. just a linear ramp in the original DSS). One notable feature of the DSS-II is that it has no front panel, or rather the front panel is blank, with just a single LED, which blinks on/off with the stimulus. The user has to rely on the computer entirely for stimulus generation and control.

The data acqisition system also includes a UET (Unit Event Timer) built by Dan Yee. A variety of A/D converters are supported, including a DEC ADQ-32, a Grant Technology model 123, and a Data Translation model DT-2752. These are all commercially available (at the time) 12-bit A/D converters with sample rates between 150,000 to 250,000 samples/sec, and plug into the Q-bus. An additional A/D converter supported is one built by Dan Yee of the Medical Electronics Lab. It features a fast (400,000 samples/sec) 16-bit Analogic A/D and connects to the Q-bus via the DRV11-WA DMA interface board. It also features an on-board Rate Generator (the Grant.Tech and DEC ADQ A/D's use the Rate Generator that is built into the DSS-II, while the Grant Tech A/D uses a special independent Rate Generator built by Bruce Anderson at the Waisman Center).

This hardware is all controlled from the VMS computer by specially written drivers and routines, which are partly described in the DSSLIB documentation.

Currently (1999), new data acquisition hardware is being built by Mike Rosing. Named DSS-III, this system is based on DSP technology. In particular, it is designed around PC-44 and PC-32 DSP boards for the ISA bus from Innovative Integration Inc. Besides being connected to a machine (Intel or Alpha based) that runs Windows/NT, one important feature of the new DSS-III is that it will support (optionally) a 25-bit DAC, and also have several additional general-purpose I/O ports for behaviour experiments. This hardware is currently under construction, and is not supported as yet by the RA program.

(b) Software

RA is written in Fortran, using the Digital Fortran compiler for OpenVMS. The DSS routines are also written in Fortran. The A/D and UET routines are in C, and the device drivers for all three devices (DSS, A/D and UET) are written in assembly language.

It is expected that the new version of RA (for Windows/NT) will be written in a combination of C++ (using the Microsoft Visual C++ compiler) and Fortran (using Digital Visual Fortran). Preliminary device drivers are being worked on by Mike Rosing and Jane Sekulski using WinDK from Bluewater Systems.

Back to Top


RA consists of a number of programs that run in a multi-tasking environment. The figure below shows the main components of RA and their interactions.

Back to Top

Logical Unit Numbers

The following is the assignment of Logical Unit Numbers (LUN's) currently used by RA:

           LUN         Used for
           ---         --------
             1         Data File (EDF)
             2         PSF (DCPF)
             3         CSF (Calibration Storage File)
             4         STBF (Status Table File)
             5         Keyboard input
             6         Terminal (screen) output
             7         Mailbox MAIL_UET
             8         Mailbox MAIL_DIS
             9         Mailbox MAIL_IC
            10         Mailbox MAIl_IC2
            11         GW storage file
            12         Mailbox MAIL_GWI
            13         Error message file
            14         Mailbox MAIL_DCPRA
            15         Mailbox MAIL_UET2
            16         Mailbox MAIL_CAM
            17         Remote VS-server
            18         Remote CN-server
            19         Mailbox MAIL_AD
            20         Mailbox MAIl_AD2
            21         Remote SF-server
            22         Mailbox MAIL_GWFL
            23         Diagnostic file (t:diag_ra.txt)

Back to Top

The DSSCV Array

The single-precision floating point array DSSCV in RA keeps track of "current values" of common parameters needed and used by RA. (DSSCV stands for DSS Current Value). For example, if the Frequency is being varied, then the 2'nd value in DSSCV always holds the current value of frequency. DSSCV is stored in a common block, and is accessible to all routines within RA. Actually DSSCV is a two dimensional array, of size DSSCV(100,2). The second dimension holds the value for either the master DSS (=1) or slave DSS (=2).

The following table shows how the contents of DSSCV are allocated:

     DSSCV index  Contents
     -----------  --------
             1       DSSN (DSS number, 1 or 2)
             2       FREQ or FCARR (Carrier Frequency, Hz)
             3       SPL (dB)
             4       MODEX (External or Program start mode)
             5       MODED1 (Delay-1 mode)
             6       MODED2 (Delay-2 mode)
             7       MSLAVE (Master or Slave) (1=master, 2=slave)
             8       DELAY1 (Delay-1 in microsecs)
             9       DUR1, STMDUR or DUR (Stimulus Duration in millisecs)
            10       DELAY-2 (Delay-2 in microsecs)
            11       DUR2 (Duration-2 in millisecs)
            12       REPINT (Repetition Time in millisecs)
            13       DELM, MDELAY or DELAY (Master delay in microsecs)
            14       NREP or NREPS (Number of repetitions)
            15       RTIME (Rise Time in millisecs)
            16       FTIME (Fall Time in millisecs)
            17       MODE (Output mode)
            18       PHASE (Carrier initial phase (0 to 1))
            19       FMOD (Modulation Frequency (Hz))
            20       PHASM or PHASEM (Modulation Phase (0 to 1))
            21       DMOD (Modulation Depth (0 to 1))
            22       VALM (Modulation Value (-1 to +1))
            23       VALC (Carrier Modulation constant)
            24       FRLOW (Low Frequency (Hz))
            25       FRHIGH (High Frequency (Hz))
            26       FMRISE (Rise time for FM sweep (seconds))
            27       FMDWELL (Hold time for FM sweep (seconds))
            28       FMFALL (Fall time for FM sweep (seconds))
            29       ATNSET (Attenuator setting (dB))
            30       CONSPL (Constant SPL code (0=No, 1=Yes))
         31-38       GWFIL (GW File name (32 chars))
         39-41       GWID (Gen. waveform DSID (12 chars))
            42       DSNUM (Data set number of Gen. waveform)
            43       TONLVL (Tone level multiplier for mask stim (0 to 1))
            44       GWLVL (GW level multiplier for masked stim (0 to 1))
            45       MASKSTM (Masking stimulus code (1=tone, 2=GW))
            46       FREQ-1 (Freq. for DSS-1 (LINCX data))
            47       FREQ-2 (Freq. for DSS-2 (LINCX data))
            48       SPL-1 (SPL for DSS-1 (LINCX data))
            49       SPL-2 (SPL for DSS-2 (LINCX data))
            50       ICD (Inter-click delay (millisecs))
            51       ITD1 (Inter-click delay for first click (microsecs))
            52       ITD2 (Inter-click delay for second click (microsecs))
            53       CDEL (Initial delay of first click (microsecs))
            54       SPKNUM (Speaker number (free-field expts))
            55       PHASM1 (Phase of lower side-band (0 to 1)) (for CAM)
            56       PHASM2 (Phase of Upper side-band (0 to 1)) (for CAM)
            57       AZIMTH (Azimuth for current VS stimulus (deg.))
            58       ELEVTN (Elevation of current VS stimulus (deg.))
            59       NOTCHCF (Synthetic Notch center freq. (Hz))
            60       NOTCHBW (Synthetic Notch (10-dB) band-width (Hz))
            61       NOTCHDEP (Synthetic Notch depth (dB))
            62       CGNUF (Upper freq. cutoff for comp. gaussian noise (Hz))
            63       CGNCF (Filter CF for computed gaussian noise (Hz))
            64       CGNBW (Band-width for comp. gaussian noise (oct or Hz))
            65       CMNMF (Modulation Freq. for computed noise (Hz))
            66       CMNMD (Modulation depth for computed noise (0 to 2))
            67       CMNMP (Modulation phase for computed noise (0 to 1))
            68       CNCF2 (CF for Band-2 (Hz))
            69       CNBW2 (Band-width for noise band-2 (Hz))
            70       CNMF2 (Mod. freq. for Band-2 (Hz))
            71       CNMD2 (Mod. depth for Band-2 (0 to 2))
            72       CNMP2 (Modulation phase for Band-2 (0 to 1))
            73       CN2BLVL (Level of Band-2 (dB up from Band-1)
            74       RMULT (CF ratio multiplier for 2-band noise)
            75       ITDRATE (ITD-rate of GW waveform (microsecs/sec))
            76       NPGW (No. of points loaded in GEWAB)
            77       TONLVLS (Tone level for masked stimulus (dB SPL))
            78       GWLVLS (GW level for masked stimulus (dB SPL))
            79       AFREQ (Adpater frequency (Hz)) (for SSF)
            80       TFREQ (Target CF (Hz)) (for SSF)
            81       TF0 (Target fundamental (F0)(Hz)) (for SSF)
            82       ADDUR (Adapter duration (millisecs)) (for SSF)
            83       ADSPL (Adapter SPL (dB)) (for SSF)
            84       SINT (Silent Interval (millisecs)) (for SSF)
            85       TGDUR (Target duration (millisecs)) (for SSF)
            86       TGNUMH (Target number of harmonics) (for SSF)
            87       TGSLOP (Target filter slope (dB/octave)) (for SSF)
            88       TGSPL (Target SPL (dB)) (for SSF)
            89       GWRES (Gen. waveform playback resolution (microsecs))
            90       GWINC (GW address increment for playback)

Back to Top

Common Event Flags

RA makes extensive use of Common Event Flags to synchronize activity between different processes that are usually running in parallel at the same time. Since the other tasks are often shared by programs other than just RA, the common event flags have been documented in the following separate document. Click here or on the link below to see the list:
DCP Common Event Flags

Back to Top


(1) "DSS - Digital Stimulus System", by R.E.Olson and W.S.Rhode.

(2) "DAFLIB - Data File Structure and Data Storage and Retrieval Routines" R.Kochhar, Dept. of Physiology, Tech report # 12, June 1993.

(3) "DSSLIB - Stimulus Generation and Data Acquisition Routines", R.Kochhar and J.Sekulski, Dept. of Physiology, Tech. Report # 10, Sept. 1988.

Back to Top

If you have questions or suggestions about this document, please send them by e-mail to kochhar@physiology.wisc.edu

Back to RA Documentation
This page last modified on : Oct. 9, 2003