Back to the Basement Computing Page
 

Documentation
 

Index
 
ASCII Table
AudMat
AudSDK
Basement Blog
BC - Behaving Cat
COM Data Collection
COMA Data Analysis
Correcting GW for phone
CSF format
DAFLIB
Data Schemas
DCP - Introduction
DCP - Tech Notes
DCP - Users Guide
DCPLIB
DSS-III Notes
DSS-III Prototype
DSSLIB
DSS3LIB
DSS4LIB
DSS4FLIB
Effective SPL computation
EP - Evoked Potential
Error Codes
Falling Cost of Computing
FF - Free Field
Fortran and C/C++ mix
GWE - Waveform Editor
Local FAQs
Mathematical Formulae
Minicomps. & Neurophys.
MISLIB
Numerical Constants
NUMLIB
PIN - Edge/Notch
PIN - Summary
Probe Tube Correction
RA - Introduction
RA - Tech Notes
RA - Users Guide
RAP - Users Guide
Rayleigh Test
SER - Search Stimulus
SERCOM - COM Search
Signal Analysis Review
Simulating Free Space
STATPK - Introduction
STATPK - Tech Notes
STATPK - Users Guide
Status Table Formats
SysInfo
 
Disclaimer
 
DAFLIB - Data File Structure & Data Storage and Retrieval Routines
Table of Contents
  1. Introduction
  2. Data File Structure
  3. Usage
  4. DAFLIB for Windows
  5. Description of Routines
  6. Examples of Use
  7. Reading Harris Data Files
  8. Sample Data Schema
  9. References
  10. Acknowledgements
  11. Error Codes

 
Ravi Kochhar
Department of Neuroscience
University of Wisconsin
Madison, Wi. 53705
 
Technical Report no. 12
June 1993
Rev. 1.12, Feb. 28, 2002
 

(1) Introduction

This document contains a description of the data file structure used for storage of most (but not all) auditory physiology and behavior data in the Auditory Physiology Labs at the University of Wisconsin - Madison.

The data file structure in use at present is an evolution of the file structure first developed for the Harris computer in the mid 1970's, adapted for the PDP-11/RSX computer in the early 1980's, and refined into it's present form for VAX/VMS computers in the mid- 1980's (see Refs. 1 to 6). It is currently (April 2000) in the process of being updated for the Microsoft Windows environment.

Examples of data collection programs that store data using this file structure are RA, FF, COM, BC, TH, and others.(see Refs. 8 to 11).

The routines described in this report are available to access the data files that conform to this file structure.

Back to Top

(2) Data File Structure

The following is a summary of the data file structure currently in use for storage of auditory data on the Vaxstation and MicroVax computers. (Note: The file structure is currently being adapted for use on MS-Windows and will undergo significant revisions).

A single data file is typically used for storage of all data for one animal. This is not a requirement, and in some cases more than one file may be used for a single animal. For convenience, it is recommended that the name of this file include the animal number or ID in some way, though this is not a requirement, and the file can have any name. The phrase "Data File" is used freely in this report to refer to this file, i.e. the file holding all the data for one animal.A new data file is normally created by using the program "SETUP". A data file is sometimes also referred to as the "Experimental Data File" (or EDF).

A data file is a binary, direct-access file. It has a record length of 128 words, or 512 bytes. Each block of 128 words is also referred to as a "block".

Data stored in the data file are grouped into individual "data sets". A data set is simply data that is logically connected in some way, and is referred to by a "data set ID" (or DSID). Examples of data sets include (a) a Response Area (b) a Tuning Curve (c) an Acoustic Calibration (d) a Noise Waveform etc.

A data file is thus simply a collection of data sets. The first part of each data file consists of a "directory". This directory contains a complete list of all the data set ID's in the file and their locations within the data file. A data file can be pictured as a directory followed by individual data sets.

The type of data stored within each data set can be almost anything, and no restriction is imposed by the data file structure. However, the structure of the directory is well defined, as is the structure of a "mandatory header" with each data set. Moreover, the internal structure of each data set must be described by a "schema". A schema is a description of the data set written in Data Description Language (DDL). A sample schema is attached near the end of this report.

The following are general rules that apply to data files :

  • The directory is always at the start of each data file.
  • The directory can be of any (non-zero) size, but always occupies an integral number of blocks.
  • Each data set begins at the first word of a new block, i.e. the size of each data set is an integer number of blocks.
  • Entries in the directory are always contiguous. This means that if a directory entry is deleted, then all subsequent entries must be moved up. This also means that the sequence number of the data sets can change if any one is deleted. The body of the data sets, however, need not be contiguous, or in any particular order within the file.
  • The contents of each data set must be described by a schema in DDL.
  • Each data set is identified by a "Data Set ID" (DSID), and no two DSID's within a data file may be the same.

Back to Top

Directory Structure

The directory is the first item in any data file. It consists of a 16-word "directory header" followed by a number of "directory entries" which are 8 words each. (Note: one word = 32 bits).

	Directory Header

	Word Number (32-bit)	Contents
	--------------------	--------

		1-3		Animal ID (12 characters)
		4		No. of current entries
		5		Size of directory (in blocks)
		6		Unused
		7-8		Date last modified (DD-MMMYY)
		9-16		Unused

The "Date Last Modified" should be updated each time a data set is added or deleted from the file, or anytime the contents of a particular data set are modified in any way.

Immediately following the directory header, i.e. from word 17 onwards of the first block of the data file, are the individual direectory entries, one for each data set. The number of entries is stored in word (4) of the directory header (see above). The format of each directory entry is :

	Directory Entry

	Word Number (32-bit)	Contents
	--------------------	--------

		1-2		Schema name (8 characters)
		3		Data set size (in blocks)
		4-6		DSID (12 characters)
		7		Location of data set (block)
		8		Experiment Type Code (4 chars)

Each data set has a 13-word mandatory header, containing the following information :

	Data Set Header

	Word Number (32-bit)	Contents
	--------------------	--------

		1-2		Schema name (8 characters)
		3		Data set size (blocks)
		4-6		Animal ID (12 characters)
		7-9		Data set ID (12 characters)
		10-11		Date (DDMMM-YY) (8 characters)
		12		Time in 10th of secs since midnight
		13		Experiment type code (4 characters)

Note that much of the information in each directory entry is duplicated in the data set headers. This means that even if a file were damaged such that the directory were completely lost, it would still be possible to scan the body of the file and re-create the directory.

Back to Top

(3) Usage

VAX/VMS: The routines described in this report are all in library DAFLIB and may be linked to user programs as follows :

    LINK program,........,L:DAFLIB/L

The library DAFLIB resides in directory L: on the VAX.

Windows 9x/NT/2000/XP/Vista/Win7: See "DAFLIB for Windows" section below

In all the routines described below, an error code value NER is returned. The value of NER indicates whether the routine completed successfully or whether an error condition was detected. In all cases, a value of NER=0 indicates successful completion. If NER is non-zero, it can indicate a variety of problems. A description of all possible values of NER, and their interpretation, is attached at the end of this report.

Please note that, in most cases, the routine INITDF (or INITRF) or the routine INITSC must be called before any of the other routines are called. INITDF is used most often before calling any of the data storage routines, such as WENTRY, DAFOUT etc., while INITSC should be called before calling most of the data retrieval routines such as SPKT, VRANG etc. Each of the routine descriptions includes a short note about which routine needs to be called first.

