51 #include <QtCore/QtPlugin>
52 #include <QtConcurrent>
73 , m_bReceiveData(false)
74 , m_bProcessData(false)
75 , m_bFinishedClustering(false)
76 , m_qFileFwdSolution(
"./MNE-sample-data/MEG/sample/sample_audvis-meg-eeg-oct-6-fwd.fif")
77 , m_sAtlasDir(
"./MNE-sample-data/subjects/sample/label")
78 , m_sSurfaceDir(
"./MNE-sample-data/subjects/sample/surf")
99 QSharedPointer<RapMusicToolbox> pRapMusicToolboxClone(
new RapMusicToolbox());
100 return pRapMusicToolboxClone;
124 m_pRTSEOutput->data()->setName(
"Real-Time Source Estimate");
125 m_pRTSEOutput->data()->setAnnotSet(m_pAnnotationSet);
126 m_pRTSEOutput->data()->setSurfSet(m_pSurfaceSet);
129 QFuture<void> future = QtConcurrent::run(
this, &RapMusicToolbox::doClustering);
144 void RapMusicToolbox::calcFiffInfo()
146 QMutexLocker locker(&m_qMutex);
147 if(m_pFiffInfoEvoked && m_pFiffInfoForward)
149 qDebug() <<
"Fiff Infos available";
151 m_qListPickChannels.clear();
152 foreach (
const QString &ch, m_pFiffInfoForward->ch_names)
154 if(m_pFiffInfoEvoked->ch_names.contains(ch))
155 m_qListPickChannels << ch;
158 RowVectorXi sel = m_pFiffInfoEvoked->pick_channels(m_qListPickChannels);
160 m_pFiffInfo = QSharedPointer<FiffInfo>(
new FiffInfo(m_pFiffInfoEvoked->pick_info(sel)));
168 void RapMusicToolbox::doClustering()
173 m_bFinishedClustering =
false;
177 finishedClustering();
183 void RapMusicToolbox::finishedClustering()
186 m_bFinishedClustering =
true;
187 m_pFiffInfoForward = QSharedPointer<FiffInfoBase>(
new FiffInfoBase(m_pClusteredFwd->info));
199 if(this->isRunning())
202 if(m_bFinishedClustering)
218 if(this->isRunning())
222 m_bIsRunning =
false;
225 m_qVecFiffEvoked.clear();
228 m_bProcessData =
false;
230 m_bReceiveData =
false;
250 return "RAP MUSIC Toolbox";
260 if(!m_bFinishedClustering)
274 QSharedPointer<RealTimeEvoked> pRTE = pMeasurement.dynamicCast<
RealTimeEvoked>();
276 QMutexLocker locker(&m_qMutex);
278 if(pRTE && m_bReceiveData)
281 if(!m_pFiffInfoEvoked)
282 m_pFiffInfoEvoked = QSharedPointer<FiffInfo>(
new FiffInfo(pRTE->getValue()->info));
285 m_qVecFiffEvoked.push_back(pRTE->getValue()->pick_channels(m_qListPickChannels));
294 qint32 numDipolePairs = 1;
300 m_bReceiveData =
true;
309 QMutexLocker locker(&m_qMutex);
317 m_pPwlRapMusic.reset();
325 m_bProcessData =
true;
328 qint32 skip_count = 0;
332 QMutexLocker locker(&m_qMutex);
338 qint32 t_evokedSize = m_qVecFiffEvoked.size();
343 if(m_pPwlRapMusic && ((skip_count % 10) == 0))
346 FiffEvoked t_fiffEvoked = m_qVecFiffEvoked[0];
347 m_pPwlRapMusic->setStcAttr(t_fiffEvoked.
data.cols()/4.0,0.0);
348 m_qVecFiffEvoked.pop_front();
351 qDebug() <<
"m_pRapMusic->calculateInverse";
353 MNESourceEstimate sourceEstimate = m_pPwlRapMusic->calculateInverse(t_fiffEvoked);
354 m_pRTSEOutput->data()->setValue(sourceEstimate);
359 m_qVecFiffEvoked.pop_front();
FIFF measurement file information.
OutputConnectorList m_outputConnectors
QSharedPointer< RapMusic > SPtr
QSharedPointer< MNEForwardSolution > SPtr
QSharedPointer< SurfaceSet > SPtr
QSharedPointer< NewMeasurement > SPtr
QSharedPointer< AnnotationSet > SPtr
The RealTimeMultiSampleArrayNew class is the base class of every RealTimeMultiSampleArrayNew Measurem...
static QSharedPointer< PluginOutputData< T > > create(IPlugin *parent, const QString &name, const QString &descr)
The RapMusic class provides the RAP MUSIC Algorithm CPU implementation. ToDo: Paper references...
InputConnectorList m_inputConnectors
A hemisphere set of surfaces.