DaqLinux User Guide
This information is under continuous development and will be improved as time permits. I hope you can find the help you need in this page.
Support
Please send corrections, comments and additions to Don Carter at the following:
Email: carter@ohio.edu
Phone: 740.593.1984
Fax: 740.593.1436
Data Acquisition System
Command | Action | |
---|---|---|
1. | a | begin acquisition of ADC data |
2. | add | add two data arrays channel by channel |
3. | cleartime | sets the expired acquire time to zero, must be in stop |
4. | clear | initialize the values in a data array |
5. | command_files | files of DAQ commands |
6. | dcopy | copy data array to another name |
7. | define | define a data array |
8. | delete | remove the definition of a data array |
9. | disk | set the default disk number for data save and get |
10. | drename | rename a data array |
11. | gate | set gates for replay or acquisition of data |
12. | get | get a data file from disk |
13. | goni | executes goniometer program |
14. | help | online help |
15. | learn | associates a name to a DAQ instruction set |
16. | plot | plot a data array |
17. | prescale | [ Name | * ] [ value ] |
18. | q | show information about data arrays, memory, disk, and tag |
19. | read | reads array rump file |
20. | rem | adds remark to DAQ files |
21. | replay | standard replay of event mode data |
22. | rgate | set gates for replay or acquisition of data |
23. | rplot | old plot program for rump - now obsolete |
24. | runfor | specifies how many events the program will run for |
25. | runtime | sets the acquire time |
26. | s | stop acquisition of ADC data |
27. | save | save data arrays to disk |
28. | sub | subtract one data array from another channel by channel |
29. | t0 | time zero for interrupt.c |
30. | tag | set the default tag number for data save and get |
31. | vector | pass data array and experiment parameters to interrupt.c |
32. | verbose | displays debugging information |
33. | write | saves file in rump format |
Command | Action | |
---|---|---|
34. | interrupt | processes each interrupt from ADC systems |
35. | daquser | called by DAQ during plot and after each keystroke |
36. | evuser | called by DAQ when event mode buffers are full |
Command Files
- Variables
- Initialization Commands
- Reverse Polish Mathematical Expression Evaluator (&let)
- Integer and Logical Commands
- Floating Point Commands
- Output Commands
- Data Array Functions
- Conditional and Control Commands
- Miscellaneous
- Functions
- Interrupts
Input Router Setup
Data Set Up
Ohio University Channel Devices
1. a
Begins data acquisition (analyzing).
2. add
add <source> <dest> eg. add file1 file2
Adds data array <source> to data array <dest> channel by channel.
3. cleartime
cleartime
Sets the expired acquire time to zero. Must be in stop.
4. clear
clear <name> [<value>] eg. clear data1 10
Clears the array 'name' to zero unless the optional value is specified.
Note: clear * clears all data files.
5. command_files
Note: see section on command_files
6. dcopy
dcopy <source> <dest> [start <start channel>] [stop <stop channel>]
- dcopy file1 file2 start 200 stop 300
Copies data array source to array dest. Optional start and stop channels may be specified with keywords 'start' and 'stop' and must be followed by the appropriate channel numbers.
7. define
define <arrayname> <length> [type <type>] [clear <initial value>]
[prescale <prescale value>]
Creates a named array in memory.
arrayname: the name of the array, 1-16 characters length: the number of channels type: the array type
Defined types are:
0 = linear (default)
1 = 64 by 64 two parameter
5 = rump
6 = linear histogram cleared and saved at evsave
7 = linear histogram saved at evsave
9 = event mode auto_clear but no auto_saved. An automatic STOP, call to evuser.c, clear all array type 9, then automatic ANALYZE is issued.
10 = event mode auto_clear and auto_saved
999=event mode auto_clear and auto_saved
Array types and prescale may be re-defined if the length of the array is the same as originally defined
Types 10 - 255 are auto_saved as .\data\evt(disk)\arrayname.(type) where (disk) is the current disk number and (type) is the current type number. After the save, the type number is incremented. Before each auto_save an automatic STOP is issued then the optional user function evuser.c is called to process the event_mode data. All defined arrays of type 10 or above are saved and cleared then an automatic ANALYZE is re-issued.
Clear may be specified to preset all channels of the array to initial value.
- define psd 4096 type 1 clear 10
8. delete
delete <name> eg. delete data1
Deletes the definition of array 'name' and returns the memory to the memory pool.
9. disk
Disk with no number parameter displays the current system default disk number. If number is specified, the system default disk is set to number. The disk number is used by the get and save commands.
10. drename
drename <original name> <new name> eg. drename file1 file2
Renames data array <original name> to data array <new name>.
11. gate
gate [number] [lower] [upper]
where:
- [number] is the gate number (0-150). If number is not specified all defined gates are specified. If [number] is specified but no other parameters are specified the current values for gate [number] are displayed.
- lower] is the lower channel number for gate [number].
- upper] is the upper channel number for gate [number].
The use of the gates is dependent in the interrupt.c, evuser.c, daquser.c, and replay.c functions. The standard DAQ function replay.c checks the gates and histograms [dest vector] at channel [sourc vector] if replaying [gate vector] and data [gate vector] is between [lower] and [upper] (normalized to the histogram array specified in the replay command).
See help on replay for more information.
12. get
get <name> [disk ####] [tag ####] [incr ####] [replace] [evfname.typ]
Gets a data array from disk. The file is retrieved using the path:
./data/dsk####/tag####.dat
or if the event file evfname.typ is specified:
./data/evt####/evfname.type (where #### is DISK number)
That is, the current directory's DATA.DIR directory will contain one or more dsk####.dsk or evt#### directories, each containing data files named tag####.dat or event files. The disk and tag numbers are taken from the global values set by the 'disk' and 'tag' commands. The default disk and tag numbers may be overridden by using the 'disk####' and 'tag####' options.
It is important to remember the TAG NUMBER IS INCREMENTED BY ONE AFTER THE DATA IS RETRIEVED, unless the disk, tag number, evfname.typ option or 'incr ####' is used. If the disk or tag number is specified, the global tag number is NOT changed UNLESS 'incr ####' is also used. If the 'incr ####' option is used, the tag number will be incremented by #### after the data is retrieved in all circumstances.
The option replace will replace an existing file in memory with the new data if the size of the existing file is the same an the file being requested.
13. goni
goni
Executes goniometer program.
14. help
help
Provides online help.
integrate
integrate array start stop
integrate channels start to stop of array and return the sum in &return1
15. learn
learn (commands terminated by #)
Learn assigns commands entered to a single character string assignment. The command string is terminated with a # character.
Examples:
learn "clr"
clear data1 123
clear data2 456#
learn "ddir"
ls -l ./data"#
learn "sav"
save data1
save data2#
loadint
loadint NAME_OF_INTERRUPT_SERVICE_ROUTINE
Command to select the desired interrupt service routine to use for this experiment. The names of the available interrupt service routines compiled into this version of DAQ can be displayed by typing loadint with no parameter.
example:
loadint npcoinc2
overlay
overlay histogram | vector
Overlay the currently active plot with another histogram of the same length.
The original plot is in black and the overlay plot is in color. Only one additional histogram can be overlaid. If a subsequent overlay command is issued, only the new overlay spectrum will be overlaid. Plot data (sum, cursor counts etc.) are for the original spectrum that was plotted.
16. plot (Windows version)
plot <name> [start <start channel>] [stop <stop channel>]
[overlay | over | ov <name2>]
Displays array 'name'.
If keyword 'start' is found, it must be followed by the start channel.
If keyword 'stop' is found, it must be followed by the stop channel.
If keyword 'overlay' or 'over' or 'ov' is found, it must be followed by array 'name2'.
Overlay, over or ov plots a specturm on top of another spectrum in a different color.
While plotting a spectrum, a help menu is displayed when the '?' key is depressed.
Help Menu ( '?' )
- F5 displays a single parameter
- F6 displays 2 parameters ( 3-dimension projection )
- F7 displays 2 parameters ( color contor )
- left, right, up & down arrow keys move cursor
- control + arrow key moves cursor slowly
- z zoom
- control + z zooms slowly
- shift + z unzoom
- , pan left
- < slow pan left
- . pan right
- > slow pan right
- End autoscale
- Page Up sets start channel to cursur channel
- Page Down sets stop channel to cursor channel
- a begin accepting data
- s stop accepting data
- 1, 2, 3, 4 displays the first, second, third or fourth quarter of display (For Example: If you divide the screen into four equal sections and the part you wish to examine is in the third quarter press '3'.)
- Home displays the entire spectrum
- + multiplies the Y scale by 2
- - divides the Y scale by 2
- l linear display
- shift + l log display ( 100.0 log10 (counts) )
- c clear DISPLAYED spectrum to 0
- d set color dot size for color contour plot
- g displays no grid
- shift + g displays grid
- p changes 3D perspective
- m dispalys mean and standard deviation (with fit option)
- t change preset acquire time (0 = infinite)
- alt + c enter calibration data
- alt + f linear fit
- shift + r begins new fit
- Enter continue
- ~ simulate runfor complete (set oual_terminate = 1)
- control + x, alt + x, or esc exits plot
- control + F1, F2, F3, F4, F9, F10 saves plot in F1, F2, F3, F4, F9, F10
- F1, F2, F3, F4, F9, F10 restores saved region
Using a Mouse in the Help Menu
* move the mouse to display the cursor
* move the cursor near the double lines at the top of the screen to display the menu
* the menu contains the following commands:
- Exit, Fit, Zoom, Pan, Cursor, Cnts, Auto, Grid, Home
* For the following: L -denotes left mouse button, and R -denotes right mouse button.
* To use the below, place cursor on the command and click L or R button.
- Exit L - exit
- Fit L - refresh screen
- Zoom L - expands screen, R - contracts screen
- Pan L - pans left, R - pans right
- Cursor L - turns off cursor
- Cnts L - full scale reduced, R - full scale increased
- Auto L - autoscale
- Grid L - toggles between grid on and off
- Home L - home, R - help
16. plot (linux version)
plot <name | vector>
[start <start channel>]
[stop <stop channel>]
[overlay | over <name2>]
[loops <# plot refreshes then exit>]
[geometry <X-window geometry>]
[ex1 | ex2 | ex3 | ex4 <program name (no extension) to execute when pressed>]
Displays array 'name' in an new window created for the plot.
If keyword 'start' is found, it must be followed by the start channel.
If keyword 'stop' is found, it must be followed by the stop channel.
If keyword 'overlay' or 'over' is found, it must be followed by array 'name2'.
overlay or over plots a specturm on top of another spectrum in a different color.
If keyword 'loops' is found, it must be followed by the number of refresh loops to plot before exiting.
If keyword 'geometry' is found, it must be followed by the X windows window geometry specification.
If keyword 'ex[1-4]' is found, it must be followed by the command to execute if the button is pushed.
example: plot tof ex1 clr
would define the button ex1 to execute clr when pushed.
The plot window displays in real-time the histogram for array 'name'. The system will only display a single spectrum real-time. If another plot command is executed any previous plot windows will become 'STATIC' meaning that the data will not be updated in real-time. Only the last plotted spectrum will be real-time.
The plot window contains the following information and functionality...
The window title (upper left) is displayed as the computer name:spectrum name.
Line 2 contains a row of buttons followed again by the machine name: spectrum name.
- 'Quit' will remove the plot.
- 'Ex1' will execute command 'Ex1' when pressed (or whatever Ex1 was set to by parameter ex1).
- 'Ex2' will execute command 'Ex2' when pressed (or whatever Ex2 was set to by parameter ex2).
- 'Ex3' will execute command 'Ex3' when pressed (or whatever Ex3 was set to by parameter ex3).
- 'Ex4' will execute command 'Ex4' when pressed (or whatever Ex4 was set to by parameter ex4).
- The default function of Ex1, Ex2, Ex3 and Ex4 is to zoom the display to the 1,2,3,4th quarter of the screen.
- 'Home' will display the entire spectrum autoscaled.
- 'Auto/L' will toggle between Linear Autoscale and Log y-axis scales.
- 'Ydn' will fix the Y scale down by a factor of 2.
- 'Yup' will fix the Y scale up by a factor of 2.
- 'Zoom' will increase the start channel and decrease the stop channel by about 10%.
- 'UnZoom' will decrease the start channel and increase the stop channel by about 10%.
- 'PanL' will decrease the start channel and decrease the stop channel by about 10%.
- 'PanR' will increase the start channel and increase the stop channel by about 10%.
- 'Ref' will toggle between 2 views of a 2 parameter 3-dimensional plot, contour or projection.
The next line on the plot displays: MaxCounts = Maximum Y-axis value, Count Rate in counts per second of the displayed channels, the Sum of the displayed Y channels and the last number is the total number of channels displayed on the X-Axis.
The bottom line of the plot displays the X-axis start channel, The Y-value of the channel under the cursor that is moved by the mouse, followed by the X-axis stop channel.
To zoom a region...
- to set the start channel to the current mouse position, push the left mouse button
- to set the stop channel to the current mouse position, push the right mouse button
- or depress left mouse button starting at left of desired region and with the mouse button
- depressed drag the line to the right of the desired region, then release the left button
- to zoom into the desired region.
17. prescale
prescale [ Name | * ] [value]
prescale = 0 : Do not do auto prescale.
prescale > 1 : If a data point in the array reaches full scale, all data in array is divided by 2 and the prescale is doubled.
18. q
q
Displays the currently defined arrays, lengths and types.
rcmd
Alters the spectral headings of [rump].rbs files.
rcmd [defined filename] [commands and values]
commands: values(units):
- [filename] "text" set filename
- [date] "text" date string
- [ltct] "text" live time, clock time information
- b"text" identifier string
- [e0] value incident energy in MeV
- [beam] value follow format of 4He++
- [q] value total accumulated charge (uC)
- [current] value average beam current (nA)
- [conv] value value keV / channel and offset
- [first] value channel number of first data point
- [fwhm] value detector resolution (keV)
- [geom] value geometry identifier
valid values: General = -1 | Cornell = 0 | IMB = 1 - [phi] value detector angle (degrees)
- [theta] value target angle (degrees)
- [psi] value geometry dependent angle (degrees)
- [omega] value detector solid angle (mSr)
- [corr] value random correction factor
- [npt] value number of data points
- [show] displays current information of [filename]
Example: rbs mev 3.04 charge 10 conv 8.04 34.5
READ init.daq to examine system setup.
<RET> for command prompt.
19. read
read
Gets and reads a rump file from disk.
20. rem
rem comment
Usually used to enter comments into *.daq command files.
Example:
rem this is a setup file
rem used to setup daq for
rem the experiment
21. replay
replay <event vector> <histogram vector>
Replays the events from <event vector> and histogram the vector <histogram vector>. Both <event vector> and <histogram vector> may be specified by the vector number or the associated array name specified in the vector.
The vector <histogram vector> is histogrammed for each event in <event vector>. The channel number that is histogrammed is then checked against the lower and upper channel numbers for each gate that has a gate vector equal to <event vector>. If this gate is satisfied, the corresponding event is read from source vector and the array dest vector is histogrammed. The vectors gate vector, source vector, and dest vector as well as the lower and upper channel numbers corresponding to the gate are defined by the gate command.
See help on gate for more information. Also see help on command vector.
22. rgate
See gate.
rgate [number] [lower] [upper] [gate vector] [sourc vector] [dest vector]
where:
- [number] is the gate number (0-150). If number is not specified all defined gates are specified. If [number] is specified but no other parameters are specified the current values for gate [number] are displayed.
- [lower] is the lower channel number for gate [number].
- [upper] is the upper channel number for gate [number].
- [gate vector] is the event mode vector on which this gate is set, this may be the array name or the vector number.
- [sourc vector] is the event mode array used as input data if this event satisfies the gate, this may be the array name or the vector number.
- [dest vector] is the data array to histogram if the gate is satisfied, this may be the array name or the vector number.
The use of the gates is dependent in the interrupt.c, evuser.c, daquser.c, and replay.c
functions. The standard DAQ function replay.c checks the gates and histograms
[dest vector] at channel [sourc vector] if replaying [gate vector] and data [gate vector]
is between [lower] and [upper] (normalized to the histogram array specified in the
replay command).
See help on replay for more information.
23. rplot
rplot
Old plot program that was used in the rump only version of DAQ.
Now Obsolete.
24. runfor
runfor [count]
Runs for [count] events. Initailizes oual_runfor to be used by interrup.c.
$done.daq will be executed when oual_terminate is set to one by interrup.c.
25. runtime
runtime
Sets the acquire time.\
Enter the acquire time with the command runtime, or after the command runtime is entered you will be asked to enter the acquire time. Either method is valid.
26. s
s
Stops data acquisition.
27. save
save <name> [disk ####] [tag ####] [incr ####] [stop ####] [rump]
Writes a data array to disk. The file created is placed using the path: ./data/dsk####/tag####.dat
That is, the current directory's data directory will contain one or more dsk#### directories, each containing data files named tag####.dat. The disk and tag numbers are taken from the global values set by the 'disk' and 'tag' commands.
The default disk and tag numbers may be overridden by using the 'disk ####' and 'tag ####' options.
It is important to remember the TAG NUMBER IS INCREMENTED BY ONE AFTER THE DATA IS SAVED, unless the disk or tag number option or 'incr ####' option is used. If the disk or tag number is specified, the global tag number is NOT changed UNLESS 'incr####'is also used. If the 'incr ####' option is used, the tag number will be incremented by #### after the data is saved in all circumstances. <name> is the name of the data array to be saved. If the name is * all event mode arrays (type 10 or above) are saved.
[rump] saves data in rump format.
If the file already exists, an extension is automatically appended to the file name to prevent overwriting previous data files of the same name. A warning message is also generated on the terminal window.
28. sub
sub <source> <dest> eg. sub file1 file2
Subtracts data array <source> from data array <dest> channel by channel.
29. t0
t0 [number]
t0 with no number parameter displays the current system t0 number. If number is specified, the system t0 is set to number. The t0 number may be used by the interrup.c. function.
30. tag
tag [number]
Tag with no number parameter displays the current system default tag number. If number is specified, the system default tag is set to number. The tag number is used and modified by the get and save commands.
31. vector
vector <number> <name> [conversion gain] [uld] [lld] [offset]
- vector 10 data1 4096 2999 2000 2000
If no parameters are specified, a list of defined vectors is displayed. Associates interrupt routine vector number <number> with previously defined array <name>. The following parameters are optional and position dependent:
- [conversion gain] The conversion gain to be associated with this data. Possible values are 4096(default), 2048, 1024, 512, 256, 128, 64.
- [uld] The digital upper level discriminator to be associated with this vector. The default is the last channel of the array.
- [lld] The digital lower level discriminator to be associated with this vector. The default is 0.
- [offset] The digital offset to be associated with this vector. This allows offsetting the starting data channel to channel 0 of the array. The default is 0.
32. verbose
verbose [0,1]
0 = Quiet
1 = Verbose
33. write
write
Saves file in rump format.
If type 5, Ft = .rbs else .cdf.
User Supplied Functions:
34. interrupt
interrupt.c
The user supplied function that is called by DAQ for every interrupt that is received from the ADC's. You should begin by modifying an existing interrupt.c routine to suite your needs.
You should write/keep your own interrupt functions in your own directory under some other name ( eg. int001.dec ). When you wish to generate a version of DAQ that employes your version of the interrupt routine you should copy your interrupt to d:\daq\interrupt.c along with your versions of evuser.c and daquser.c. When you have done this, you can go to directory d:/daq and execute the command tc daq.prj. You should then issue a <alt>c m (make exe. file).
This will build your version (daq.exe) that you should copy and rename to your own directory. Remember that the files interrupt.c, daquser.c, evuser.c and daq.exe are names used by others in the d:\daq directory. The main DAQ routines will be kept current in this directory for all users of DAQ.
35. daquser
daquser.c
A user supplied function that DAQ will call after each plot refresh or after each keystroke
is entered. This function can be useful if the user wishes to periodically check the progress
of the experiment or possibly do background analysis of incoming data.
36. evuser
evuser.c
A user supplied function that DAQ will call after the event mode buffers fill. When this
happens, the DAQ system will issue a STOP to stop more data from coming in from the
ADC's and then call evuser.c so it can process the data if desired. After the call to evuser.c
all arrays of type 10 or above are saved to disk as .\data\evt(disk)\name.(type), the type
numbers are incremented, the arrays of type 9 or greater are cleared, and ANALYZE is
issued to begin acquiring data. Also see help on define.
If you have no need for this function, you need to supply a default routine evuser.c that does
nothing but return. See help on interrupt.c for information on building DAQ with user supplied
functions and interrupt routines.
Command Files
Command files can be created by editing a file <filename>.daq and placing commands in the file. Command files may contain DAQ main commands, names of other command files, or DOS commands.
DAQ searches for commands as follows:
- known internal commands (define, clear, get, etc.)
- <command>.daq command files in the current directory
- DOS commands
e.g. file SETUP.DAQ could contain:
- define data1 1024
- define data2 1024
- vector 1 data1
- vector 2 data2
- clr
- dir
file clr.daq could contain:
- clear data1
- clear data2
The result when 'setup' was typed would be:
- data1 defined as 1024 channels.
- data2 defined as 1024 channels.
- array data1 assigned to vector 1.
- array data2 assigned to vector 2.
- The command file clr.daq is executed, clearing data1 and data2.
- The DOS dir command is executed.
Note: Only main commands can be executed during data acquisition.
A. Variables
Each recursion level has 20 variables defined as &0 to &19. If you call a subroutine or function, its variables are different from the calling function variables. The command line level may call a function that calls 3 additional levels of functions. If you prefer to use names for variables you can use "learn" to assign a character string to a &n variable.
For example: learn "sum" &1# will equivalence the name sum to &1.
You should delete any learned variables before exiting the function, eg. (delete"sum"). Since each recursion level has a different set of variables, each assigned the names &0 - &19, a method of directly referencing a specific variable at a specific recursion level is employed. Recursion level 0 (command line level) variables &0 - &19 may be explicitly referenced as variables &100 - &119.
Level 1 (first level of function or subroutine) variables are referenced as variables &200 -&219. Similarly for all levels up to &500 - &519 at the uppermost level.
Three types of variables are supported:
- String variables may contain up to 15 characters.
- Integer variables may contain 15 digits.
- Floating point numbers must be represented in 15 characters.
The type of the variable is set when the variable is initialized. Initialization is
done using the &move or &[I] [f] [ ] read commands.
For example:
- &move 1 &0 would define &0 as an integer = 1
- &move 1.0 &0 would define &0 as a floating value 1.0
- &move abcdef &0 would define &0 to the string 'abcdef'
There are three different &read commands (read from the keyboard):
- &read will read a string
- &iread will read an integer
- &fread will read a floating value
The precision of the floating point variables is set with &precision n where n is the number of places after the decimal point to keep.
The command &? will display a list of all variables and their current values.
a. Definitions
- &n denotes one of the user variables
- &&n this notation may be used to reference a variable by a variable
For Example:
&move 100 &3
&move 200 &4
&move 3 &1
&type &&1 (this will type the contents of &3 (100))
&add 1 &1
&type &&1 (this will type the contents of &4 (200))
token denotes a user variable, system variable or constant expression
For example:
"&move token &n" indicates that the command &move can move any option of token to a system user variable such as &move &0 &1, &move no &0, &move &tag &0
b. User Variables
level 0 => &0 - &19 (&100 - &119)
level 1 => &0 - &19 (&200 - &219)
level 2 => &0 - &19 (&300 - &319)
level 3 => &0 - &19 (&400 - &419)
level 4 => &0 - &19 (&500 - &519)
c. Named Variables
The command interpreter operates most efficiently when variables are specified using the &nn format when nn denotes an integer and the variable may be directly referenced using nn as an index to the variable array. This eliminates the search required to match a variable name with a variable location. Any programs that must be coded as speed efficient as possible should be the &nn variable type.
If a maximal speed is not necessary and readability is more important, variables may be assigned names that are used as pointers to the real variables &nn. DAQ then searches the variable name table for a match with the user variable &user_defined variable then uses the index as the variable &index. The command to define variable names is &var or &vars. The format for &var(s) is:
&vars [nn] [string1] [nn] [string2] . . .
Where: The first [nn] may optionally be used to specify the variable nn index point (defaults to 0) and assigns string1 to variable &nn. Optionally more [nn] index points and [strings] may define more strings to [nn] (default = sequential) to &nn variables. This is most easily described by examples of the various forms. The programmer must be aware that the &var command is assigning equivalence
strings to the system variables &0 - &19, not defining variables.
Here are some valid forms:
&vars alpha beta charlie
&alpha = &0, &beta = &1, &charlie = &2
&var 10 counter
&counter = &10
&var alpha beta 10 counter start 19 dummy
&alpha = &0, &beta = &1, &counter = &10, &start = &11, &dummy = &19
Note that these variable definitions are dynamic and are known by name only to the command file executing on this recursion level. This means that re-entrant programs may be written (a function may call itself) if local variable definitions &0 - &19 are used (or their equivalence named variables). These variables may still be directly referenced using the &1nn where 1 denotes the recursion level. Global or common variables (variables know by all routines) should be defined with the &global
command. Global variables will be defined starting at &119 and count down by default instead of up as in the &var command. The local (&var) table is searched before the global table is searched so if a locally defined variable has the same name as a globally defined variable the local name dominates.
Below are some examples
&global first second third
&first = &119, &second = &118, &third = &117
&global first second third 10 v10 v9 5 five
&first = &119, &second = &118, &third = &117,
&v10 = &110, &v9 = 109, &five = &105
- &stack Display the current stack values
- &? Displays contents of variables
- &$ Displays current names associated with variables
d. System Variables
- &anal = 1 if in analyze mode
- &disk = current DISK value
- &inplot = 1 if currently plotting a spectrum, else 0
- &level = current recursion level
- &nextlevel = (current recursion level + 2) * 100
- &nstack = number of stack elements on stack
- &sofint = current hex (6 bit) value of interrupt inputs
- &t0 = current value of T0
- &tag = current TAG value
- &date = system date and time string
- &hostname = system hostname
- &fullname = system hostname including domain
B. Initialization Commands
- &move token &n initialize the variable &n with token and set variable type dependent on token (12 = integer, 12.0 = float, abc = string)
- &read &n read a string from keyboard into &n
- &iread &n read a integer from keyboard into &n
- &fread &n read a floating point value from keyboard into &n
C. Reverse Polish Mathmatical Expression Evaluator (&let)
&let &n [=] token [token | oper] . . .
&let evaluates mathematical expressions similar to an RPN (Reverse Polish Notation) calculator. The process begins from left to right with the first token and places it on the 10 element stack. For all succeeding [token | oper]'s; if not a known operation, the token is placed on the stack (last in, first out) else if it is a known operation, the operation is performed on the lower element(s) of the stack (bottom element for unary operations, bottom 2 elements for binary operations). The stack is then collapsed with the result of the operation left at the bottom of the stack. The type of operation (integer or floating point) is determined by the type currently at the bottom of the stack for +, -, *, /, and sqrt. Otherwise the type is float.
Note: Tokens may not be the result of functions: i.e. & .LLD &name, etc...
A list of known operations:
- + add I, F
- - subtract I, F
- * multiply I, F
- / divide I, F
- sqrt square root I, F
- ** power F
- sin sine F
- cos cosine F
- tan tangent F
- log log base e F
- log10 log base 10 F
- exp e ** n F
- pow10 10 ** n F
- float set type = floatF
- int set type = int I
- pop pop stack element into variable
For Example:
to perform the algebraic x = sqrt ( ( a + 10 ) * ( b * c ) )
&let &x = &a 10 + &b &c * * sqrt
to convert variable x to type float
&let &x = &x float
to assign y the value of x
&let &y = &x
to perform the algebraic avg = ( a + b + c + d + e )/ 5
- &let &avg = &a &b + &c + &d + &e + 5 / or
- &let &avg = &a &b &c &d &e + + + + 5 / or
- &let &avg = &a &b + &c &d + &e + + 5 /
Note: Solution 1 might be considered better because the stack only needs to be two elements high max. Solution 2 requires the stack to be five elements high. The stack is ten elements high.
D. Integer and Logical Commands
- &add token &n integer add token to &n
- &sub token &n integer subtract token from &n
- &mul token &n integer multiply &n by token
- &div token &n integer divide &n by token
- &and token &n logical and &n with token
- &xor token &n logical exclusive or &n with token
- &or token &n logical or &n with token
- &mod token &n &n = &n mod token (remainder)
- &add$ token &n concatenate (add string) token to &n
- $addi$ token &n concatenate (add character) the ascii character of value token to &n
E. Floating Point Commands
- &add token &n floating add token to &n
- &sub token &n floating subtract token from &n
- &mul token &n floating multiply &n by token
- &div token &n floating divide &n by token
- &precision n set number of decimal digits to n (valid range 1 - 9)
Format Conversion Commands
- &int &n convert &n to type integer
- &float &n convert &n to type float
- &string &n convert &n to type string
F. Output Commands (some DOS only)
- &type token token token types tokens on display.
Example: &type "The sum is" &1 - &cat token token concatenates tokens (type with no spaces or returns)
Example: &cat "DSK" &1 - &log token token token ... print tokens into the daq.log file as a note
- &nl prints a carriage return
- &clrscr clears screen
- &gotoxy tokenx tokeny moves text curser to x,y (1,1 = top left)
- &opentop creates window in top half of screen
- &openbottom creates window in bottom half of screen
- &typew same as &type except types in opened window
- &catw same as &cat except types in open window
Colors for following commands:
0 = Black
1 = Blue
2 = Green
3 = Cyan
4 = Red
5 = Magenta
6 = Brown
7 = LtGray
8 = DkGray
9 = LtBlue
10 = LtGreen
11 = LtCyan
12 = LtRed
13 = LtMagnta
14 = Yellow
15 = White
16 = Blank
- &textattr token sets text attributes (Bbbbffff)
- &textcolor token sets text color
- &textbackground token sets background color
- &textmode token 1 = C40, 3 = C80, 64 = EGA43
G. Data Array Functions
- &peek array_name token function value is token channel of array array_name
Example: "&move &peek data 10 &1" will move the contents of array data channel 10 to &1 - &poke array_name token1 token2 write into array_name channel token1 the value of token2; Example: "&poke data 10 100" will write 100 at channel 10 of array data
- &peek$ peek value of element of string
eg. &move abcd &0, &move &peek$ &0 1 &1, &type &1, => 98, decimal value for 'b' - &_length token function value is length of array token
- &_type token function value is type of array token
- &_uld token function value is uld of array token
- &_lld token function value is lld of array token
- &_offset token function value is digital offset of array token
- &_shift token function value is shift count for conversion gain
- &_prescale token function value is prescale for array token
- &_ndat token function value is num data pts in fit for array
- &_cg token function value is conversion gain for array token
Example: &move &_prescale data &1 will set &1 to the prescale value for array data
H. Conditional and Control Commands
&goto [int] label [lable2] transfer control to the line that is label (Labels must begin with a ; and be the only entry on the line. They must also not be an integer, i.e. a label cannot be ;2.)
Example:
&goto loop
:
;loop
A computed goto is also available by specifying an integer variable after the &goto command. In this form the [int] label will be the destination label. [int] = 1 for the first label, [int] = 2 for the second label etc. [int] = 0 will attempt to go to label ;0.
For Example:
&goto &1 first secnd third
will goto first if &1 = 1
will goto secnd if &1 = 2
will goto third if &1 = 3
will print error if &1 > 3 (number of labels)and continue with statement following the computed goto
&if token1 oper token2 {
statement1
statement2
. . .
}
or . . .
If token1 oper token2 statement(s) valid oper are:
- .gt. ">" token1 greater than token2
- .lt. "<" token1 less than token2
- .gteq. ">=" token1 greater than or equal to token2
- .lteq. "<=" token1 less than or equal to token2
- .eqgt. "=>" token1 greater than or equal to token2
- .eqlt. "=<" token1 less than or equal to token2
- .neq. "!=" token1 not equal to token2
- .neq$. "!==" (string) token1 not equal to (string) token2
- .ne. "!=" token1 not equal to token2
- .ne$. "!==" (string) token1 not equal to (string) token2
- .eq. "=" token1 equal to token2
- .eq$. "==" (srting) token1 equal to (string) token2
- &ifgtzero &n statement(s) execute statements if &n greater than zero (multiple statements are allowed on a line, but if one of the statements is &type or &cat it must be the last statement on the line)
- &ifgteqzero &n stmt(s) greater than or equal to zero
- &ifltzero &n statement(s) less than zero
- &iflteqzero &n statement(s) less than or equal to zero
- &ifzero &n statement(s) zero
- &ifnotzero &n statement(s) not zero
- &ifdef token statement(s) if array token is defined
- &ifndef token statement(s) if token array is not defined
- &ifeq token1 token2 stmt(s) if (string) token1 equals (string) token2
- &ifneq token1 token2 stmt(s) if (string) token1 does not equal (string) token2
- &ifgt token1 token2 stmt(s) if token1 is greater than token2
- &iflt token1 token2 stmt(s) if token1 is less than token2
- &ifgteq token1 token2 stmt(s) if token1 is greater than or equal to token2
- &iflteq token1 token2 stmt(s) if token1 is less than or equal to token2
Example: &ifneq &1 100 &add 1 &1 &goto -lpoop - &wtkbd wait for keypress at keyboard
- &ifnkbd statement(s) executes statement(s) if no keys pressed
- &ifkbd statement(s) executes statement(s) if keys pressed
- &ret [param] [param] . . . return from function or exit (parameters are returned LIFO on stack and are obtained by using &let &n = pop)
- &ret[stackop] [stackop] . . . (may optionally return paremeters LIFO on stack)
I. Miscellaneous
- &sleep token wait for token seconds then return
- &delay token wait for token milliseconds then return
- &usleep token wait for token microsends then return
- &clrstack set number of parameters on stack equal to zero
- &mask prevents software interrupts from being processed
- &unmask allows software interrupts to be processed ($intn.daq)
- &return1 variable that some commands return a result
eg: integrate e 10 20 will return &return1 = sum of e channels 10-20 - &in addr fun reads channel device e.g. &move &in 1 2 &0
- &out addr fun &n output &n to channel device addr function fun
- &inport port reads io port eg. &move &inport 796 &0
- &outport port &n output &n to io port eg.&outport 796 0
Comments can use the command "rem" or begin with a ;
J. Functions
When calling a function parameters can be passed. These parameters are passed to the function starting with variable &1...&n with &0 containing the number of parameters passed. For example, if a function was written to integrate an array from starting channel to stopping channel and was called as "integrate array 100 200" when the function integrate was invoked &0 would = 3, &1 = array, &2 = 100, and &3 = 200.
Functions must be edited as filename.daq
K. Interrupts
Interrupts are provided to respond to real time control events. At present two different types are provided. The OU channel controller has 6 BNC connectors that are labeled $int0 - $int1. These connections will initiate DAQ execution of the corresponding files named $int0.daq - $int5.daq when the following conditions are met.
- The interrupts must be "unmasked" using the &unmask command.
- The input must be pulled to ground.
Another interrupt can be initiated using the "runfor" command. This command can be used to count a certain number of events in the DAQ adc interrupt response program and initiate execution of the file $done.daq when this count equals a specified number. The runfor command sets the global variable oual_counter. When oual_counter reaches a predetermined value the interrupt.c program sets global variable oual_terminate = 1 and this will initiatw the $done.daq program if the interrupts are not masked (&mask and &unmask commands respectively).
Upon receipt of an interrupt ($intn.daq of $done.daq) DAQ will issue a stop "s" command and a "&mask" command to prevent further data from being processed and also to prevent more interrupts. The interrupt service routines ($intn.daq or $done.daq) must issue an "a" command to begin data acquisition again (if desired) and also an "&unmask" command before exiting to allow further interrupts.
Example command language program fun3.daq
&global flag pos_decay neg_decay search
&vars index start stop fun fun1 10 dx y x z1 z2 starty startx resp
&precision 7
&if &flag .eq$. Undefined {
&let &pos_decay = 6.28
&let &neg_decay = 6.28
&move defined &flag
}
&if &index .gt. 0 {
&let &search = &index
;scan
&if &&search .eq$. decay {
&type enter positive decay...
&fread &pos_decay
&type enter negative decay...
&fread &neg_decay
&if &index .eq. 5 {
&type assuming &start &stop &fun
&goto have_decays
}
&goto get_start
}
&sub 1 &search
&if &search .gt. 0 &goto scan
}
;
&if &index .neq. 4 {
&add 1 &index
&goto &index get_start get_stop get_fun get_fun1
;get_start
&type enter start value ...
&fread &start
;get_stop
&type enter stop value ...
&fread &stop
;get_fun
&type enter function...
&read &fun
;get_fun1
&type enter function...
&read &fun1
}
;have_decays
&let &start = &start float
&let &stop = &stop float
&let &index = &index int
&if &stop .lteq. &start {
&type Error:(fun) start must be less than stop
&goto get_start
}
;
&let &dx = &stop &start - 63.0 /
&ifndef &fun define &fun 4096 type 1
;
&type Computing...
&let &x = 0
&let &y = 0
&let &startx = &start
&let &starty = &start
;loopy
&if &starty .gteq. 0.0 {
&let &z1 = &starty &fun1 1.02 + 100.0 * 0.0 &starty - &stop / &pos_decay * exp *
}
&if &starty .lt. 0.0 {
&let &z1 = &starty &fun1 1.02 + 100.0 * &starty &stop / &neg_decay * exp *
}
;loopx
&ifkbd {
;* plot &fun
&type ENTER (again, exit or c/r=continue)
&read &resp
&if &resp .eq$. "exit" &ret
&if &resp .eq$. "again" &goto get_start
}
&if &startx .gteq. 0.0 {
&let &z2 = &startx &fun 1.02 + 100.0 * 0.0 &startx - &stop / &pos_decay * exp *
}
&if &startx .lt. 0.0 {
&let &z2 = &startx &fun 1.02 + 100.0 * &startx &stop / &neg_decay * exp *
}
&let &index = 64 &y * &x +
&let &z2 = &z1 &z2 *
&if &z2 .gt. 32760.0 &let &z2 = 32760.0
&let &z2 = &z2 int
&poke &fun &index &z2
&let &startx = &startx &dx +
&add 1 &x &move 0 &x
&let &startx = &start
&let &starty = &starty &dx +
&cat .
&if &y .lt. 64 &goto loopy
;plot &fun
&ret
Input Router Setup
1. Inputs 1 - 12
These inputs trigger internal 6 ns monostables. Each input is AC coupled width and terminated in 50 Ohms. Each input will trigger on > 4 Volts and 50ns width or > 2 Volts if the input is > 100 ns wide. A 552 B slow output is fine.
2. OR Output
Each monostable output is "OR"ed and inverted to produce an output to view during setup to see how long the monostables are triggered.
3. Strobe Output
The strobe output is the pulse that shifts the contents of the router monostables into the FIFO with ADC data.
4. General Setup
Trigger the router with the positive edge of a logic signal that happens when this detector is fired. The general setup requires that the first ADC read out will also read the contents of the route FIFO. Make sure that the route monostable is true in all cases when the strobe output occurs. The strobe output of the router will occur ~ 1ns after the strobe to the ADC unless the ADC is busy with another detector.
Data Format
Histogram Files
./data/dsknnnn/tagnnnn.dat
All are I8 format.
Record #
1 Disk Tag Start Stop Date Time
2 CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7 CH8 CH9
3 CH10 CH11 CH12 CH13 . . .
Event Files
./data/evtnnnn/fn.nnn
Record #
1 Disk Tag Start Stop Date Time
2 #events event1 event2 . . . event9
3 event10 event11 . . .
* Each event word is a sum of (4096*ADC#) + the 12 bit digitized value.
The digitized value can be extracted as: value = event & 0xfff;
The ADC# can be extracted as: adc = (event & 0x7000) >> 12;
** Date and Time are integer coded as
Date = (10000 * years past 1900) + (100 * month) + (day of month)
Time = (10000 * hour) + (100 * minute) + (seconds
Ohio University Channel Devices
Use $in and $out to communicate to channel.
Channel Address 1
Analog Input Module
16 Independent Single Ended Analog Inputs
ICEOS I/O Format
&IN 1 Input
Where 1 = Device Address
Input = Input Number (0-15)
The inputs are unipolar 0 - 10V single ended. The digitized value is 12 bits (0-4095).
Channel Address 2
Digital Output Module
4 OPTO-Isolated Digital Outputs
ICEOS I/O Format
&OUT 2 1 Token
Where 2 = Device Address
1 = Function Must Be 1
Token = Value to Output
The value to output may range from 0 - 15. The 4 outputs represent the 4 binary bits in the range 0 - 15. For example, to turn on outputs 2 and 8 simultaneously, the command &OUT 2 1 10 could be used.
1 = BCI Reset
2 = Swinger ON/OFF
4 = Swinger Direction
8 = Sample Changer
Channel Address 3
Digital Output Module
4 OPTO-Isolated Digital Outputs
ICEOS I/O Format
&OUT 3 1 Token
Where 3 = Device Address
1 = Function Must be 1
Token = Value to Output
The value to output may range from 0 - 15. The 4 outputs represent the 4 binary bits in the range 0 - 15. For example, to turn on outputs 2 and 8 simultaneously, the command &OUT 3 1 10 could be used.
Channel Address 4
Real Time Clock Module
Keeps Date and Time Information
ICEOS I/O Format
- &IN 4 Function (Read Clock)
- &OUT 4 Function Token (Set Clock)
- Where 4 = Device Address
- Token = Value to Set Clock
- Function = See Table
Function Table
Address Inputs | Internal Counter | Data I/O | Data Limits | Notes | Read | Write |
---|---|---|---|---|---|---|
A0 A1 A2 A3 | D0 D1 D2 D3 | |||||
0 0 0 0 | S 1 | * * * * | 0 ~ 9 | S1 or S10 are reset to zero irrespective of input data D0 ~ D3 when write instruction is executed with address selection. | 16 | 32 |
1 0 0 0 | S 10 | * * * * | 0 ~ 5 | 17 | 33 | |
0 1 0 0 | MI 1 | * * * * | 0 ~ 9 | 18 | 34 | |
1 1 0 0 | MI 10 | * * * * | 0 ~ 5 | 19 | 35 | |
0 0 1 0 | H 1 | * * * * | 0 ~ 9 | 20 | 36 | |
1 0 1 0 | H 10 | * * + + | 0 ~ 1/ 0 ~ 2 | D2 = "1" for PM D2 = "0" for AM D3 = "1" for 24 hr format D3 = "0" for 24 hr format | 21 | 37 |
0 1 1 0 | W | * * * | 0 ~ 6 | 22 | 38 | |
1 1 1 0 | D 1 | * * * * | 0 ~ 9 | 23 | 39 | |
0 0 0 1 | D 10 | * * + | 0 ~ 3 | D2 = "1" for 29 days in month 2 D2 = "0" for 28 days in month 2 (2) | 24 | 40 |
1 0 0 1 | MO 1 | * * * * | 0 ~ 9 | 25 | 41 | |
0 1 0 1 | MO 10 | * | 0 ~ 1 | 26 | 42 | |
1 1 0 1 | Y 1 | * * * * | 0 ~ 9 | 27 | 43 | |
0 0 1 1 | Y 10 | * * * * | 0 ~ 9 | 28 | 44 |
(1) * data valid as "0" or "1" blank does not exist (unrecognized during a write and held at "0" during a read) + data bits used for AM / PM, 12 / 24 HOUR and Leap Year
(2) If D2 previously set to "1", upon completion of month 2 day 29, D2 will be internally reset to "0"
Channel Address 5
Dual Scalar Module
Two Independent Nim and Slow Input Scalars
ICEOS I/O Format
- &IN 5 Function (Read Scaler)
- &OUT 5 Function Token (Set Mode)
Where 5 = Device Address
&N = Variable to Place Count
Token = Value to Set Prescaler
Function = See Table
The scalar is a 16 bit binary counter with a prescale of 1, 10, 100, or 1000. The counter can count to 65,535 in the /1 prescale or 65,535,000 in the /1000 prescale.
Table
&OUT | 5 | 1 | 0 | Reset Both Scalers |
&OUT | 5 | 2 | 0 | Reset Scaler B |
&OUT | 5 | 4 | 0 | Reset Scaler B |
&IN | 5 | 8 | Read Scaler A | |
&IN | 5 | 16 | Read Scaler B | |
&OUT | 5 | 32 | Token | Set Prescaler |
Prescale Table
Token | Prescale A | Prescale B | Token | Prescale A | Prescale B | |
---|---|---|---|---|---|---|
0 | /1 | /1 | 8 | /1 | /100 | |
1 | /10 | /1 | 9 | /10 | /100 | |
2 | /100 | /1 | 10 | /100 | /100 | |
3 | /1000 | /1 | 11 | /1000 | /100 | |
4 | /1 | /10 | 12 | /1 | /1000 | |
5 | /10 | /10 | 13 | /10 | /1000 | |
6 | /100 | /10 | 14 | /100 | /1000 | |
7 | /1000 | /10 | 15 | /1000 | /1000 |
Channel Address 11
Dual RS232 Serial Port
300 baud, 140 parity, 2 stop, 7 bits
&OUT | 11 | 4 | 0 | Reset Both Varts |
&OUT | 11 | 2 | (DATA) | Send Data to Channel A |
&OUT | 11 | 10 | (DATA) | Send Data to Channel B |
&IN | 11 | 0 | Sense Status Channel A |
&IN | 11 | 8 | Sense Status Channel B |
STATUS | |__| | |__| | |__| | |__| | |__| | |__| | |__| | |__| | |_x_| | |__| |__| |
D a t a a v a i l a b l e | X M I T b u f f e r a v a i l | O v e r r u n | F r a m i n g e r r o r | P a r i t y e r r o r | <---7 data bits---> |
&IN | 11 | 1 | Read Data at Channel A and Reset DAV |
&IN | 11 | 9 | Read Data at Channel B and Reset DAVB |
In Word
|_x_| | |_x_| | |_x_| | |__| | |__| | |__| | |__| | |__| | |_x_| | |__| |__| |
D A V | T B E | O v e r r u n | F E | P E | <---7 data bits---> |
Function Bits
|__3__| | |__2__| | |__1__| | |__0__| |
0=Chan A 1=Chan B Reset varts (both) | data strobe | reset DAV |