INITDF and INITDFC are the only routines that open the data file for write-access.

All integer arguments must be declared type INTEGER. On the VAX this means 4-byte integers. In a few cases the integer arguments must be explicitly declared as INTEGER*2 or as INTEGER*4. These cases are mentioned with each routine where applicable.

The routines can be called from any VMS compatible language, e.g. FORTRAN or C. From FORTRAN, they are all called as subroutines, e.g. "CALL INITDF(..)".

Examples of use are provided in a separate section below.

Back to Top

(4) DAFLIB for Windows

DAFLIB for 32-bit MS-Windows (Win-95/98/NT/2000/XP/Vista/Win7) is now available, and may be downloaded from http://www.neurophys.wisc.edu/ftp/pub/AUDSTUFF/WINDOWS/. It is also available via anonymous ftp from ftp.physiology.wisc.edu in folder pub/audstuff/windows. It is available as the static library DAFLIB.LIB.

You should also get the library MISLIB.LIB from the same location, and also place it in c:\audstuff. The MISLIB.LIB library contains the routines WHATSYS and DFTYPE (see below), which are necessary to compile programs transparently on VMS and Windows systems.

The usage is similar to that for the VMS platform, and the routine descriptions below apply equally to both platforms. The file DAFLIB.LIB should be placed in a suitable folder on your hard drive (we recommend a folder named c:\audstuff) and specified in the link include options. For example, if you are using Microsoft Visual Studio, open your project, then select Project -> Settings, and add c:\audstuff\daflib.lib to the "Object/Library modules" field. (Note: you will also need to include the library MISLIB.LIB in a similar way, see below).

In order to use programs that call DAFLIB routines transparently on both VMS and Windows systems, it is necessary to inform DAFLIB about (a) what the current system is and (b) what file type is being used. This is necessary because the way the two systems store binary data is different (e.g. floating point numbers are represented differently). DAFLIB has been updated to work with either format on either system, but the program must include a call to the routine FILSYS. The new DAFLIB routine for this purpose is FILSYS (described below) and it requires two inputs, the system type-code (IWSYST), and the file-type code (IFTYP).

The values of IWSYST and IFTYP can be obtained simply by calling two new routines, WHATSYS and DFTYPE, which are in the library MISLIB.

The brief instructions for the order in which the routines should be called are as follows:

          :
          CALL WHATSYS(IWSYST)
          CALL INITDF(NAMFIL,LUN,NER)
          CALL DFTYPE(LUN,IFTYP,NER)
          CALL FILSYS(IWSYST,IFTYP,NER)
          :
          other DAFLIB routines
          :

See below for a detailed description of the arguments of these routines.

Back to Top

