7 #include "realtimebutterflyplot.h"
8 #include "../realtimeevokedwidget.h"
34 RealTimeButterflyPlot::RealTimeButterflyPlot(QWidget *parent)
36 , m_pRealTimeEvokedModel(NULL)
50 void RealTimeButterflyPlot::dataUpdate(
const QModelIndex& topLeft,
const QModelIndex& bottomRight,
const QVector<int>& roles)
52 if(!m_bIsInit && m_pRealTimeEvokedModel->isInit())
54 m_iNumChannels = m_pRealTimeEvokedModel->
rowCount();
67 QPainter painter(
this);
70 painter.setBrush(QBrush(Qt::white));
71 painter.drawRect(QRect(0,0,this->width()-1,this->height()-1));
77 if(m_pRealTimeEvokedModel->getNumSamples() > 0)
81 painter.setPen(QPen(Qt::black, 1, Qt::DashLine));
83 float fDx = (float)(this->width()-2) / ((
float)m_pRealTimeEvokedModel->getNumSamples()-1.0f);
85 painter.drawLine(posX, 1, posX, this->height()-2);
90 painter.translate(0,this->height()/2);
92 for(qint32 r = 0; r < m_iNumChannels; ++r)
94 if(m_lSelectedChannels.contains(r)) {
95 qint32 kind = m_pRealTimeEvokedModel->
getKind(r);
100 qint32 unit = m_pRealTimeEvokedModel->
getUnit(r);
107 else if(unit == FIFF_UNIT_T)
128 case FIFFV_MISC_CH: {
139 painter.setPen(QPen(m_pRealTimeEvokedModel->
getColor(r), 1));
141 QPainterPath path(QPointF(1,0));
142 createPlotPath(r,path);
144 painter.drawPath(path);
155 void RealTimeButterflyPlot::createPlotPath(qint32 row, QPainterPath& path)
const
158 qint32 kind = m_pRealTimeEvokedModel->
getKind(row);
159 float fMaxValue = 1e-9f;
163 qint32 unit = m_pRealTimeEvokedModel->
getUnit(row);
165 fMaxValue = fMaxGRAD;
166 else if(unit == FIFF_UNIT_T)
178 case FIFFV_MISC_CH: {
179 fMaxValue = fMaxMISC;
187 float fScaleY = this->height()/(2*fMaxValue);
190 float fWinMaxVal = ((float)this->height()-2)/2.0f;
191 qint32 iDownSampling = (m_pRealTimeEvokedModel->getNumSamples() * 4 / (this->width()-2));
192 if(iDownSampling < 1)
195 float y_base = path.currentPosition().y();
196 QPointF qSamplePosition;
198 float fDx = (float)(this->width()-2) / ((
float)m_pRealTimeEvokedModel->getNumSamples()-1.0f);
201 RowVectorXd rowVec = m_pRealTimeEvokedModel->
data(row,1).value<RowVectorXd>();
203 if(rowVec.size() > 0)
205 float val = rowVec[0];
208 float newY = y_base+fValue;
210 qSamplePosition.setY(newY);
211 qSamplePosition.setX(path.currentPosition().x());
213 path.moveTo(qSamplePosition);
218 for(i = 1; i < rowVec.size(); ++i) {
223 fValue = val*fScaleY;
225 fValue = fValue > fWinMaxVal ? fWinMaxVal : fValue < -fWinMaxVal ? -fWinMaxVal : fValue;
227 float newY = y_base+fValue;
229 qSamplePosition.setY(newY);
232 qSamplePosition.setY(y_base);
235 qSamplePosition.setX(path.currentPosition().x()+fDx);
237 path.lineTo(qSamplePosition);
261 void RealTimeButterflyPlot::setSettings(
const QList< Modality >& p_qListModalities)
263 for(qint32 i = 0; i < p_qListModalities.size(); ++i)
265 if(p_qListModalities[i].m_sName == (
"GRAD"))
267 showGRAD = p_qListModalities[i].m_bActive;
268 fMaxGRAD = p_qListModalities[i].m_fNorm;
271 if(p_qListModalities[i].m_sName == (
"MAG"))
273 showMAG = p_qListModalities[i].m_bActive;
274 fMaxMAG = p_qListModalities[i].m_fNorm;
276 if(p_qListModalities[i].m_sName == (
"EEG"))
278 showEEG = p_qListModalities[i].m_bActive;
279 fMaxEEG = p_qListModalities[i].m_fNorm;
282 if(p_qListModalities[i].m_sName == (
"EOG"))
284 showEOG = p_qListModalities[i].m_bActive;
285 fMaxEOG = p_qListModalities[i].m_fNorm;
288 if(p_qListModalities[i].m_sName == (
"MISC"))
290 showMISC = p_qListModalities[i].m_bActive;
291 fMaxMISC = p_qListModalities[i].m_fNorm;
301 void RealTimeButterflyPlot::setSelectedChannels(
const QList<int> &selectedChannels)
303 m_lSelectedChannels = selectedChannels;
QVariant data(int row, int column, int role=Qt::DisplayRole) const
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
fiff_int_t getKind(qint32 row) const
QColor getColor(qint32 row) const
fiff_int_t getUnit(qint32 row) const
qint32 getNumPreStimSamples() const
virtual void paintEvent(QPaintEvent *event)