41 #include "../common/metatreeitem.h" 42 #include "../../workers/rtSensorData/rtsensordatacontroller.h" 43 #include "../common/gpuinterpolationitem.h" 44 #include "../common/abstractmeshtreeitem.h" 45 #include "../../3dhelpers/custommesh.h" 46 #include "../../materials/pervertexphongalphamaterial.h" 55 #include <QGeometryRenderer> 56 #include <Qt3DCore/QTransform> 68 using namespace Eigen;
81 SensorDataTreeItem::SensorDataTreeItem(
int iType,
85 , m_bIsDataInit(false)
103 const QString &sSensorType,
104 Qt3DCore::QEntity* p3DEntityParent)
107 qDebug(
"SensorDataTreeItem::initData - Item is already initialized");
110 this->
setData(0, Data3DTreeModelItemRoles::Data);
113 fiff_int_t sensorTypeFiffConstant;
114 if (sSensorType.toStdString() ==
"MEG") {
115 sensorTypeFiffConstant = FIFFV_MEG_CH;
116 }
else if (sSensorType.toStdString() ==
"EEG") {
117 sensorTypeFiffConstant = FIFFV_EEG_CH;
119 qDebug() <<
"SensorDataTreeItem::initData - unknown sensor type. Returning ...";
125 QVector<Vector3f> vecSensorPos;
129 if(info.
kind == sensorTypeFiffConstant &&
130 (info.
unit == FIFF_UNIT_T || info.
unit == FIFF_UNIT_V)) {
131 vecSensorPos.push_back(info.
chpos.
r0);
140 for(
const QString &bad : fiffInfo.
bads) {
148 Data3DTreeModelItemTypes::GpuInterpolationItem,
149 QStringLiteral(
"3D Plot"));
155 QList<QStandardItem*> list;
157 list <<
new QStandardItem(m_pInterpolationItemGPU->toolTip());
158 this->appendRow(list);
171 Data3DTreeModelItemTypes::AbstractMeshItem,
172 QStringLiteral(
"3D Plot"));
181 Qt3DRender::QGeometryRenderer::Triangles);
183 QList<QStandardItem*> list;
185 list <<
new QStandardItem(m_pInterpolationItemCPU->toolTip());
186 this->appendRow(list);
190 m_pInterpolationItemCPU->setMaterial(pBemMaterial);
202 sensorTypeFiffConstant);
213 qDebug() <<
"SensorDataTreeItem::addData - item has not been initialized yet!";
219 if(tSensorData.rows() > iSensorSize)
221 MatrixXd dSmallSensorData(iSensorSize, tSensorData.cols());
222 for(
int i = 0 ; i < iSensorSize; ++i)
226 dSmallSensorData.row(i).setZero();
233 data.setValue(dSmallSensorData);
234 this->
setData(data, Data3DTreeModelItemRoles::Data);
242 MatrixXd dSmallSensorData = tSensorData;
243 for(
int i = 0 ; i < dSmallSensorData.rows(); ++i)
246 dSmallSensorData.row(i).setZero();
252 data.setValue(dSmallSensorData);
253 this->
setData(data, Data3DTreeModelItemRoles::Data);
264 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::LoopedStreaming);
266 for(
int i = 0; i < lItems.size(); i++) {
267 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
268 pAbstractItem->setCheckState(bState ==
true ? Qt::Checked : Qt::Unchecked);
270 data.setValue(bState);
271 pAbstractItem->setData(data, MetaTreeItemRoles::LoopedStreaming);
280 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::StreamStatus);
282 for(
int i = 0; i < lItems.size(); i++) {
283 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
284 pAbstractItem->setCheckState(bState ==
true ? Qt::Checked : Qt::Unchecked);
286 data.setValue(bState);
287 pAbstractItem->setData(data, MetaTreeItemRoles::StreamStatus);
296 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::StreamingTimeInterval);
298 for(
int i = 0; i < lItems.size(); i++) {
299 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
301 data.setValue(iMSec);
302 pAbstractItem->setData(data, MetaTreeItemRoles::StreamingTimeInterval);
303 pAbstractItem->setData(data, Qt::DisplayRole);
312 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::NumberAverages);
314 for(
int i = 0; i < lItems.size(); i++) {
315 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
317 data.setValue(iNumberAverages);
318 pAbstractItem->setData(data, MetaTreeItemRoles::NumberAverages);
319 pAbstractItem->setData(data, Qt::DisplayRole);
328 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::ColormapType);
330 for(
int i = 0; i < lItems.size(); i++) {
331 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
333 data.setValue(sColormap);
334 pAbstractItem->setData(data, MetaTreeItemRoles::ColormapType);
335 pAbstractItem->setData(data, Qt::DisplayRole);
344 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::DataThreshold);
346 for(
int i = 0; i < lItems.size(); i++) {
347 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
349 data.setValue(vecThresholds);
350 pAbstractItem->setData(data, MetaTreeItemRoles::DataThreshold);
352 QString sTemp = QString(
"%1,%2,%3").arg(vecThresholds.x()).arg(vecThresholds.y()).arg(vecThresholds.z());
353 data.setValue(sTemp);
354 pAbstractItem->setData(data, Qt::DisplayRole);
363 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::CancelDistance);
365 for(
int i = 0; i < lItems.size(); i++) {
366 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
368 data.setValue(dCancelDist);
369 pAbstractItem->setData(data, MetaTreeItemRoles::CancelDistance);
370 pAbstractItem->setData(data, Qt::DisplayRole);
379 QList<QStandardItem*> lItems = this->
findChildren(MetaTreeItemTypes::InterpolationFunction);
381 for(
int i = 0; i < lItems.size(); i++) {
382 if(
MetaTreeItem* pAbstractItem = dynamic_cast<MetaTreeItem*>(lItems.at(i))) {
384 data.setValue(sInterpolationFunction);
385 pAbstractItem->setData(data, MetaTreeItemRoles::InterpolationFunction);
386 pAbstractItem->setData(data, Qt::DisplayRole);
407 for(
const QString &bad : info.
bads) {
472 this->setEditable(
false);
473 this->setCheckable(
true);
474 this->setCheckState(Qt::Checked);
475 this->setToolTip(
"Sensor Data item");
478 QList<QStandardItem*> list;
482 list << pItemStreamStatus;
483 list <<
new QStandardItem(pItemStreamStatus->toolTip());
484 this->appendRow(list);
485 pItemStreamStatus->setCheckable(
true);
486 pItemStreamStatus->setEditable(
false);
487 pItemStreamStatus->setCheckState(Qt::Unchecked);
491 data.setValue(
false);
492 pItemStreamStatus->setData(data, MetaTreeItemRoles::StreamStatus);
496 list << pItemColormapType;
497 list <<
new QStandardItem(pItemColormapType->toolTip());
498 this->appendRow(list);
499 data.setValue(QString(
"Hot"));
500 pItemColormapType->setData(data, MetaTreeItemRoles::ColormapType);
506 list << pItemThreshold;
507 list <<
new QStandardItem(pItemThreshold->toolTip());
508 this->appendRow(list);
509 data.setValue(QVector3D(0.0,5.5,15));
510 pItemThreshold->setData(data, MetaTreeItemRoles::DataThreshold);
516 list << pItemStreamingInterval;
517 list <<
new QStandardItem(pItemStreamingInterval->toolTip());
518 this->appendRow(list);
520 pItemStreamingInterval->setData(data, MetaTreeItemRoles::StreamingTimeInterval);
525 pItemLoopedStreaming->setCheckable(
true);
526 pItemLoopedStreaming->setCheckState(Qt::Checked);
528 list << pItemLoopedStreaming;
529 list <<
new QStandardItem(pItemLoopedStreaming->toolTip());
530 this->appendRow(list);
536 list << pItemAveragedStreaming;
537 list <<
new QStandardItem(pItemAveragedStreaming->toolTip());
538 this->appendRow(list);
540 pItemAveragedStreaming->setData(data, MetaTreeItemRoles::NumberAverages);
546 list << pItemCancelDistance;
547 list <<
new QStandardItem(pItemCancelDistance->toolTip());
548 this->appendRow(list);
550 pItemCancelDistance->setData(data, MetaTreeItemRoles::CancelDistance);
556 list << pInterpolationFunction;
557 list <<
new QStandardItem(pInterpolationFunction->toolTip());
558 this->appendRow(list);
559 data.setValue(QString(
"Cubic"));
560 pInterpolationFunction->setData(data, MetaTreeItemRoles::InterpolationFunction);
600 if(checkState == Qt::Checked) {
602 }
else if(checkState == Qt::Unchecked) {
612 if(sColormapType.canConvert<QString>()) {
629 if(iMSec.canConvert<
int>()) {
640 if(vecThresholds.canConvert<QVector3D>()) {
658 if(checkState == Qt::Checked) {
660 }
else if(checkState == Qt::Unchecked) {
670 if(iNumAvr.canConvert<
int>()) {
681 if(dCancelDist.canConvert<
double>())
693 if(sInterpolationFunction.canConvert<QString>())
QList< QStandardItem * > findChildren(int type)
void checkStateChanged(const Qt::CheckState &checkState)
virtual void setSFreq(const double dSFreq)
virtual void onStreamingStateChanged(const Qt::CheckState &checkState)
virtual void onNumberAveragesChanged(const QVariant &iNumAvr)
static Eigen::MatrixX4f createVertColor(int numVert, const QColor &color=QColor(0, 49, 69))
virtual void onCancelDistanceChanged(const QVariant &dCancelDist)
FIFF measurement file information.
Provides a generic mesh tree item.
BEM surface provides geometry information.
QVector< int > m_iUsedSensors
virtual void setInterpolationFunction(const QString &sInterpolationFunction)
QPointer< AbstractMeshTreeItem > m_pInterpolationItemCPU
virtual void setBadChannels(const FIFFLIB::FiffInfo &info)
virtual void onNewRtSmoothedDataAvailable(const Eigen::MatrixX4f &matColorMatrix)
Coordinate transformation description.
virtual void applyTransform(const Qt3DCore::QTransform &transform)
virtual void setCancelDistance(double dCancelDist)
QPointer< GpuInterpolationItem > m_pInterpolationItemGPU
void dataChanged(const QVariant &data)
virtual void onNewRtRawDataAvailable(const Eigen::VectorXd &vecDataVector)
virtual void initItem() override
void setData(const QVariant &value, int role=Qt::UserRole+1)
This controller organizes data streaming and interpolation matrix calculations. It only uses Queued s...
This item is used for signal interpolation with GPU support.
MNEBem class declaration.
PerVertexPhongAlphaMaterial is provides a Qt3D material with own shader support.
virtual void setNumberAverages(int iNumberAverages)
virtual void initData(const MNELIB::MNEBemSurface &tBemSurface, const FIFFLIB::FiffInfo &tFiffInfo, const QString &sSensorType, Qt3DCore::QEntity *p3DEntityParent)
virtual void onColormapTypeChanged(const QVariant &sColormapType)
virtual void onNewInterpolationMatrixAvailable(QSharedPointer< Eigen::SparseMatrix< float > > pMatInterpolationMatrixLeftHemi)
Provides the basic tree item.
virtual void setTimeInterval(int iMSec)
virtual void setStreamingState(bool bState)
QVector< QVector< int > > neighbor_vert
virtual void setTransform(const Qt3DCore::QTransform &transform)
void newRtSmoothedDataAvailable(const Eigen::MatrixX4f &matColorMatrix)
virtual void setLoopState(bool bState)
Provides a generic brain tree item.
virtual void onLoopStateChanged(const Qt::CheckState &checkState)
QPointer< RtSensorDataController > m_pSensorRtDataWorkController
virtual void onTimeIntervalChanged(const QVariant &iMSec)
virtual void onDataThresholdChanged(const QVariant &vecThresholds)
virtual void addData(const Eigen::MatrixXd &tSensorData)
void newRtRawDataAvailable(const Eigen::VectorXd &vecDataVector)
virtual void onInterpolationFunctionChanged(const QVariant &sInterpolationFunction)
void newInterpolationMatrixAvailable(QSharedPointer< Eigen::SparseMatrix< float > > pMatInterpolationMatrix)
virtual ~SensorDataTreeItem()
QVector< int > m_iSensorsBad
virtual void setColormapType(const QString &sColormap)
virtual void setThresholds(const QVector3D &vecThresholds)