42 #include "fiffsimulator.h"
43 #include "fiffproducer.h"
70 #include <QtCore/QtPlugin>
72 #include <QCoreApplication>
90 const QString FiffSimulator::Commands::BUFSIZE =
"bufsize";
91 const QString FiffSimulator::Commands::GETBUFSIZE =
"getbufsize";
92 const QString FiffSimulator::Commands::ACCEL =
"accel";
93 const QString FiffSimulator::Commands::GETACCEL =
"getaccel";
94 const QString FiffSimulator::Commands::SIMFILE =
"simfile";
104 , m_sResourceDataPath(QString(
"%1/MNE-sample-data/MEG/sample/sample_audvis_raw.fif").arg(QCoreApplication::applicationDirPath()))
106 , m_uiBufferSampleSize(100)
107 , m_AccelerationFactor(1.0)
108 , m_TrueSamplingRate(0.0)
109 , m_pRawMatrixBuffer(NULL)
110 , m_bIsRunning(false)
120 qDebug() <<
"Destroy FiffSimulator::~FiffSimulator()";
122 delete m_pFiffProducer;
124 m_bIsRunning =
false;
131 void FiffSimulator::comBufsize(
Command p_command)
135 quint32 t_uiBuffSize = p_command.
pValues()[0].toUInt();
141 bool t_bWasRunning = m_bIsRunning;
145 m_pFiffProducer->
stop();
149 m_uiBufferSampleSize = t_uiBuffSize;
154 QString str = QString(
"\tSet %1 buffer sample size to %2 samples\r\n\n").arg(
getName()).arg(t_uiBuffSize);
165 void FiffSimulator::comGetBufsize(
Command p_command)
167 bool t_bCommandIsJson = p_command.
isJson();
173 QJsonObject t_qJsonObjectRoot;
174 t_qJsonObjectRoot.insert(Commands::BUFSIZE, QJsonValue((
double)m_uiBufferSampleSize));
175 QJsonDocument p_qJsonDocument(t_qJsonObjectRoot);
181 QString str = QString(
"\t%1\r\n\n").arg(m_uiBufferSampleSize);
188 void FiffSimulator::comAccel(
Command p_command)
192 float t_uiAccel = p_command.
pValues()[0].toFloat();
197 bool t_bWasRunning = m_bIsRunning;
201 m_pFiffProducer->
stop();
205 m_AccelerationFactor = t_uiAccel;
206 m_RawInfo.
info.
sfreq = m_AccelerationFactor * m_TrueSamplingRate;
211 QString str = QString(
"\tSet acceleration factor to %0.3f\r\n\n").arg(t_uiAccel);
221 void FiffSimulator::comGetAccel(
Command p_command)
223 bool t_bCommandIsJson = p_command.
isJson();
229 QJsonObject t_qJsonObjectRoot;
230 t_qJsonObjectRoot.insert(Commands::ACCEL, QJsonValue((
double)m_AccelerationFactor));
231 QJsonDocument p_qJsonDocument(t_qJsonObjectRoot);
237 QString str = QString(
"\t%0.3f\r\n\n").arg(m_AccelerationFactor);
244 void FiffSimulator::comSimfile(
Command p_command)
249 QFile t_file(p_command.
pValues()[0].toString());
251 QString t_sResourceDataPathOld = m_sResourceDataPath;
255 m_sResourceDataPath = p_command.
pValues()[0].toString();
258 if (this->readRawInfo())
260 m_pFiffProducer->
stop();
263 m_commandManager[Commands::SIMFILE].reply(
"New simulation file set succefully.\r\n");
267 qDebug() <<
"Didn't set new file";
268 m_sResourceDataPath = t_sResourceDataPathOld;
275 qDebug() <<
"File does not exist on server!";
276 m_sResourceDataPath = t_sResourceDataPathOld;
299 return _FIFFSIMULATOR;
307 return "Fiff File Simulator";
313 void FiffSimulator::init()
318 QFile t_qFile(QString(
"%1/mne_rt_server_plugins/FiffSimulation.cfg").arg(QCoreApplication::applicationDirPath()));
319 if (t_qFile.open(QIODevice::ReadOnly | QIODevice::Text))
321 QTextStream in(&t_qFile);
322 QString key =
"simFile = ";
323 while (!in.atEnd()) {
324 QString line = in.readLine();
325 if(line.contains(key, Qt::CaseInsensitive))
327 qint32 idx = line.indexOf(key);
330 QString sFileName = line.mid(idx, line.size()-idx);
332 QFile t_qFileMeas(sFileName);
334 if (t_qFileMeas.open(QIODevice::ReadOnly))
336 m_sResourceDataPath = sFileName;
337 std::cout <<
"\tLoad simulation file: " << sFileName.toLatin1().constData() << std::endl;
345 if(m_pRawMatrixBuffer)
346 delete m_pRawMatrixBuffer;
347 m_pRawMatrixBuffer = NULL;
350 m_pRawMatrixBuffer =
new RawMatrixBuffer(RAW_BUFFFER_SIZE, m_RawInfo.
info.
nchan, this->m_uiBufferSampleSize);
361 m_pFiffProducer->start();
373 this->m_pFiffProducer->
stop();
374 m_bIsRunning =
false;
390 emit remitMeasInfo(ID, m_RawInfo.
info);
396 bool FiffSimulator::readRawInfo()
400 QFile t_File(m_sResourceDataPath);
406 printf(
"Error: Not able to read raw info!\n");
411 m_TrueSamplingRate = m_RawInfo.
info.
sfreq;
412 m_RawInfo.
info.
sfreq *= m_AccelerationFactor;
500 if(m_pRawMatrixBuffer)
501 delete m_pRawMatrixBuffer;
502 m_pRawMatrixBuffer =
new RawMatrixBuffer(10, m_RawInfo.
info.
nchan, m_uiBufferSampleSize);
517 float t_fSamplingFrequency = m_RawInfo.
info.
sfreq;
518 float t_fBuffSampleSize = (float)m_uiBufferSampleSize;
520 quint32 uiSamplePeriod = (
unsigned int) ((t_fBuffSampleSize/t_fSamplingFrequency)*1000000.0f);
526 QSharedPointer<Eigen::MatrixXf> t_pRawBuffer(
new Eigen::MatrixXf(m_pRawMatrixBuffer->pop()));
530 emit remitRawBuffer(t_pRawBuffer);
531 usleep(uiSamplePeriod);
Old fiff_type declarations - replace them.
MNEEpochDataList class declaration.
CommandManager m_commandManager
virtual ConnectorID getConnectorID() const
virtual void connectCommandManager()
FIFF raw measurement data.
static bool setup_read_raw(QIODevice &p_IODevice, FiffRawData &data, bool allow_maxshield=false)
virtual void info(qint32 ID)
The FiffProducer class provides a ECG data producer for a given sampling rate.
QList< QVariant > & pValues()
void executed(Command p_command)
FIFF class declaration, which provides static wrapper functions to stay consistent with mne matlab to...
virtual const char * getName() const