Design Concepts
Contents
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
6. PrimitiveControllerColorChangeOnStatus and it's timing
7. To have a paradigm access the eye recording of the previous trial
In the header file:
class CCalibrator; ... /** * 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 )