This application can be used for performing a range of operations on EEG data files, up to and including visualization and scoring operations.
From the point of view of science, this program is notable for its flexibility regarding new analysis techniques. It makes heavy use of scripts and plugins, so that novel approaches to EEG analysis are as easy as possible to implement.
From the operational point of view, the program is notable for being largely driven from the command line, rather than a GUI. This style of operation pays dividends during the development and testing of methods, and during analysis of large numbers of datasets. In both situations, a GUI just gets in the way.
The following sections describe the principles underlying this application. They may make more sense if you first look at the later section Command line examples.
The task of converting a raw time-series recording into a more manageable
set of scores seems straightforward, however there are innumerable
opportunities both for innovation and for blunders. New ideas for analysis
include:
The design of Jeda tries to make everything possible within the generous limits of the chosen program framework, and to provide many simple and explicit (but non-binding) methods for performing routine operations. And to do all this within the reassuring environment of a strongly-typed object-oriented programming language.
The design of Jeda consists of a pipeline with six stages:
This sequential design can deal with a lot of routine and non-routine requirements. However it does not provide for comparisons of individuals with groups, nor of groups with groups. This would be a major elaboration, and is not being considered at present.
Jeda has a Command Line Interface (CLI) but no Graphical User Interface
(GUI) — other than a simple demonstration
program. The reasons are:
Having said that, there are GUI components providing visualization options. So Jeda does provide a GUI experience where it matters. In the future a GUI will be layered on the existing code to help:
Details of the command line options follow, divided according to the
six phases of the overall process. But we first mention several general options:
| -h | This causes the program to print an outline of the program's command line options, and then to exit. |
| -eg | This causes the program to print several examples of command lines, and then to exit. |
| -v | This causes the program to print copious information reflecting its internal operation. Repetitions are cumulative (up to six, as in '-vvvvvv'), and produce additional diagnostics. |
| -q | This causes the program to be 'quieter' in its output. By default the program shows only errors and warnings, but these can be suppressed by '-q' or '-qq'. |
| -props | This is mainly of interest to programmers: it prints all the key=value 'system properties' that are intrinsic to this JVM instance, or that result from command line '-D' options. |
| -scripts | This is mainly of interest to programmers: it prints the names of all the scripts under ./scripts/ChannelClasses/ and ./scripts/EpochClasses/ (or whatever directories are specified in the properties file). It also does a trial compilation of each. |
| -scriptsX | This is like -scripts, but additionally shows detailed diagnostics whenever any compilation problems are encountered. |
| -mem | This causes a window to be shown, containing a scrolling record of memory usage. It resembles Windows Task Manager. |
The different representations of time-series (and, more challengingly,
events) need to be transformed into a generic form, so that
later processing stages can be independent of acquisition details.
This is the main purpose of Stage 1 operations.
Currently the application can read the following formats:
There is also the possibility of concisely specifying a group of files to process, via a database query. This feature greatly aids in batch processing, especially when results are also output to the database.
| -fn filename | Name of input recording file, which may include directories but not wildcards. (Under Windows the ‘/’ directory separator goes the wrong way.) |
| -fq SQL_WHERE_clause | If there is a database ('coreDB', say) relating file paths with other subject data, and if it has the schema specifically required by Jeda, then options like -fq "coreDB? paradigm='oddb' and age>25" can be used to process many files sequentially. |
| -fqq SQL_WHERE_clause | This performs the same database query as the option -fq. However, instead of then processing all the chosen files, this version simply lists the file paths, after which the program exits. |
| -ff [ EEG | EDF | NS5 etc] | Optional, since this is usually guessable from filename |
| -fileOverview | Dump a one-page summary of the input time series data |
Time-series operations include re-referencing, filtering, DC removal, EOG
artifact correction, extraction and elimination of specific channels.
It could also include operations that change the character of time-series (e.g. transforming ECG into heart rate), or operations that generate additional time-series (e.g decomposing EDA into separate SCL and SCR time-series).
Jeda handles this through customizable Java classes, which encapsulate all the required operations. The source code for these classes is compiled at runtime, yet is fully integrated with the rest of the program. This means that the Java classes can access handy utility routines from the main program, and be rather compact as a result.
| -scriptChannel [dir/]filename | Name of script file describing channel manipulations (e.g filtering or re-referencing). The path can be absolute or employ certain wildcards (i.e. it can begin with a slash, dot or tilde); otherwise it is taken to be relative to an implied directory specified by the property scripts.channelClasses=scripts/channelClasses. The default for this option is standard/Standard, which may be further abbreviates to Standard: either form refers to scripts/channelClasses/standard/Standard.java. Do not include the extension .java. The command line option -scripts may be used to list available scripts. |
Interestingly, it is possible for the Java code to generate data de novo. Such 'mock' data is very useful for testing the subsequent stages of analysis. In this case it is unnecessary to specify the -fn option.
Also, it is possible to specify a series of scripts, to be run sequentially, e.g.
-scriptChannel mock_ec/DualAlpha:standard/HRpt
to generate artificial EEG and ECG data, and then to append a channel
containing heart rate, derived from the ECG. [The usual caveats apply
regarding file separaters ('/' and '\') and path separators (':' and ';')
under Linux and Windows.]
Below is a list of available code for performing time-series operations.
scripts/channelClasses/
|-- standard
| |-- AvRef.java
| |-- CzRef.java
| |-- ExtraEog.java
| |-- Grat.java
| |-- GratPreclean.java
| |-- HRpt.java
| |-- HRwqrs.java
| |-- Minimal.java
| `-- Standard.java
|-- mock_ah
| |-- Modulated.java
| `-- Simple.java
|-- mock_ec
| |-- DualAlpha.java
| |-- Grat.java
| |-- ModelEeg.java
| |-- Sine.java
| `-- White.java
|-- mock_eyet
| `-- Simple.java
|-- mock_faces
| `-- Simple.java
|-- mock_gng
| `-- Simple.java
|-- mock_let
| `-- Simple.java
|-- mock_maze
| `-- Simple.java
|-- mock_oddb
| `-- Simple.java
|-- mock_ppi
| `-- Simple.java
`-- mock_wm
`-- Simple.java
The files specified by -scriptChannel are compiled at runtime, so can be regarded by users as scripts.
The first stage coerced event information into time-stamped strings,
however it is another job to turn these low-level events into labels
having a semantic significance. Only when this is done can specific
subsets of epochs be extracted with any degree of convenience.
For example, a stimulus event may be a 500 Hz tone, but from the experimental perspective this one physical event may need to be assigned different labels according to its immediately preceding stimulus, or whether there was a subsequent button response.
Realistically, these contingencies can't be anticipated by this program, so must be handled with code provided by the user, which computes the mapping from physical events labels to semantic events labels. As with Stage 2 operations, Java code is used, which is compiled at runtime.
This results in considerable flexibility regarding events. Indeed generating new events is a possibility. For example, new events might be created by examining the time series, and marking the onset of an hypoxic event, SCR, K-complex, peak of respiratory cycle, etc. All these operations may be encapsulated in a script.
The Java code specified by the -scriptEpoch option typically returns a table containing a number of rows (timestamps) and columns (event attributes). Another table is automatically generated that contains a number of rows (one per channel) and columns (channel attributes like name, position, transducer, etc). These two tables are copied to SQL tables, and selections can then be made using standard SQL SELECT statements. The resulting subset of events and subset of channels are then combined (an OUTER JOIN, in the language of SQL), giving a table with a number of rows (one per single trial waveform) and columns (comprising all event and channel attributes). This 'attribute table' is a general repository for all salient information associated with each single-trial waveform. In particular it is used in the next analysis stage to bin the single trials. (The options -labelXXX augment the attribute table by adding extra columns.)
Both the processed time series and the table of attributes are cached on the server. Thus an analysis can be repeated, or different binning tried, with little cost in time.
Command line options:
| -paradigm subdirectory | Subdirectory of whatever is indicated by the property scripts.epochClasses (whose value is typically scripts/epochClasses or scripts\\epochClasses). The default for this option is ec, while alternatives are oddb, ah, maze etc. |
| -scriptEpoch filename | Name of script file enumerating potential epochs and their attributes (e.g stimulus, stimulus sub-types, reaction time, noise measures). The path can be absolute or employ wildcards (i.e. it can begin with a slash, dot or tilde) — in which case the -paradigm argument is ignored. Or else it is taken to be relative to an implied directory: the implied directory is formed by concatenating whatever is indicated by the property scripts.epochClasses, with the explicit or default value associated with -paradigm. The default for this option is Standard. Do not include the extension .java. The command line option -scripts may be used to list available scripts. |
| -eventSelection SQL_clause | Event selection, e.g. "stim = 'Bg' and RT < 0.5" Note that the enclosing double quotes are essential, that enclosed strings like 'Bg' require single quotes, and that case is significant only for such strings. Def: select all available events |
| -chanSelection SQL_clause | Channel selection, e.g. "mode = 'EEG' or site = 'SCL'" Another example is "Site like '_z'", which shows SQL pattern matching in action. Note that the enclosing double quotes are essential in order that the command line is properly parsed. Also SQL requires that enclosed strings like 'EEG' use single quotes, and regards case as significant only for such strings. Def: select all available channels |
| -labelString key=value | one or more key=value pairs, where the value is a string§ |
| -labelInteger value | one or more key=value pairs, where the value is an integer§ |
| -labelFloat value | one or more key=value pairs, where the value is a float§ |
| -labelDouble value | one or more key=value pairs, where the value is a double§ |
| -labelDate value | one or more key=value pairs, where the value is an SQL-style date§ |
| -labelTime value | one or more key=value pairs, where the value is an SQL-style time§ |
| -labelTimestamp value | one or more key=value pairs, where the value is an SQL-style timestamp§ |
| -previewSeries | enable plotting of raw time-series |
| -reviewSeries | enable plotting of preprocessed time-series |
§ The same key=value pairs are assigned to each and every epoch. Such values are of no value in distinguishing epochs, so can't be used by this program. So what is their purpose? This feature allows additional information about the subject to be incorporated into the output, and this information will certainly be useful in later phases of analysis when combining results from many people. Ideally these later phases should not have to merge Jeda's data with data from other sources; ideally all relevant information should be encapsulated in Jeda's output, and these -labelXxxx commands are designed to do this.
See under scripts/epochClasses for examples of scripts that may be specified by -scriptEpoch:
scripts/epochClasses/
|-- ah
| `-- Standard.java
|-- ec
| |-- OneLong.java
| `-- Standard.java
|-- eyet
| `-- Standard.java
|-- faces
| `-- Standard.java
|-- gng
| `-- Standard.java
|-- let
| `-- Standard.java
|-- maze
| `-- Standard.java
|-- oddb
| |-- Standard.java
| `-- Synamps.java
|-- ppi
| `-- Standard.java
`-- wm
`-- Standard.java
The file specified by -scriptEpoch is compiled at runtime, so can be regarded by users as a script.
Attributes are crucial to advanced subsetting of epochs and to more
experimental science goals. Examples of interesting subsetting that
can be carried out are:
| -transform [null|power|phase|sq] | Optionally transform the epochs, and do so prior to binning. The default is null which implies time-series output. |
| -binV category | Category used to distinguish the rows in multiple plots: category is any of the column titles in the attribute table |
| -binH category | Category used to distinguish the columns in multiple plots: category is any of the column titles in the attribute table |
| -binZ category | Category used to distinguish offsets within relevant plot styles: category is any of the column titles in the attribute table |
| -dumpRaw | Dumps an ASCII representation of the raw data to the console |
| -dumpUnbinned | Dumps an ASCII represention of all single trials to the console |
| -dumpBinned | Dumps an ASCII representation of all binned averages to the console |
If none of "-binV", "-binH", and "-binZ" are specified, then this stage outputs all selected single trials to subsequent processing stages.
If one or more of "-binV", "-binH", and "-binZ" are specified, then this stage outputs a 1- 2- or 3-way binning of the single-trials. This has the form of a data object comprising either a 'frame' of waveforms, a 1-D array of such frames, or a 2-D grid of such frames.
Very commonly 'Site' will be used as a discriminant, so that Fz, Cz, Pz etc are separately averaged. `Stim' is another common discriminant (and would, for example, result in separate 'Bg' and 'Tg' averages); however there is really no limit to what may be chosen. (The meaning of all this will be clearer after looking at the section Command line examples.)
Some traditional scoring options have already been implemented, albeit
simplistically. There should eventually be plug-ins for measuring
coherence, gamma activity, regional phase synchrony, ICA decompositions, etc.
Model fitting has already been implemented via a Java-C interface to
the program eegfit.
In all cases the command line comprises what is essentially a function call, with (a) the name of the plug-in, (b) a list of argument=value pairs, and (c) a specification of which rows/columns should be sent to this plug-in.
| -score ScoreOption(arg=val,...)[rows][cols] | Carries out the specified transformation or scoring operation |
There can be zero, one or more scoring options specified, and they are executed in sequence. The section Scoring epoched data explains more.
Run Jeda with the -h option, to see what transformation/scoring options have been implemented: "java -cp build frontendClasses.CLI -h"
Some basic display and export options have already been implemented.
There will eventually be plug-ins for dynamic spectra, topographic maps,
plots emphasizing laterality, etc.
| -display DisplayOption(arg=val,...)[rows][cols] | Carries out the specified display operation |
| -output DisplayOption(arg=val,...)[rows][cols] | Carries out the specified export operation |
As with scoring, there can be zero, one or more display/export options specified, and they are executed in sequence. See the section Displaying epoched data.
Run Jeda with the -h option, to see what display/export options have been implemented.
This style of visualization is available via the -previewSeries
and -reviewSeries command line options. It enables the interactive
display of continuous time-series.
Note that the window contains an upper and lower panel: that lower shows the full duration of the available data, and is mainly used as a navigation shortcut.
Mouse actions are dependent on which part of the upper or lower panel the mouse pointer is located in. The area "North" refers to the band across the top, where event codes can be shown; "Center" refers to the plot area; "South" refers to the band across the bottom where the times are shown; "East" is where the channel information is shown; "West" is where the channel labels are shown. The effect of mouse clicks also depends on which button is pressed. The mouse wheel can be used to scroll vertically (where appropriate), but there are no double-click or click-and-drag operations defined, and Shift, Ctrl and Alt are ignored.
Mouse clicks are used to pop-up addition windows, to position cursors, and
to highlight particular channels:
| Area | Left | Middle | Right |
|---|---|---|---|
| North | Event display | Event filter | |
| Center | Cursor 1 | Help | Cursor 2 |
| South | |||
| East | Select channel | Waveform attributes | |
| West | Other wave info |
The (proposed) Event Display window will enable events to be seen in tabular form, and the (proposed) Event Filter will help in showing only the relevant events. The two cursors can simultaneously defined, and a particular channel can be highlighted. Also the content of the left- and right-hand sides can be changed via right-clicks.
Keyboard actions control layout, and pop-up additional windows:
| Key | Shift- | Ctrl- | |
|---|---|---|---|
| ← → | Scroll one page | Change horizontal scale | Step one event |
| ↑ ↓ | Highlight channel | Change vertical scale | Channel separation |
| Home | Go to start of waveform | ||
| End | Go to end of waveform | ||
| Space | Scroll small step to right | ||
| BackSp | Scroll small step to left | ||
| Key | |
|---|---|
| A | About Jeda: HTML documentation |
| C | Display common attributes |
| D | Drill-down to single trials |
| E | Toggle display of SEM |
| H | Display a Help window |
| P | Print window |
| Q | Quit window |
| R | Reset plot scale |
| S | Show summary report |
| T | Display original time-series |
| X | Export data |
| Z | Display clone of one panel |
Some of these options are also available from pull-down menus: see and at the top of the window.
These mouse and keyboard options are typical of plots generated by Jeda. However they are not all guaranteed to be implemented, nor are plot options limited to these. Type 'H' to see what options are available in any given case.
At present there are only simple scoring options available, e.g.
'TradERP', 'TradSpect', 'HeartRate'. However it is intended that all
manner of scoring and transformation options should be available: there
might be options
involving spatio-temporal wave decomposition, model fitting, single-trial
analysis, variability (using the method of Riera-Diaz et al. (1995) in
Int. J. Biomedical Computing, 38(2):109–120), etc.
It should be easy to implement and test new scoring techniques since
the hurdles of format incompatibilities and epoch extraction have been
taken care of.
A typical example of command line invocation of scoring is
-score "TradERP(paraCond=OddbTg, years=40)[][Tg]"
In this case the chosen scoring method is TradERP. This
method has several possible arguments, of which only paraCond
and years are specified. The first informs the algorithm
that it should presume the data to be Tg averages from an Oddball
paradigm — this implies a certain set of components and typical
latencies. The second argument further fine-tunes the assumed latencies.
Arguments all have default values, so values need to be specified only
the defaults are to be over-ridden.
Following the arguments is an (optional) specification of which
boxes are to be scored. We might have the situation that the
data is an array of 3 rows (alpha is weak medium or strong) ×
2 columns (stimulus is Bg or Tg) boxes, each containing multiple waveforms.
Then appending [][Tg], as in the example above, would
mean that only the 'Tg' column of three boxes is scored. The square
brackets may contain lists, so that (in this example)
[weak,strong][Tg] would cause only two of the six boxes
to be scored.
Running a 'scoring' plug-in causes the correspondingly-named Java class to be compiled and run; and that Java class can do anything whatsoever with the time-series data — including modifying it. This allows for transformations of the epoched data, as when ICA is carried out.
Any number of scoring plug-ins can be specified after -score on the command line, and they will be executed in the specified order. Thus, for example, the first might perform ICA, the second might sort and select relevant components, and the third might generate summary scores.
Scoring classes can call legacy code or scripts written in languages other than Java. This greatly complicates installation and restricts the portability of the code, but is a real-world requirement. One example is the scoring option EegFit() which calls a spectral-fitting routine written in C. Another example is CallR(), which enables an R script to operate on the data. Scripts written in R or Matlab etc. need to be placed in (or under) the directory scripts/score (or scripts\score in Windows):
scripts/score
`-- test.R
Graphical representations of the data can be displayed in their own
interactive window. The way of invoking a particular display option
is very similar to that of scoring options, e.g.
-display "TiledStack(sizeH=0.5, offsetV=0.15, offsetH=0.25, sizeV=0.8)"It consists of the name of the option ('TiledStack'), four argument=value pairs (all optional), and an optional selection of rows and columns (e.g.
[weak,strong][]). The arguments currently just
specify the width, height and location of the plot window with respect to
the top-left of the screen. Row and column selection
is useful for eliminating those that are calculated and scored, but do not
need to be displayed.
Discriminant factors cause the window to be divided into a number of plot areas, as illustrated in the above figure. Of course plotting stacked time-series is just one possibility. The plug-in 'TiledStack' is adequate for many purposes (it works for spectra too.) There are other ideas for display plug-ins:
In the case of 'TiledStack', each box contains stacked waveforms that can be manipulated as described under Viewing continuous time-series.
As an example, consider the scenario of a waveforms distinguished by 3 (site={Fz,Cz,Pz}) × 2 (face={neutral,happy}) × 2 (SCR={yes,no}) factors.
-binZ site) and `face' as the horizontal discriminant
(by -binH face), will result in 'neutral' Fz,Cz,Pz
waveforms plotted in the first frame, and 'happy' Fz,Cz,Pz
waveforms plotted in the second.-binV SCR) will cause there to be two rows of boxes
instead of one.Scores (as described in Scoring epoched data) are automatically superimposed on plots.
Exporting of waveform data and scores is implemented as just another display option. The full version of the export option (showing all arguments and their default values) is
-output "Export(to=FILE, baseFilename=out, as=TXT, tableSep=comma, tableAsCols=true, gui=false, outAttr=true, outWave=true, outStdD=false, outScor=true)"As with all score and display options, this can be followed by box selectors (e.g.
[SCR,noSCR][H,S,F,A,D]) or nothing (in which
case all boxes will be exported). The following table explains
the arguments, and their options.
| Export argument | Option | Description | Default |
|---|---|---|---|
| to | [FILE | WINDOW] | Destination for output | FILE |
| baseFilename | filename | Name of output file (only if 'to=FILE'). Alphanumerics and the characters '.' '/' '\' are allowed; however '~' does not work. | out |
| as | [MATLAB | OBJ | R | SQL | TXT | XML] | Format of output | TXT |
| tableSep | [comma | space | tab] | Field separator (only if 'as=TXT') | comma |
| tableAsCols | [true | false] | Orientation (only if 'as=TXT') | true |
| gui | [true | false] | Activate GUI, for an interactive experience | false |
| valZ | [ | Cz | SCL | ... ] | Whether or what to drill-down to single trials | |
| outAttr | [true | false] | Include attributes in output | true |
| outWave | [true | false] | Include attributes in output | true |
| outStdD | [true | false] | Include attributes in output | false |
| outScor | [true | false] | Include attributes in output | true |
# Plain format, output to a file
Export(to=FILE, baseFilename=../blah3, as=TXT,
tableSep=[comma|space|tab], tableAsCols=[true|false],
outAttr=[true|false], outWave=[true|false],
outStdD=[true|false], outScor=[true|false])
# Plain format, output to a window
Export(to=WINDOW, as=TXT,
tableSep=[comma|space|tab], tableAsCols=[true|false],
outAttr=[true|false], outWave=[true|false],
outStdD=[true|false], outScor=[true|false])
# Fancy format, output to a file
Export(to=FILE, baseFilename=../blah3, as=[MATLAB|OBJ|R|SQL|XML],
outAttr=[true|false], outWave=[true|false],
outStdD=[true|false], outScor=[true|false])
# Fancy format, output to a window
Export(to=WINDOW, as=[MATLAB|OBJ|R|SQL|XML],
outAttr=[true|false], outWave=[true|false],
outStdD=[true|false], outScor=[true|false])
Remember that option names (e.g. 'Export') and arguments name (e.g. 'baseFilename') are case sensitive, but argument values (e.g. 'true') are not.
Each export file or window corresponds to one displayed box of waveforms, and so the same attributes that distinguish the boxes are used to distinguish the files/windows. Thus if the Export command specified baseFilename=../results/subj1028, and as=MATLAB, and if the box selectors are like [SCR,noSCR][H,S,F], then six files will be created:
./results/subj1028.SCR.H.m ./results/subj1028.SCR.S.m ./results/subj1028.SCR.F.m ./results/subj1028.noSCR.H.m ./results/subj1028.noSCR.S.m ./results/subj1028.noSCR.F.m
TXT is the most familiar of all the output formats, and its output is easiest for humans to read. However that is rarely the point of the exercise, and the other alternatives should be considered. MATLAB and R are good if futher waveform manipulation and display are contemplated. SQL and XML are good if generic persistence is required. Other output formats may be implemented in time, e.g. ARFF which is tailored for data mining using Weka, Mondrian, GGobi, or Rattle. Excel .xls format is a possiblity, with the help of Jakarta POI.
One of the neat things about the MATLAB and R options is that the data can be dumped together with appropriate display/analysis code in those languages. Using this code as a template means that the transition to analysis and plotting is easy.
Another display option provides for direct export to a MySQL database:
-output "DBExport(gui=false, dbName=br2008a001, baseTableName=results, outStdD=false, outWave=false, outScor=true, outAttr=false)"As with all display options, the above command can be followed by box selectors.
Command line options are described above, and other matters to do with
the OS environment are described under
Running.
Generally, however, it is possible to run the program with
java java_options frontendClasses.CLI application_optionswhere java_options commonly specifies a classpath and library locations, and will be similar to one of
java -cp build:lib/derby.jar:jri/JRI.jar -Djava.library.path=native:jri -Xmx300m frontendClasses.CLI application_options
java -cp build;lib\derby.jar;jri\JRI.jar;%JAVA_HOME%\lib\tools.jar -Djava.library.path=native:jri -Xmx300m frontendClasses.CLI application_options
(Linux and Windows versions, respectively). The classpath should certainly
include 'build;lib\derby.jar' and '%JAVA_HOME%\lib\tools.jar'
(Windows only), however additional Java options are required only in
certain (obvious) circumstances.
The remainder of the command line, application_options, can be quite varied, as described above. Some examples follow:
-h
-eg
-scriptChannel mock_ec/DualAlpha -paradigm ec -reviewSeries -binZ Site -dumpBinned -display "TiledStack(offsetV=0.1, offsetH=0.25, sizeH=0.3, sizeV=0.15)"
-fn data/17000356.ODDB.NS5 -scriptChannel Minimal -paradigm oddb -reviewSeries
-fn data/10006636.EC.NS5 -scriptChannel Standard:AvRef -paradigm ec -scriptEpoch OneLong -chanSelection "Site like '_z'" -reviewSeries -dumpUnbinned
-fn data/17000356.ODDB.NS5 -paradigm oddb -eventSelection "Stim like '_g'" -chanSelection "Site like '_z'" -binV RTclass -binH Stim -binZ Site -score "TradERP()[][Tg]" -display "TiledStack(sizeH=0.3, sizeV=0.6)[slowrt,fastrt][Tg]"
-fn data/17000356.ODDB.NS5 -paradigm oddb -eventSelection "Stim like '_g'" -chanSelection "not Mode='EVE'" -binV AlphaQ -binH Stim -binZ Site -score "TradERP(years=22,paraCond=OddbTg)[][Tg]" "TradERP(years=22,paraCond=OddbBg)[][Bg]" -display "TiledStack(offsetV=0.1, offsetH=0.25)" -output "Export(as=R,to=window)"
-fn data/10006636.EC.NS5 -paradigm ec -eventSelection "Stim='Pseudo'" -chanSelection "Mode='EEG'" -transform power -binZ Site -score "TradSpect()" -display "TiledStack(offsetV=0.2, offsetH=0.25)"
-fn data/10006636.ODDB.NS5 -paradigm ec -scriptEpoch OneLong -chanSelection "Mode='EEG' OR Mode='ECG'" -binZ Site -score "HeartRate()" -output "Export(to=FILE, baseFilename=out, outScor=true)"
The above commands are routinely used during development to test the program. They also illustrate how effective the overall design is at reducing a lot of complications to a manageable number of command line options. In particular they demonstrate how the intricacies of filtering, re-referencing, and event refinement can be hidden in scripts: see the examples listed under Time-series operations and Epoch selection.
Note about formatting. Spaces, brackets and quotes have special meanings to the shell interpreter, and can cause the program to 'see' something other than what you type on the command line. This is a useful feature in general, but can be an annoyance if the process is not understood. Some useful clues to composing commands are:
- single quotes are required by SQL to specify strings and patterns
- SQL commands (which often include strings) must be delimited by double quotes in order that it is treated as a single argument by the command line interpreter
- spaces are normally argument delimiters, so to keep extended arguments together as one, all spaces should be escaped or the entire argument wrapped in quotes (of either type). All examples above use quote-wrapping rather than escaping.
- square and round brackets have special meaning to the command line interpreter as well as having a meaning in score and display options, and so in such cases brackets should be escaped or the entire argument wrapped in quotes (of either type)
- single and double quotes have distinct meaning to the command line interpreter where shell variables are concerned, so this distinction is important when using shell scripts to batch process many files
| Validate HTML CSS | Last changed 2010-01-06 | Chris Rennie |