MNE-CPP  beta 1.0
newrealtimemultisamplearray.cpp
1 //=============================================================================================================
36 //*************************************************************************************************************
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
42 
43 #include <iostream>
44 
45 
46 //*************************************************************************************************************
47 //=============================================================================================================
48 // QT INCLUDES
49 //=============================================================================================================
50 
51 
52 //*************************************************************************************************************
53 //=============================================================================================================
54 // USED NAMESPACES
55 //=============================================================================================================
56 
57 using namespace XMEASLIB;
58 
59 
60 //*************************************************************************************************************
61 //=============================================================================================================
62 // DEFINE MEMBER METHODS
63 //=============================================================================================================
64 
66 : NewMeasurement(QMetaType::type("NewRealTimeMultiSampleArray::SPtr"), parent)
67 , m_dSamplingRate(0)
68 , m_iMultiArraySize(10)
69 , m_bChInfoIsInit(false)
70 {
71 }
72 
73 
74 //*************************************************************************************************************
75 
77 {
78 
79 }
80 
81 
82 //*************************************************************************************************************
83 
84 void NewRealTimeMultiSampleArray::init(QList<RealTimeSampleArrayChInfo> &chInfo)
85 {
86  QMutexLocker locker(&m_qMutex);
87  m_qListChInfo = chInfo;
88 
89  m_bChInfoIsInit = true;
90 
91 // m_qListChInfo.clear();
92 // for(quint32 i = 0; i < uiNumChannels; ++i)
93 // {
94 // RealTimeSampleArrayChInfo initChInfo;
95 // QString string;
96 // initChInfo.setChannelName(string.number(i+1));
97 // m_qListChInfo.append(initChInfo);
98 // }
99 }
100 
101 
102 //*************************************************************************************************************
103 
105 {
106  QMutexLocker locker(&m_qMutex);
107  m_qListChInfo.clear();
108  m_bChInfoIsInit = false;
109 
110  bool t_bIsBabyMEG = false;
111 
112  if(p_pFiffInfo->acq_pars == "BabyMEG")
113  t_bIsBabyMEG = true;
114 
115  for(qint32 i = 0; i < p_pFiffInfo->nchan; ++i)
116  {
117  RealTimeSampleArrayChInfo initChInfo;
118  initChInfo.setChannelName(p_pFiffInfo->chs[i].ch_name);
119 
120  // set channel Unit
121  initChInfo.setUnit(p_pFiffInfo->chs[i].unit);
122 
123  //Treat stimulus channels different
124  if(p_pFiffInfo->chs[i].kind == FIFFV_STIM_CH)
125  {
126 // initChInfo.setUnit("");
127  initChInfo.setMinValue(0);
128  initChInfo.setMaxValue(1.0e6);
129  }
130 // else
131 // {
133 
134 // //Unit
135 // switch(p_pFiffInfo->chs[i].unit)
136 // {
137 // case 101:
138 // initChInfo.setUnit("Hz");
139 // break;
140 // case 102:
141 // initChInfo.setUnit("N");
142 // break;
143 // case 103:
144 // initChInfo.setUnit("Pa");
145 // break;
146 // case 104:
147 // initChInfo.setUnit("J");
148 // break;
149 // case 105:
150 // initChInfo.setUnit("W");
151 // break;
152 // case 106:
153 // initChInfo.setUnit("C");
154 // break;
155 // case 107:
156 // initChInfo.setUnit("V");
159 // break;
160 // case 108:
161 // initChInfo.setUnit("F");
162 // break;
163 // case 109:
164 // initChInfo.setUnit("Ohm");
165 // break;
166 // case 110:
167 // initChInfo.setUnit("MHO");
168 // break;
169 // case 111:
170 // initChInfo.setUnit("Wb");
171 // break;
172 // case 112:
173 // initChInfo.setUnit("T");
174 // if(t_bIsBabyMEG)
175 // {
176 // initChInfo.setMinValue(-1.0e-4);
177 // initChInfo.setMaxValue(1.0e-4);
178 // }
179 // else
180 // {
181 // initChInfo.setMinValue(-1.0e-10);
182 // initChInfo.setMaxValue(1.0e-10);
183 // }
184 // break;
185 // case 113:
186 // initChInfo.setUnit("H");
187 // break;
188 // case 114:
189 // initChInfo.setUnit("Cel");
190 // break;
191 // case 115:
192 // initChInfo.setUnit("Lm");
193 // break;
194 // case 116:
195 // initChInfo.setUnit("Lx");
196 // break;
197 // case 201:
198 // initChInfo.setUnit("T/m");
199 // if(t_bIsBabyMEG)
200 // {
201 // initChInfo.setMinValue(-1.0e-4);
202 // initChInfo.setMaxValue(1.0e-4);
203 // }
204 // else
205 // {
206 // initChInfo.setMinValue(-1.0e-10);
207 // initChInfo.setMaxValue(1.0e-10);
208 // }
209 // break;
210 // case 202:
211 // initChInfo.setUnit("Am");
212 // break;
213 // default:
214 // initChInfo.setUnit("");
215 // }
216 // }
217 
218  // set channel Kind
219  initChInfo.setKind(p_pFiffInfo->chs[i].kind);
220 
221  // set channel coil
222  initChInfo.setCoil(p_pFiffInfo->chs[i].coil_type);
223 
224  m_qListChInfo.append(initChInfo);
225  }
226 
227  //Sampling rate
228  m_dSamplingRate = p_pFiffInfo->sfreq;
229 
230 
231  m_pFiffInfo_orig = p_pFiffInfo;
232 
233  m_bChInfoIsInit = true;
234 }
235 
236 
237 //*************************************************************************************************************
238 
239 void NewRealTimeMultiSampleArray::setValue(const MatrixXd& mat)
240 {
241  if(!m_bChInfoIsInit)
242  return;
243 
244  m_qMutex.lock();
245  //check vector size
246  if(mat.rows() != m_qListChInfo.size())
247  qCritical() << "Error Occured in RealTimeMultiSampleArrayNew::setVector: Vector size does not matche the number of channels! ";
248 
249  //ToDo
250 // //Check if maximum exceeded //ToDo speed this up
251 // for(qint32 i = 0; i < v.size(); ++i)
252 // {
253 // if(v[i] < m_qListChInfo[i].getMinValue()) v[i] = m_qListChInfo[i].getMinValue();
254 // else if(v[i] > m_qListChInfo[i].getMaxValue()) v[i] = m_qListChInfo[i].getMaxValue();
255 // }
256 
257  //Store
258  m_matSamples.push_back(mat);
259 
260  m_qMutex.unlock();
261  if(m_matSamples.size() >= m_iMultiArraySize)
262  {
263  emit notify();
264  m_qMutex.lock();
265  m_matSamples.clear();
266  m_qMutex.unlock();
267  }
268 }
269 
270 
271 //*************************************************************************************************************
272 
273 //void NewRealTimeMultiSampleArray::setValue(MatrixXd& v)
274 //{
275 
276 //}
Channel Info for RealTimeSampleArray.
void init(QList< RealTimeSampleArrayChInfo > &chInfo)
QSharedPointer< FiffInfo > SPtr
Definition: fiff_info.h:99
void setChannelName(QString p_qStringChName)
Contains the declaration of the NewRealTimeMultiSampleArray class.
void initFromFiffInfo(FiffInfo::SPtr &p_pFiffInfo)
QList< RealTimeSampleArrayChInfo > & chInfo()