(5) Description


	INITDF(NAMFIL,LUN,NER)

	Open the data file and assign it to logical unit number LUN.

	NAMFIL : Data File Name (integer array, whose last byte must be 0)
	LUN    : Logical unit number to assign to file (1,2,3,...etc.)
	NER    : Error code (normally zero)

	NAMFIL and LUN must be supplied by the calling program, while
	NER will be returned. This routine should normally be called
	once before any of the other routines are called. The exception
	to this is that any one of the following routines may be called
	instead (they all open the data file) :

		INITRF, INITDFC, INITSC, INITRFC

	Note that this routine opens the file Read and Write access. In 
	some cases it is necessary to open the file for Read-only access.
	Use either INITRF or INITRFC for those cases.


	INITDFC(NAMFIL,LUN,NER)

	This routine is similar INITDF in every way except that here 
        "NAMFIL" is a character string data type (as compared to an 
        integer array in INITDF).


	INITRF(NAMFIL,LUN,NER)

	This routine is similar INITDF in every way except that here the 
        file is opened for Read-only access. This means that those DAFLIB 
        routines that write into the file (e.g. DAFOUT) cannot be called after 
        this one.


	INITRFC(NAMFIL,LUN,NER)

	This routine is similar INITDF in every way except that here the 
        file is opened for Read-only access, AND the file name is supplied as a 
        character string (not as an integer array). This means that those DAFLIB 
        routines that write into the file (e.g. DAFOUT) cannot be called after 
        this one.


	MDSID(DSID,IBUF,LOC,KODE,NER)

	Search (match) a data set in the directory. If found, return its 
        entry contents and location.

	DSID	: Data set ID (type character string)
	IBUF	: Directory entry (8 word Integer array)
	LOC	: Location in directory (word number)
	KODE	: if=0 then DSID not found, if=N then N is the sequence
			number of DSID in the directory
	NER	: Error code, normally zero.

	DSID must be supplied by the user, while IBUF, LOC, KODE and NER 
        will be returned. Note that the DSID can contain 12 or fewer characters.

	INITDF (or INITRF) must be called before this routine.


	MDSIDI(IDSID,IBUF,LOC,KODE,NER)

	Search (match) a data set in the directory. If found, return its 
        entry contents and location.

        This routine is identical to MDSID (see above) in every way except 
        that here IDSID is an integer array (of 12 characters).


	GETESQ(NUM,IBUF,NER)

	Get the contents of the NUM'th entry in the directory.

	NUM	: Sequence number in directory
	IBUF	: Directory entry (8 word Integer array)
	NER 	: Error code, normally zero.

	NUM must be supplied by the calling program, IBUF and NER are 
        returned by this routine.

	INITDF (or INITRF etc.) must be called before this routine.


	GETDH(NBUF,NER)

	Get the directory header.

	NBUF	: Directory header (16 word Integer array)
	NER	: Error code, normally zero.

	Both NBUF and NER are returned by this routine. For a description 
        of the directory header format, see the chapter titled "Data File 
        Structure" in this report.

	INITDF (or INITRF etc.) must be called before this routine.


	WRDH(NBUF,NER)

	Write the directory header to the EDF.

	NBUF	: Directory header (16 word Integer array)
	NER	: Error code, normally zero.

	NBUF must be supplied, while NER will be returned. For a description 
        of the directory header format, see the chapter titled "Data File 
        Structure" in this report.

	INITDF (or INITRF etc.) must be called before this routine.


	SPDIR(NENT,NLFT,NXTL,NER)

	Check available space, and next available location in the 
        directory.

	NENT	: Number of entries currently in directory.
	NLFT	: Available space (in words)
	NXTL	: Next available location (word number)
	NER	: Error code, normally zero.

	NENT, NLFT, NXTL and NER are all returned by this routine.

	INITDF (or INITRF) must be called before this routine.


	WENTRY(IBUF,NER)

	Make a new entry in the directory.

	IBUF	: Directory entry (8 word integer array)
	NER    : Error code, normally zero.

	IBUF must be supplied by the calling program, NER will be 
        returned. For a description of the directory entry format, see the 
        chapter titled "Data File Structure" in this report.

	INITDF must be called before this routine.


	WENTRYN(IBUF,NER)

	Similar to WENTRY except here the routine does not check whether
        the DSID already exists in the file or not. This is a special
        purpose routine intended for special cases only where there is
        no chance of DSID's being duplicated - e.g. when ID's are 
        auto-generated within a program, and where there are so many
        data sets that there is a real benefit from skipping the check.
        In general it is highly recommended that WENTRY be called instead,
        since a directory with duplicate DSID's is invalid.


	DENTRY(IBUF,NER)

	Delete the entry with specified DSID from the directory. All 
        subsequent entries are moved up one space.

	DSID	 : Data set ID (Integer array)
	NER	: Error code, normally zero.

	DSID must be supplied, while NER will be returned by this routine.

	INITDF must be called before this routine.


	SPCDF(NSPAC,NXTA,NER)

	Check available space in the data file.

	NSPAC	: Available space (in blocks)
	NXTA	: Next available location (block no.)
	NER	: Error code, normally zero.

	NSPAC, NXTA and NER are all returned by this routine.

	INITDF (or INITRF) must be called before this routine.


	DENTSQ(NUM1,NUM2,NDEL,NER)

	Delete the entries with sequence numbers NUM1 to NUM2 in the 
        directory. All subsequent entries are moved up so there are no gaps in 
        the directory.

	NUM1	: Sequence number FROM
	NUM2	: Sequence number TO
	NDEL	: Number of entries actually deleted
	NER	: Error code, normally zero.

	NUM1 and NUM2 must be supplied, while NDEL and NER will be 
        returned by this routine.  NUM1 must be less than or equal to NUM2.

	INITDF must be called before this routine.


	CHAID(ANID,NER)

	Change the Animal ID in the directory header, and in the headers 
        of all data sets in the current data file.

	ANID	: Animal ID (3 word integer array)
	NER	: Error code, normally zero.

	ANID must be supplied, NER will be returned. All traces of the 
        previous Animal ID are erased, and replaced by ANID.

	INITDF must be called before this routine.


	CHDID(IDOLD,IDNEW,NER)

	Change the data set ID in the directory and the data set header in 
        current data file.

	IDOLD	: Current data set ID (3 word integer array)
	IDNEW	: New data set ID (3 word integer array)
	NER	: Error code, normally zero.

	IDOLD and IDNEW must be supplied by the calling program, while NER 
        will be returned.

	INITDF must be called before this routine.


	DAFOUT(LOC,IVAL,NER)

	Write a 32-bit integer value to specified location in data file. 

	LOC	: Location in file (rel. to start of file) (or -1)
	IVAL	: Integer (32-bit) value to be written out
        NER     : Error code, normally zero

        LOC and IVAL must be supplied, while NER will be returned.
        LOC is expressed as a (32-bit) word location relative to the
        start of the file. Thus LOC=1 means the first word in the file,
        while LOC=257 means the first word of the third block.

        This routine does buffered writes, which means that IVAL will
        not be written to disk immediately. To be sure that your data
        is written to disk, be sure to call DAFOUT one final time with
        IVAL=-1. A value of -1 for IVAL forces an immediate write to disk
        of the memory buffer. A call to CLOSDF will also flush the buffer
        to disk.

        INITDF or INITDFC must be called before calling this routine.


	DAFOUR(LOC,RVAL,NER)

	Write a single precision floating point value to specified
        location in data file. 

	LOC	: Location in file (rel. to start of file) (or -1)
	RVAL	: Single-precision floating point value to be written out
        NER     : Error code, normally zero

        LOC and RVAL must be supplied, while NER will be returned.

        If the routines WHATSYS and FILSYS have been correctly called
        then this routine will automatically convert between IEEE and
        VAX floating point formats as necessary.

        See the notes for DAFOUT above for additional important information.


	DAFOUC(LOC,CVAL,NC,NER)

	Write a character string to specified location in data file. 

	LOC	: Location in file (rel. to start of file) (or -1)
	CVAL	: Character String to be written out (type CHARACTER)
        NC      : Number of characters in CVAL
        NER     : Error code, normally zero

        LOC, CVAL and NC must be supplied, while NER will be returned.
        Note that CVAL is a Fortran Character String.

        See the notes for DAFOUT above for additional important information.


	DAFOIA(LOC,IBUF,NW,NER)

	Write an integer array to specified location in data file. 

	LOC	: Location in file (rel. to start of file) (or -1)
	IBUF	: Integer Array to be written out (32-bit)
        NW      : Number of words to write
        NER     : Error code, normally zero

        LOC, IBUF and NW must be supplied, while NER will be returned.
        Note that IBUF is a 32-bit integer array.

        See the notes for DAFOUT above for additional important information.


	DAFORA(LOC,RBUF,NW,NER)

	Write a floating point array to specified location in data file. 

	LOC	: Location in file (rel. to start of file) (or -1)
	RBUF	: Floating point Array to be written out
        NW      : Number of values to write
        NER     : Error code, normally zero

        LOC, RBUF and NW must be supplied, while NER will be returned.
        Note that RBUF is a single precision floating point array.

        If the routines WHATSYS and FILSYS have been correctly called
        then this routine will automatically convert between IEEE and
        VAX floating point formats as necessary.

        See the notes for DAFOUT above for additional important information.


	DAFIN(LOC,IVAL,NER)

	Read a 32-bit integer value from specified location in data file. 

	LOC	: Location in file (rel. to start of file)
	IVAL	: Integer (32-bit) variable to hold value that is read
        NER     : Error code, normally zero

        LOC must be supplied, while IVAL and NER will be returned.
        LOC is expressed as a (32-bit) word location relative to the
        start of the file. Thus LOC=1 means the first word in the file,
        while LOC=257 means the first word of the third block.

        INITDF (or INITDFC, INITRF etc.) must be called before calling 
        this routine.


	DAFINR(LOC,RVAL,NER)

	Read a floating point value from specified location
        in data file. 

	LOC	: Location in file (rel. to start of file)
	RVAL	: Real variable to hold value that is read
        NER     : Error code, normally zero

        LOC must be supplied, while RVAL and NER will be returned.
        Note that RVAL is a single precision floating point variable.
 
        LOC is expressed as a (32-bit) word location relative to the
        start of the file. Thus LOC=1 means the first word in the file,
        while LOC=257 means the first word of the third block.

        If the routines WHATSYS and FILSYS have been correctly called
        then this routine will automatically convert between IEEE and
        VAX floating point formats as necessary.

        INITDF (or INITDFC, INITRF etc.) must be called before calling 
        this routine.


	DAFINC(LOC,NC,CVAL,NER)

	Read a character string from specified location in data file. 

	LOC	: Location in file (rel. to start of file)
        NC      : Number of characters to read
	CVAL	: Character variable to hold value that is read
        NER     : Error code, normally zero

        LOC and NC must be supplied, while CVAL and NER will be returned.
        LOC is expressed as a (32-bit) word location relative to the
        start of the file. Thus LOC=1 means the first word in the file,
        while LOC=257 means the first word of the third block.

        INITDF (or INITDFC, INITRF etc.) must be called before calling 
        this routine.


	DAFIRA(LOC,RBUF,NW,NER)

	Read an array of floating point values from specified location
        in data file. 

	LOC	: Location in file (rel. to start of file)
	RBUF	: Real variable to hold values that are read
        NW      : Number of values to read
        NER     : Error code, normally zero

        LOC and NW must be supplied, while RBUF and NER will be returned.
        Note that RBUF is a single precision floating point array.
 
        LOC is expressed as a (32-bit) word location relative to the
        start of the file. Thus LOC=1 means the first word in the file,
        while LOC=257 means the first word of the third block.

        If the routines WHATSYS and FILSYS have been correctly called
        then this routine will automatically convert between IEEE and
        VAX floating point formats as necessary.

        INITDF (or INITDFC, INITRF etc.) must be called before calling 
        this routine.


	INITSC(FNAM,LUN,DSID,NER)

	Initialize file and prepare to retrieve data for specified data 
        set

	FNAM	: Data File Name (type character string)
	LUN	: Logical unit number (to which file will be assigned)
	DSID	: Data set ID (type character string)
	NER	: Error code, normally zero.

	FNAM, LUN and DSID must be supplied, while NER will be returned. 
        You must call this routine once before calling most of the routines below 
        for retrieving data for a particular data set.

        This routine opens the data file for "read access" only.


	INITSCW(FNAM,LUN,DSID,NER)

	Similar to INITSC in every way except that here we open for
        "write access". It is recommended that this be used in special
        cases only - use INITSC for normal data retrieval. 


	I4VL(NAME,I4VAL,NER)

	Retrieve the value for any Integer*4 variable whose name is 
        supplied.

	NAME	: Name of variable (type character string) (8 chars)
	I4VAL	: Value returned (integer)
	NER	: Error code, normally zero.

	NAME must be supplied, I4VAL and NER will be returned. NAME must 
        exist as a variable name in the schema for the current data set 
        (specified earlier to INITSC).

	INITSC (or INITSCW) must be called before this routine.


	RLVL(NAME,VAL,NER)

	Retrieve the value for any Real (floating point) variable whose 
        name is supplied.

	NAME	: Name of variable (type character string) (8 chars)
	VAL	: Value returned (real)
	NER	: Error code, normally zero.

	NAME must be supplied, VAL and NER will be returned.

	NAME must exist as a variable name in the schema for the current 
        data set (specified earlier to INITSC).

	INITSC (or INITSCW) must be called before this routine.


	I4AVL(NAME,MAX,I4A,NV,NER)

	Retrieve the values for an Integer*4 vector whose name is 
        supplied.

	NAME	: Name of variable (2 word integer array)
	MAX	: Max. number of values that "I4A" can hold (size of I4A)
	I4A	: Integer*4 array in which values returned
	NV	: Number of values actually returned
	NER	: Error code, normally zero.

	NAME and MAX must be supplied, I4A, NV and NER will be returned. 
        NAME must exist as a variable name in the schema for the current data set 
        (specified earlier to INITSC).

	INITSC must be called before this routine.


	RLAVL(NAME,MAX,RLA,NV,NER)

	Retrieve the values for a Real vector whose name is supplied.

	NAME	: Name of variable (2 word integer array)
	MAX	: Max. number of values that "RLA" can hold (size of RLA)
	RLA	: Real array in which values returned
	NV	: Number of values actually returned
	NER	: Error code, normally zero.

	NAME and MAX must be supplied, RLA, NV and NER will be returned. 
        NAME must exist as a variable name in the schema for the current data set 
        (specified earlier to INITSC).

	INITSC must be called before this routine.


	CHVL(NAME,MAX,ICH,NV,NER)

	Retrieve the values for a character string whose name is supplied.

	NAME	: Name of variable (type character string) (8 chars)
	MAX	: Max. number of chars. that "ICH" can hold (size of ICH)
	ICH	: Character string in which values returned
	NV	: Number of characters actually returned
	NER	: Error code, normally zero.

	NAME and MAX must be supplied, ICH, NV and NER will be returned.

	NAME must exist as a variable name in the schema for the current 
        data set (specified earlier to INITSC).

	INITSC (or INITSCW) must be called before this routine.


	VSEQ(NSEQ,MAX,VAL,NV,NER)

	Retrieve the variable values corresponding to a particular 
        sequence number in current data set.

	NSEQ	: Sequence number for which values to be retrieved
	MAX	: Max. number of values that "VAL" can hold (size of VAL)
	VAL	: Real array to contain values
	NV	: Number of values actually returned (in VAL)
	NER	: Error code, normally zero.

	NSEQ and MAX must be supplied, VAL, NV and NER will be returned.

	INITSC must be called before this routine.


	SEQV(VAL,NV,INDX,NSEQ,NTHER,NER)

	Retrieve the INDX'th sequence number corresponding to a particular 
        set of variable values (e.g. FREQ and SPL).

	VAL	: Real array containing values
	NV	: Number of values actually returned (in VAL)
	INDX	: Occurrence number of specified values (usually 1)
	NSEQ	: Sequence number
	NTHER	: Total number of stimulus points with these values
	NER	: Error code, normally zero.

	VAL, NV and INDX must be supplied, while NSEQ, NTHER and NER will 
        be returned by this routine.

	Note: It is possible to have more than one sequence with the same 
        variable values in a particular data set.

	INITSC must be called before this routine.


	SPKT(NSEQ,NTRN,INDX,MAX,BUF,NS,NSR,NSSQ,NER)

	Retrieve upto MAX spike times for specified stimulus point and 
        repetition number.

	NSEQ	: Sequence number for which spike times to retrieved
	NTRN	: Trial number for which spikes to be retrieved
	INDX	: Buffer index number (1,2,3... etc.)
	MAX	: Size of array BUF
	BUF	: Real array to contain spike times
	NS	: Actual number of spike times returned
	NSR	: Total number of spikes in this trial
	NSSQ	: Total number of spikes at this stimulus point
	NER	 : Error code, normally zero.

	NSEQ, NTRN, INDX and MAX must be supplied by the calling program, 
        while BUF, NS, NSR, NSSQ and NER will be returned.

	The spike times are returned in units of milliseconds.

	The value of INDX determines which block of MAX spikes to 
        retrieve. If INDX=1 then first MAX spikes, if it is 2 then second MAX 
        spikes etc. NS is the actual number of spikes returned. The actual number 
        of spikes returned (in BUF) is always between 0 and MAX.

	INITSC must be called before this routine.


	SPKTM(IUC,NSEQ,NTRN,INDX,MAX,BUF,NS,NSR,NSSQ,NER)

	Retrieve upto MAX spike times for current data set.

	This is very similar to routine SPKT above, with the addition of 
        the parameter "IUC". IUC is a 64-word integer array containing the UET 
        channel numbers for which data is to be retrieved and ending with a 
        negative number.

	For example, if IUC(1)=0, IUC(2)=1 and IUC(3)=-1, then data is 
        retrieved for channels 0 and 1 of the UET only.

	If IUC(1)=-1 then data is returned for all channels (in this case 
        the results are the same as if routine SPKT had been called instead).


	GSTB(MAX,NI4,NSTYP,NX,NY,NZ,NV,NER)

	Retrieve the Status Table for the current data set.

	MAX	: Maximum size of Status Table
	NI4	: Integer array to contain Status Table (of size MAX)
	NSTYP	: Type of Status Table (1,2,3 etc.)
	NX	: No. of X-variables in Status Table (or no. of entries)
	NY	: No. of columns in Status Table (or no. of pointers)
	NZ	: No. of Z-variables in Status Table
	NV	: No. of variable values in Status Table (Type-1 table only)
	NER	: Error code, normally zero.

	MAX must be supplied by the calling program, while NI4, NSTYP, NX, 
        NY, NZ, NV and NER will be returned by this routine. Note : NI4 is a 
        single-dimensioned array.

        For type-1 Status Tables, NX will contain the number of entries
        in the table, and NY will contain the "number of pointers" for each entry.
        NZ should be ignored.

	INITSC must be called before this routine.


	VRANG(KODE,VARV,IVARV,NER)

	Retrieve the range, etc., of specified RA-variable for current 
        data set.

	KODE	: if=1 then X-variable, if=2 then Y-var, if=3 then Z-var
	VARV	: 4-word real array in which values will be returned
			Interpreted as follows :
			(1) Low   (2) High  (3) Increment  (4) Steps/Octave
	IVARV	: 2-word integer array, will contain the following :
			(1) if=1 then linear steps, if=2 then log steps
			(2) order of presentation, if =1 then low-to-high
			if=2 then high-to-low, if=3 then random
	NER	: Error code, normally zero.

	KODE must be supplied by the calling program, while VARV, IVARV 
        and NER will be returned.

	INITSC must be called before this routine.


	VNAME(NUMV,NAMV,NER)

	Get number of variables, and names of the variables for current 
        data set.

	NUMV	: Number of variables
	NAMV	: Names of variables (character*8 array of dimension
						at least NUMV)
	NER	: Error code, normally zero.

	NUMV, NAMV and NER are returned by the routine.

	It is recommended that array NAMV be dimensioned to at least 10.

	INITSC must be called before this routine.


	IRGV(NAMV,NAMG,NOCR,I4,NER)

	Retrieve the integer*4 value of the specified variable which 
        occurs within a specified "repeating group".

	NAMV	: Variable name (type character string) (8 chars)
	NAMG	: Repeating group name (type character string) (8 chars)
	NOCR	: Occurrence number of repeating group (1,2,3...etc.)
	I4	: Integer*4 value


	NER	: Error code, normally zero.

	NAMV, NAMG and NOCR must be supplied by the calling program, while 
        I4 and NER will be returned.

	INITSC must be called before this routine.


	RRGV(NAMV,NAMG,NOCR,VAL,NER)

	Retrieve the "real" value of the specified variable which occurs 
        within a specified "repeating group".

	NAMV	 : Variable name (type character string) (8 chars)
	NAMG	: Repeating group name (type character string) (8 chars)
	NOCR	: Occurrence number of repeating group (1,2,3...etc.)
	VAL	: Real value
	NER	: Error code, normally zero.

	NAMV, NAMG and NOCR must be supplied by the calling program, while 
        VAL and NER will be returned.

	INITSC must be called before this routine.


	HARVAX(NAMFIL,LUN,KODE,NER)

	Check whether specified data file is Harris or VAX format.

	NAMFIL	: Data file name (integer array - last byte must be zero)
	LUN	: Logical unit number to assign to data file
	KODE	: File type : if=1 then VAX format, if=2 then Harris
	NER	: Error code, normally zero.

	NAMFIL and LUN must be supplied, while KODE and NER will be 
        returned by this routine.


	RSPKT(LOCA,NTRN,NREP,INDX,MAX,BUF,NS,NER)

	Read the spike time data for specified trial number.

	LOCA	: Location (word no.) rel to start of data set, of
			start of spike data header
	NTRN	: Trial number for which data to be retrieved
	NREP	: Total number of reps for this sequence
	INDX	: Index into spike train (1,2,3..) (i.e. buffer number)
	MAX	: Max. no. of spikes than can be retrieved (size of BUF)
	BUF	: Real array to hold spikes times (of size MAX)
	NS	 : Number of spikes actually retrieved
	NER	: Error code, normally zero.

	LOCA, NTRN, NREP, INDX and MAX must be supplied, while BUF, NS and 
        NER will be returned. The spikes times are returned in units of 
        millisecs. INDX determines which block of MAX spikes to get. If INDX=1 
        then the first MAX spikes, if =2 then the second MAX spikes (for trial 
        no. NTRN), etc.

	INITSC must be called before this routine.


	GLVS(LOCT4,NV,LOCR4,LENC,NER)

	Get location of NV'th vector string starting at location LOCT4.

	LOCT4	: Word location rel. to start of data set
	NV	: String vector number (1,2,3,...etc.)
	LOCR4	: Location of NV'th vector (rel to start of data set)
	LENC	: Length (number of characters)
	NER	: Error code, normally zero.

	LOCT4 and NV must ber supplied, LOCR4, LENC and NER will be 
        returned by this routine.

	It is assumed that all intervening variables are type "vector 
        string".

	INITSC must be called before this routine.


	RDID(NER)

	Read ID-list from data file directory into memory.

	NER	: Error code, normally zero.

	This routine reads the entire list of data set ID's for the 
        current file into a memory buffer. This can then be followed by calls to 
        routine MDID (below) for fast lookup of particular ID's. This is a 
        special purpose routine and should be used only when fast lookup of ID's 
        is desired.

	INITDF or INITRF must be called before this routine.


	MDID(ID,KODE,NER)

	Search the current directory and check if entry "ID" already 
        exists.

	ID	: Data set ID to be matched (type character) (12 chars)
	KODE	: Returned as 0 if no match
			else set equal to entry number in directory
	NER	: Error code, normally zero.

	ID must be supplied, KODE and NER returned.

	This routine is similar in function to "MDSID" above, but it works 
        a lot faster.

	RDID must be called before this routine.


	DDID(ID,NER)

        Delete the specified data set ID from the current "ID Buffer" in memory.

	ID	: Data set ID to be removed (type character) (12 chars)
	NER	: Error code, normally zero.

	ID must be supplied, NER will be returned. Note: this routine only
        removes the DSID from the memory buffer, not from disk.

	RDID must be called before this routine.


	DQID(N1,N2,NER)

        Delete the specified data sets from the current "ID Buffer" in memory.

	N1	: Data set number FROM
	N2	: Data set number TO
	NER	: Error code, normally zero.

	N1 and N2 must be supplied, NER will be returned. Note: this 
        routine only removes the dataset in the range n1 to N2 from the 
        memory buffer, not from disk.

	RDID must be called before this routine.


	ADID(ID,LOCI,NER)

        Add the specified data set ID to the current "ID Buffer" in memory.

	ID	: Data set ID to be added (type character) (12 chars)
        LOCI    : Location of dataset in file
	NER	: Error code, normally zero.

	ID and LOCI must be supplied, NER will be returned. Note: this 
        routine only adds the DSID to the memory buffer, not to disk.

	RDID must be called before this routine.


	VSVL(NAME,MAX,CVAL,NCH,NER)

	Retrieve the value of any vector string variable whose name is 
        supplied.

	NAME	: Variable name (type character string) (8 chars)
	MAX	: Max. no. of characters acceptable
	CVAL	: Character value (type character)
	NCH	: No. of characters returned
	NER	: Error code, normally zero.

	NAME and MAX must be supplied, while CVAL, NCH and NER will be 
        returned.

	INITSC must be called before this routine.


	VSRGV(NAMV,NAMG,NOCR,MAX,CVAL,NCH,VAL,NER)

	Retrieve the vector string value of the specified variable which 
        occurs within a specified Repeating Group.

	NAMV	: Variable name (type character string)
	NAMG	: Repeating Group name (type character string)
	NOCR	: Occurrence number of repeating group (1,2,3..etc.)
	MAX	: Max # of occurrences to retrieve
	CVAL	: Character value (type character)
	NCH	: No. of characters returned
	VAL	: Numerical equivalent value
			(or, -909090 if unable to decipher)
	NER	: Error code, normally zero.

	NAMV, NAMG, NOCR and MAX must be supplied, while CVAL, VAL and NER 
        will be returned.

	INITSC (or INITSCW) must be called before this routine.


	VSRGVI(INAMV,INAMG,NOCR,MAX,ICVAL,NCH,VAL,NER)

        Similar to "VSRGV" (above) except here the character strings
        are zero-terminated integer arrays (for compatibility with C/C++)
        Thus INAMV, INAMG and ICVAL are all zero-terminated integer
        or byte arrays. For further description see VSRGV above.


	DAFINVS(LOC,MAX,CVAL,NCH,NER)

	Read value of vector string variable starting at specified 
        location in data file.

	LOC	: Location (word #) relative to start of file
	MAX	: Max # of occurrences to retrieve
	CVAL	: Character value (type character)
	NCH	: No. of characters returned (in CVAL)
	NER	: Error code, normally zero.

	LOC and MAX must be supplied, while CVAL, NCH and NER will be 
        returned.

	INITSC or INITRF or INITDF must be called before this routine.


	CRGV(NAMV,NAMG,NOCR,LEN,CVAL,NER)

	Retrieve the character string value of the specified variable 
        which occurs within a specified "repeating group".

	NAMV	: Variable name (type character) (8 chars)
	NAMG	: Repeating Group name (type character) (8 chars)
	NOCR	: Occurrence number of repeating group (1,2, etc.)
	LEN	: No. of characters to be retrieved
	CVAL	: Character value (type character string)
	NER	: Error code, normally zero.

	NAMV, NAMG, NOCR and LEN must be supplied, while CVAL and NER will 
        be returned.

	INITSC (or INITSCW) must be called before this routine.


	CRGVI(INAMV,INAMG,NOCR,LEN,ICVAL,NER)

        Similar to "CRGV" (above) except here the character strings
        are zero-terminated integer arrays (for compatibility with C/C++)
        Thus INAMV, INAMG and ICVAL are all zero-terminated integer
        or byte arrays. For further description see CRGV above.


	LORG(NAMG,NAMV,NOCR,LOCRG,LENRG,LOCV,IVTYP,NER)

	Get location and length of a repeating group, and also the 
        location and type of specified variable within that RG, for a particular 
        occurrence.

	NAMG	: name of Repeating Group (type character string) (8 chars)
	NAMV	: name of variable (type character string) (8 chars)
	NOCR	: Occurrence number of RG (1,2,3...etc.)
	LOCRG	: Location of NOCR'th occurrence of RG
			(word # rel. to start of data set)
	LENRG	: Length of RG for occurrence # NOCR
	LOCV	: Location of variable for NOCR'th occurrence of RG
			(word # rel. to start of data set)
	IVTYP	: Variable type code
	NER	: Error code, normally zero.

	NAMG,NAMV and NOCR must be supplied, LOCRG, LENRG, LOCV, IVTYP and 
        NER are returned by this routine.

	INITSC (or INITSCW) must be called before this routine.


	DELOC(NAME,LOC,ITYP,LEN,NER)

	Determine the location of the specified variable within the current data set.

	NAME	: Variable name (type character string) (8 chars)
	LOC	: Location of variable (Word # rel. to start of data set)
	ITYP	: Type of Variable (1=Intger*4, 2=Real, 3=Alphanumeric,
			4=RG, 5=Vector String, 6=Vector RG)
	LEN	: Length for Alpha strings. For Repeating Groups,
			rightmost 16-bits = Length of RG in 32-bit words,
			leftmost 16-bits = Number of occurences of RG
	NER	: Error code, normally zero.

	NAME must be supplied, while LOC, ITYP, LEN and NER will be returned.

	INITSC (or INITSCW) must be called before this routine.


	DAFBSZ(NBSIZ,NER)

	Set the "Read Buffer Size" for use by DAFLIB I/O routines.

	NBSIZ	: Buffer size in blocks (1 to 1500)
	NER	: Error code, normally zero.

	This routine should be called before a call to INITDF, INITRF or 
        INITSC. This routine is for use by advanced users who understand all the 
        implications. Misuse could result in bad data being read in.

	Note: You don't have to call this routine. DAFLIB routines will 
        work fine without it, using a default read buffer size of 1 block.
Back to Top

(6) Examples of Use

The following are examples of C and FORTRAN programs used to fetch some basic imformation from a data file and a data set. In these examples the checking for error codes (NER) has been omitted for brevity. In a real case, you should always check the value of NER after every call to a DAFLIB routine.

<...The examples will be added in a future version...>

Back to Top

(7) Recovery of Harris Data

Data collected using the Harris computer may also be accessed directly using routines in DAFLIB. It is assumed that Harris data files of interest have been transferred to a disc on the VAX/VMS computer or a Windows system.

To retrieve data from a Harris format file, a parallel set of routines have been written. These routines also reside in DAFLIB, and have names and functions which are the same as described above, except that the letter "H" is added as a prefix to each name. For example, the HINITSC is the same as routine INITSC except that it works on Harris data files.

The following routines are available in DAFLIB for accessing Harris data files :


	HINITRF		HGETDH		HDAFIN	HGETESQ	HSPDIR

	HMDSID		HINITSC		HGSTB	    	HI4VL		HDELOC

	HVRANG		HDAFINR		HRLVL	    	HIRGV		HRRGV

	HVNAME		HCHVL			HDAFINC	HRSPKT	HCRGV

	HSPKT			HSEQV
In each case, the calling parameters and function is the same as for routines used to access VAX data files.

Back to Top

(8) Sample Data Schema

/* This is the source for schema SCH006 (VMS/RSX systems) */
/* Written : 12/20/1988  (RK) */
/* Last modified : 1/19/1989  (RK) */
/* Schema for data collected with the Response Area Program */
01  SCHNAM TYPE STRING LENGTH 8
01  RECLNT			/* in blocks */
01  ANID TYPE STRING LENGTH 12
01  DSID TYPE STRING LENGTH 12
01  DATE TYPE STRING LENGTH 8
01  TIME			/* in 10ths of seconds since midnight */
01  EXTYP TYPE STRING LENGTH 4
/* The above completes the mandatory header */
01  UDATA			/* 0=No spike data, 1=Yes spike data */
01  ADATA			/* 0=No Analog data,1=Yes Analog data*/
01  CDATA			/* 0=No Cyc. Histogram data, 1=Yes */
01  SDATA			/* 0=No Spontaneous Activity, 1=Yes */
01  STFORM			/* STATUS table format code */
01  NUMPT			/* No. of pointers in STATUS table */
01  LSTAT			/* Location of STATUS table */
01  NSEQ			/* No. of sequences in STAT. table */
01  URATE TYPE STRING 4 OCCURS 3 TIMES	/* Unit rating at three 	
						times */
01  XVAR TYPE RG
	02 LOW TYPE REAL
	02 HIGH TYPE REAL
	02 INC TYPE REAL		/* Step size (if linear incr) */
	02 SOCT TYPE REAL		/* Steps per Octave (log incr) */
	02 LOGLIN			/* 1=Linear steps, 2=Log steps */
	02 OPRES			/* Order of Presentation */
01  YVAR TYPE RG
	02 LOW TYPE REAL
	02 HIGH TYPE REAL
	02 INC TYPE REAL
	02 SOCT TYPE REAL		/* Steps per Octave (log incr) */
	02 LOGLIN			/* 1=Linear steps, 2=Log steps */
	02 OPRES			/* 1=Lo-Hi, 2=Hi-Lo, 3=Random */
01  ZVAR TYPE RG
	02 LOW TYPE REAL
	02 HIGH TYPE REAL
	02 INC TYPE REAL
	02 SOCT TYPE REAL 		/* Steps per Octave (log incr) */
	02 LOGLIN			/* 1=Linear steps, 2=Log steps */
02 OPRES				/* 1=Lo-Hi, 2=Hi-Lo, 3=Random */
01  NUMV				/* No. of variables */
01  VNAME TYPE RG OCCURS NUMV TIMES
	02  NAMEV TYPE STRING 8	/* Variable name */
01  MDSS				/* Master DSS number */
01  NREPMD				/* No. of reps for Master DSS */
01  NUMDSS				/* No. of DSSs used */
01  DSSDAT TYPE VECTOR RG OCCURS NUMDSS TIMES
	02  LDSS			/* Length of DSSDAT (words) */
	02  DSSN			/* DSS number (1 or 2) */
	02  MODE			/* DSS output mode */
	02  MODEX			/* external or prog start */
	02  MODED1			/* Delay-1 mode */
	02  MODED2			/* Delay-2 mode */
	02  MSLAVE			/* Master/slave mode 		
					(1=master,2=slave) */
	02  CONSPL		/* Constant SPL code, 0=No, 1=Yes */
	02  PHFLAG		/* 0=Not corrected for phase, 1=Yes */
	02  GWNUMP		/* No. of points in GW waveform */
	02  GWCORR		 /* if 1 then GW corrected for calib */
	02  GWCODE		/* GW waveform type code */
	02  GWUNF		/* GW noise 0=frozen, 1=unfrozen */
	02  GWSINC		/* GW start increment in no. points */
	02  GWDIFF		/* GW address diff for Cosine Noise */
	02  GWRES TYPE REAL		/* GW playbck res in microsecs */
	02  CALID TYPE STRING 12	/* Calib ID for correction */
	02  FREQ TYPE VECTOR STRING	/* Carrier freq in Hz */
	02  DELAY1 TYPE VECTOR STRING	/* in microsecs */
	02  DUR1 TYPE VECTOR STRING	/* in millisecs */
	02  DELAY2 TYPE VECTOR STRING	/* in microsecs */
	02  DUR2 TYPE VECTOR STRING	/* in millisecs */
	02  REPINT TYPE VECTOR STRING	/* Rep time in millisec */
	02  DELM TYPE VECTOR STRING	/* Master delay in usec */
	02  NREPS TYPE VECTOR STRING	/* No. of repetitions */
	02  SPL TYPE VECTOR STRING		/* Initial SPL (dB) */
	02  RENV TYPE VECTOR STRING	/* Rise time envelope */
	02  RTIME TYPE VECTOR STRING	/* Rise time in msecs */
	02  FENV TYPE VECTOR STRING	/* Fall time envelope */
	02  FTIME TYPE VECTOR STRING	/* Fall time in msecs */
	02  PHASE TYPE VECTOR STRING	/* Initial phase (0-1) */
	02  FMOD TYPE VECTOR STRING	/* Modulation Freq.(Hz) */
	02  PHASM TYPE VECTOR STRING	/* Mod. Phase (0-1)*/
	02  DMOD TYPE VECTOR STRING	/* Modulation Depth (0-1)*/
	02  VALM TYPE VECTOR STRING	/* Mod value (-1 to +1) */
	02  VALC TYPE VECTOR STRING	/* Carrier Mod constant */
	02  FRLOW TYPE VECTOR STRING	/* Low Frequency (Hz) */
	02  FRHIGH TYPE VECTOR STRING	/* High Frequency (Hz) */
	02  FMRISE TYPE VECTOR STRING	/* Rise time,FM swp (ms)*/
	02  FMDWELL TYPE VECTOR STRING	/* Hold time,FM swp (ms)*/
	02  FMFALL TYPE VECTOR STRING	/* Fall time,FM swp (ms)*/
	02  ATTSET TYPE VECTOR STRING	/* Attenuator valu (dB) */
	02  GWFIL TYPE VECTOR STRING	/* Name,GW storage file */
	02  GWID TYPE VECTOR STRING	/* ID,General Waveform */
	02  GWDS TYPE VECTOR STRING	/* GW data set number */
	02  TONLVL TYPE VECTOR STRING	/* Tone level for mask 	
						stimulus(0-1) */
	02  GWLVL TYPE VECTOR STRING	/* GW level for mask 	
						stimulus (0-1) */
	02  MSKSTM TYPE VECTOR STRING	/* Masking Stim (TON/GW)*/
	02  MODSTM TYPE VECTOR STRING	/* Modul Stim (TONE/GW) */
01  TBASE TYPE REAL			/* UET time base,secs */
01  ISDEL TYPE VECTOR STRING		/* Inter-seq delay,msec*/
01  IXDEL TYPE VECTOR STRING		/* Inter-Xvar dela,msec */
01  UNITDEL1			/* Code,units of DELAY1 (sec=10**code)*/
01  UNITDUR1			/* Code for units of DUR1 */
01  UNITDEL2			/* Code for units of DELAY2 */
01  UNITDUR2			/* Code for units of DUR2 */
01  UNITREPI			/* Code for units of REPINT */
01  UNITDELM			/* Code for units of DELM */
01  UNITRTIM			/* Code for units of RTIME */
01  UNITFTIM			/* Code for units of FTIM */
01  UNITFMR			/* Code for units of FMRISE */
01  UNITFMD			/* Code for units of FMDWELL */
01  UNITFMF			/* Code for units of FMFALL */
01  UNITTBAS			/* Code for units of TBASE */
01  UNITISD			/* Code for units of ISDEL */
01  UNITIXD			/* Code for units of IXDEL */
01  NUCH			/* No. of UET data channels */
01  UETCH TYPE RG OCCURS NUCH TIMES
	02  UCHAN		/* UET channel number */
01  ASAMPT TYPE REAL	/* Analog sampling time in secs */
01  ABUF			/* No. of points per cycle */
01  ANCYC			/* No. of cycles sampled */
01  ANSEP			/* No. of cycles stored/stim point */
01  AVCODE			/* 0=No averaging, 1=Yes averaging */
01  AVOLC TYPE REAL		/* Voltage conversion factor */
01  AVCC TYPE REAL		/* Voltage Conversion Code */
01  ANBITS			/* No. of bits per sample 16/32 */
01  NACH			/* No. of A/D channels */
01  ADCH TYPE RG OCCURS NACH TIMES
	02  ACHAN		/* A/D Channel number */
01  NUMPHT		/* No. of Period (Cycle) histograms */
01  CHIST TYPE RG OCCURS NUMPHT TIMES
	02  CHFREQ TYPE VECTOR STRING	/* Binning Freq in Hz for 	
						Cycle Hist.*/
	02  CHNBIN		/* No. of bins in Cycle Histograms */
01  LDUMMY
01  DUMMY LENGTH LDUMMY	/* Extra space for future use */
01  DATA TYPE RG OCCURS NSEQ TIMES	/* Spike time data */
	02  TSDATA TYPE VECTOR INTEGER OCCURS NREPS TIMES
01  ADATA TYPE RG OCCURS NSEQ TIMES	/* Sampled analog data */
	02  ANDATA TYPE VECTOR INTEGER OCCURS ANSEP TIMES
01  CDATA TYPE RG OCCURS NSEQ TIMES	/* Cycle histogram data */
	02  CHDAT TYPE RG OCCURS NUMPHT TIMES
		03  CHDATA TYPE VECTOR INTEGER
01  STATTB TYPE RG
	02  ADDRPT OCCURS NUMPT TIMES	/* Address pointer(s) */
00
Back to Top

(9) References

  1. "DAFLIB - Directory and Data File Structure for the Neurophysiology Auditory Computer Laboratory", R.Kochhar and Y.Samad, Oct. 1977.

  2. "Data File Structure", Conversion to the PDP-11 : Report number 2, R.Kochhar, Sept. 23, 1981.

  3. "Data File Structure - Part 2", Conversion to the PDP-11 : Report number 6, R.Kochhar, Apr. 27, 1982.

  4. "DAFLIB", Conversion to the PDP-11 : Report number 4, R.Kochhar, M.Clark and R.Kettner, May 6, 1982.

  5. "Unit Data Storage - Part 1", Conversion to the PDP-11 : Report number 10, Sept. 2, 1982.

  6. "Unit Data Storage - Part 2", Conversion to the PDP-11 : Report number 15, July 7, 1983.

  7. "STATUS Table Formats", R.Kochhar, Programming note no. 18, Dept. of Physiology, Nov. 1999

  8. "RA - Response Area Data Collection", R.Kochhar, Technical Report no. 3, Dept. of Physiology, Oct. 1996

  9. "FF - Virtual Free Field Data Collection", R.Kochhar, Technical Report no. 19, Dept. of Physiology, Aug. 1997

  10. "COM - Cat Oculomotor Data Collection", J.Sekulski, Dept. of Physiology, Oct. 1996.

  11. "BC - Behaving Cat Data Collection", R.Kochhar, Technical Report no. 16, Dept. of Physiology, Aug. 1992.
Back to Top

(10) Acknowledgements

The work described in this report has been carried out under the overall supervision of Dr. W.S.Rhode.

The file structure described has been in use at the Neurophysiology Auditory Labs since 1977. The first version (for the Harris computer) was specified at a series of meetings in 1976 attended by Bill Rhode, V. Soni, Mike Mansfield, Y. Samad, John Dickson, Bob Wickesberg, and the author. Over the years it has been refined and adapted to other computers, mainly the PDP-11/RSX (1982) and VAX/VMS (1986).

Thanks are due to Yusuf Samad and Mike Clark for help with programming many of the routines. Many users of the auditory lab have contributed over the years with helpful ideas and bug discoveries.

The Data Description Language (DDL) used to describe individual data sets is a simplified version of the DDL developed by the Data Base Group at the Laboratory Computer Facility under the direction of Bill Rhode.

Supported in part by a grant from NIH.

Back to Top

(11) Error Codes

          Code  Interpretation
          ----  --------------
          101 Data set not found in data file
          102 Invalid schema name
              .This data set is not suitable for RAP analysis
          103 INITSC or HINITSC must be called first
          105 This is not an integer*4 variable
          106 Variable name not found in schema
          107 This is not a type REAL variable
          108 This is not a repeating group name
          109 This variable is not type "character"
          110 Cannot divide by zero
          115 Invalid number of repeating group occurrences
          116 RG did not occur this many times
          117 Variable does not occur within specified RG
          118 File not suitable for RAP analysis
          121 Supplied buffer is too small
          122 Number of spikes exceeds buffer size
          123 Variable value is undefined
          127 Invalid repeating group length
          128 This variable is not type "vector string"
          129 This variable is not type "vector RG"
          130 Error converting Harris character to VAX character string
          131 Error converting Harris integer to VAX integer
          132 Error converting Harris floating point to VAX floating pt.
          133 Invalid repeating group occurrence number
          134 Number of points is too small
          135 This is not Tuning Curve data
          137 Frequency increment is improper
          139 Character variable number out of range
          140 Improper Schema name for this operation
          146 Impossible error, consult programmer
          147 Error converting from integer array to character string
          148 Unable to obtain value of variable
          149 Unable to extract unit number from DSID
          151 Too few or too many points
          152 Number of points must be power of two
          153 Invalid time resolution
          155 Trial number is outside range specified by user
          159 Specified character string is of improper length
          160 Syntax error
          161 Variable value is out of range
          162 Too many windows
          163 Too few columns
          164 Invalid spike number
          165 Improper analysis for this program
          166 Value must be positive, non-zero
          167 Invalid message number
          168 Invalid Unit Event Timer channel number
          173 Indexing is improper
          174 Unable to form a new DSID
          175 Work buffer is too small, try again, or consult programmer
          201 Parameter 1 is invalid
          202 Parameter 2 is invalid
          203 Parameter 3 is invalid
          221 Too few entries in directory
          222 No entries were deleted
          223 The FROM number cannot exceed the TO number
          224 Invalid data set number
          225 INITDF or INITRF must be called first
          226 Entry already exists in directory
          228 Data File directory is full
          229 Bad Directory Header
          231 Unable to read Event Flag, consult programmer, or try again
          232 Unable to create VMS mailbox, consult programmer
          241 Bad data in file
          250 File Read error
          251 File Write error
          252 File Open error
             .Please use the DIR command to check for file existence
             .Also make sure you are authorized to access the file
          253 Invalid Logical Unit Number
          254 File name already includes directory spec
          264 Invalid pointer into buffer
          265 Too many real variables, Buffer is full
          266 Too many character variables, Buffer is full
          267 Variable already defined as a different data type
          272 Too many points in Tuning Curve, buffer overflow
          274 Improper number of values in line-table buffer
          275 Unable to get logical unit number
          280 Improper data storage format
          285 No space to create temp. array, out of memory space
          286 Invalid array size
          289 Array is undefined
          290 Array sizes are not the same
          291 Invalid array number
          292 This array already exists with a different size
          294 A user file is already assigned to this number
             .File open failed, try a different number
          301 Improper STATUS table type
             .This data may not be suitable for RAP analysis
          303 Invalid histogram type
          307 Improper number of RA variables
          308 Invalid number of plots along X-direction
          310 Improper number of repetitions
          311 Improper number of sequences
          312 Improper number of STATUS table pointers
          314 Invalid time base
          315 Invalid stimulus duration
          316 Invalid repetition interval
          317 Improper number of DSS's
          318 Invalid master DSS number
          319 No data recorded at this stimulus point
          320 Invalid value of sync. coefficient
          321 Invalid Rise/Fall envelope shape
          322 Invalid units for duration time
          323 Invalid units for repetition interval
          324 Invalid units for delay
          325 Invalid units for time base
          328 Invalid repetition number
          329 Only Type-2 STATUS table supported for this operation
          330 STATUS Tables for the two data sets must be the same TYPE
          331 Number of reps for the two data sets must be the same
          332 Stimulus duration for the two data sets must be the same
          333 Repetition interval for the two data sets must be the same
          334 Number of RA variables for the two data sets must be same
          335 Variable increments for the two data sets must be the same
          337 Invalid variable type for this operation
          338 Array element is out of bounds
          339 Only Type-1 STATUS table supported for this operation
          340 No data within specified time range
             .Please pick a different range
          355 Invalid number of histogram bins
          356 No binning frequency specified
          357 This is not one of the RA variables
          360 Variable number is out of range
          362 Spike time cannot be negative
          363 Invalid variable name
          375 Invalid binning frequency
          410 Destination file format is improper
          430 Keyword not found in database
          443 Invalid time format, consult programmer, or try again
  
(This page last modified on May 19, 2015)

 
Back to Top
Back to The Basement Computing Page
Back to The Basement

Please send questions, complaints or comments to rkochhar@wisc.edu