Design Concepts

1. doxygen generated API reference

The automatically generated class reference can be read at this location. It has been generated with the doxygen tool.

2. Using Font Primitives

nrec uses a special bitmap file format (.bmf) for fonts. There is a command line tool called ttf2bmf that can be used to convert ttf font files into bmf files. The font size specified defines the file size and the resolution of the font bitmaps and defaults to 12. The program, its source code and some example files are located in the folder run/Fonts.

Usage:

./ttf2bmf fontfile outputfile [fontsize]

Examples:

$ ./ttf2bmf LucidaTypewriterRegular.ttf default.bmf 24
./ttf2bmf: Wrote default.bmf, 256 by 256 pixels.
$ ./ttf2bmf LucidaTypewriterRegular.ttf default.bmf 10
./ttf2bmf: Wrote default.bmf, 256 by 64 pixels.
$ ./ttf2bmf LucidaTypewriterRegular.ttf default.bmf 48
./ttf2bmf: Wrote default.bmf, 256 by 1024 pixels.
$ ./ttf2bmf LucidaTypewriterRegular.ttf default.bmf
./ttf2bmf: Wrote default.bmf, 256 by 128 pixels.

3. Understanding the logger mechanism

The Logger is used to transfer messages between different threads running at different priority. Here is an illustration on how it works and an example of a LogReader implementation.

4. Understanding the plotting mechanism

The Plotting is used to handle the data plot windows containing qwt plots and streaming data into them. Here is an illustration on how it works.

5. FlowCondFixation and all it's actions

FlowCondFixation.png

6. PrimitiveControllerColorChangeOnStatus and it's timing

height="20"

7. To have a paradigm access the eye recording of the previous trial

In the header file:

/**
 * Calibrator object is needed to read in the analog samples after the trial.
 */
CCalibrator* m_poCalibrator;

In the cpp file: In the includes:

#include "CCalibrator.h"

In the constructor:

 : IParadigm( oParameters ),
    m_poCalibrator( NULL ),
...
// create simple calibrator object w/o initialization to post-trial read analog values 
m_poCalibrator = new CCalibrator();

In the destructor:

// Delete calibrator object.
delete m_poCalibrator;

In PreProcessTrial:

// Tell the calibration data object the trial's recording process
m_poCalibrator->PrepareTrial( poTrial->GetRecordingId() );

In PostProcessTrial:

// get all analog input samples from calibrator (channel 1)
std::vector< double > vecAInSamples;
vecAInSamples.clear();
vecAInSamples = m_poCalibrator->GetSamples( -1., -1., 1 );
// get analog samples from a certain channel and time interval
std::vector< double > CCalibrator::GetSamples( double dStartTime, double dStopTime, int iChannel )
// get calibrated eye positions
std::vector< std::vector< double > > CCalibrator::GetSamplesCalibrated( double dStartTime, double dStopTime )
// get maximum tangential velocity (in deg/s)
double CCalibrator::GetMaximumVelocity( double dStartTime, double dStopTime )