/** \file 
 * This file is used for the doxygen documentation. 
 *  The online documentation can be found at robot.informatik.uni-leipzig.de/software
 */

/**
\dir guilogger

A tool to customize online gnuplot windows online. 

\b Features \n 

One can send data in "channels" 
(a channel is more or less a variable observed over time equipped with a label) 
per pipe to the guilogger.
Guilogger provides a seperate window where you can choose which of the channels 
should be displayed in which window. According to your selection your data will 
be plotted online. \n
Furthermore guilogger gives the opportunity to save your data "channels" in a file
together with the labels you selected for the channels. \n
To do something useful with these logfiles guilogger allows you to watch them again
and navigate through the logfile. Once you found a valuable figure you can use the 
gnuplot commands generated by guilogger. Copy this command in a console where gnuplot 
is running and you receive your figure and can save it to disk. \n 

Here you can see a screenshot of the guilogger window with 9 channels. 
The used labels range from "x[0]" to "y[2]". The top three boxes after the word "Channels" 
are useless at the moment.
\image html guilogger/screenshot.png
\image latex screenshot.ps "Screenshot of the guilogger window with 9 channels. Labels range from x[0] to y[2]."


\b Usage \n 
You start guilogger by typing \c guilogger and the right parameters.
For working in pipe mode you type <tt> -m pipe</tt>. An additional
\c -l enables the logging to a file. \n
One can also you can view a logfile with <tt> guilogger -m file -f filename.log</tt>
where filename.log is the name of the logfile.
Guilogger can also read from serial port with <tt> guilogger -m serial -p portnumber</tt>.
This information is summarized in the parameter listing, which you can get by typing
\code guilogger --help \endcode \n

guilogger parameter listing \n
<tt> -m [mode] </tt> mode = serial | pipe (default) | file \n
<tt> -p [port] </tt> port = serial port to read from \n
<tt> -f [file] </tt> input file; only viewing, no streaming \n 
<tt> -l        </tt> turns logging on (writing to file) \n
<tt> --help    </tt> displays this message. \n


\b Format \n 
Here the BNF of the Logging Format:\n
\code
<STREAM>        := <LINE> <STREAM> | <LINE>
<LINE>          := <CMDLINE> | <COMMENTLINE> | <DATALINE>
<CMDLINE>       := #C <CHANNELLABEL>*<ENDLINE>
                | #IN <STRING><ENDLINE>
                | #I [<String>] D <CHANNELLABEL> <STRING><ENDLINE>
                | #<CHAR> <STRING><ENDLINE>
<COMMENT>       := # <STRING><ENDLINE>
<CHANNELLABEL>  := <STRING_W/O_WHITESPACE>
<DATALINE>      := <FLOAT> <FLOAT>*
\endcode
<tt>*</tt> means multiple occurences separated by space. 
The number of Channellabels should be the same as the number of data values.
The cmd lines starting with #I [XXX] D assign a description to each channel. 
Vector or matrix channels should have the format name[i] or name[i,j]. To give
 a discription to the entire matrix or vector channel use "name_" in the #I D line.

Here one example:
\code
# This is a comment
# the following lines are a command lines for other programs and are ignored by guilogger
# the following lines attribute names to channels
#IN MYRobot1
#I [test] D x[0] first sensor
#I [test] D y_ motor values
#I [test] D eps learning rate
# the following line defined our channels
#C n1 x[0] y[0] y[1] eps 
-0.3 0.424253 0.112 10e-5
0.1 -1.2 0.231 0.00
\endcode

*/



