MNE-CPP  beta 1.0
bcifeaturewindow.cpp
Go to the documentation of this file.
1 //=============================================================================================================
37 //*************************************************************************************************************
38 //=============================================================================================================
39 // INCLUDES
40 //=============================================================================================================
41 
42 #include "bcifeaturewindow.h"
43 #include "../bci.h"
44 
45 
46 //*************************************************************************************************************
47 //=============================================================================================================
48 // USED NAMESPACES
49 //=============================================================================================================
50 
51 using namespace BCIPlugin;
52 using namespace Eigen;
53 
54 //*************************************************************************************************************
55 
56 BCIFeatureWindow::BCIFeatureWindow(BCI* pBCI, QWidget *parent)
57 : QWidget(parent)
58 , m_pBCI(pBCI)
59 {
60  ui.setupUi(this);
61 
62  qRegisterMetaType<MyQList>("MyQList");
63 
64  ui.m_graphicsView_featureVisualization->setScene(&m_scene);
65 
66  connect(m_pBCI, &BCI::paintFeatures,
67  this, &BCIFeatureWindow::paintFeaturesToScene);
68 }
69 
70 
71 //*************************************************************************************************************
72 
74 {
75 }
76 
77 
78 //*************************************************************************************************************
79 
81 {
82  m_scene.clear();
83 
84  m_dFeatureMax = m_pBCI->m_dDisplayRangeBoundary;//15;//1e-08;
85  m_dFeatureMax = 15;
86  m_iScale = 600;
87 
88  addBoundaryLineToScene();
89 }
90 
91 
92 //*************************************************************************************************************
93 void BCIFeatureWindow::addBoundaryLineToScene()
94 {
95  m_scene.addLine(0*(m_iScale/m_dFeatureMax), boundaryValue(0)*(m_iScale/m_dFeatureMax), 15*(m_iScale/m_dFeatureMax), boundaryValue(15)*(m_iScale/m_dFeatureMax));
96 
97  // Add items
98 // QGraphicsTextItem* leftElectrode = m_scene.addText(m_pBCI->m_slChosenFeatureSensor.at(0));
99 // leftElectrode->setPos(QPointF(m_iScale/2, 10));
100 // QGraphicsTextItem* rightElectrode = m_scene.addText(m_pBCI->m_slChosenFeatureSensor.at(1));
101 // rightElectrode->setPos(QPointF(10,m_iScale/2));
102 
103 // QGraphicsTextItem* leftUnit = m_scene.addText("1e-08");
104 // leftUnit->setPos(QPointF(m_iScale-100, 10));
105 // QGraphicsTextItem* rightUnit = m_scene.addText("1e-08");
106 // rightUnit->setPos(QPointF(10, m_iScale-100));
107 }
108 
109 
110 //*************************************************************************************************************
111 
112 double BCIFeatureWindow::boundaryValue(double x)
113 {
114  QVector<VectorXd> boundary = m_pBCI->m_vLoadedSensorBoundary;
115 
116  double K = boundary.at(0)(0);
117  double L1 = boundary.at(1)(0);
118  double L2 = boundary.at(1)(1);
119 
120  double y;
121 
122  y = (K+L1*x)/L2;
123 
124  return (-1*y);
125 }
126 
127 //*************************************************************************************************************
128 
129 void BCIFeatureWindow::paintFeaturesToScene(MyQList features, bool bTriggerActivated)
130 {
131 // std::cout<<"features.size()"<<features.size()<<endl;
132  if(features.first().size() == 2) // Only plot when 2D case with two electrodes
133  {
134  if(m_scene.items().size() > m_pBCI->m_iNumberFeaturesToDisplay)
135  {
136  m_scene.clear();
137  addBoundaryLineToScene();
138  }
139 
140 // // If trigger was activated during feature calculation -> change scenes brush color
141 // if(bTriggerActivated)
142 // m_scene.setBackgroundBrush(Qt::blue);
143 // else
144 // m_scene.setBackgroundBrush(Qt::white);
145 
146  for(int i = 0; i<features.size(); i++)
147  {
148  double featureA = features.at(i).at(0);
149  double featureB = features.at(i).at(1);
150 
151  if(featureA > m_dFeatureMax)
152  m_dFeatureMax = featureA;
153 
154  if(featureB > m_dFeatureMax)
155  m_dFeatureMax = featureB;
156 
157  QRectF rect(featureA*(m_iScale/m_dFeatureMax), featureB*(m_iScale/m_dFeatureMax), 5, 5);
158 
159  std::cout<<"Scaled: "<< featureA*(m_iScale/m_dFeatureMax) <<" "<< featureB*(m_iScale/m_dFeatureMax) << endl;
160  std::cout<<"Unscaled: "<< featureA <<" "<< featureB << endl;
161  //std::cout<<"m_dFeatureMax: "<< m_dFeatureMax <<endl;
162 
163  // Add ellipse to scene
164  if(bTriggerActivated)
165  m_scene.addEllipse(rect, QPen(Qt::red));
166  else
167  m_scene.addEllipse(rect, QPen(Qt::black));
168  }
169 
170  //ui.m_graphicsView_featureVisualization->fitInView(m_scene.sceneRect());
171  }
172 }
173 
BCIFeatureWindow(BCI *pBCI, QWidget *parent=0)
Definition: bci.h:75
Ui::BCIFeatureWindowClass ui
The BCI class provides an EEG BCI.
Definition: bci.h:103
Contains the declaration of the BCIAboutWidget class.