v2.0.0
Loading...
Searching...
No Matches
rt_data_client.cpp
Go to the documentation of this file.
1//=============================================================================================================
21
22//=============================================================================================================
23// INCLUDES
24//=============================================================================================================
25
26#include "rt_data_client.h"
27#include <fiff/fiff_file.h>
28
29//=============================================================================================================
30// USED NAMESPACES
31//=============================================================================================================
32
33using namespace COMLIB;
34using namespace FIFFLIB;
35using namespace Eigen;
36
37//=============================================================================================================
38// DEFINE MEMBER METHODS
39//=============================================================================================================
40
42: QTcpSocket(parent)
43, m_clientID(-1)
44{
46}
47
48//=============================================================================================================
49
51{
52 QTcpSocket::disconnectFromHost();
53 m_clientID = -1;
54}
55
56//=============================================================================================================
57
59{
60 if (m_clientID == -1) {
61 // sendFiffCommand(1);//MNE_RT.MNE_RT_GET_CLIENT_ID)
62
63 FiffStream t_fiffStream(this);
64
65 QString t_sCommand("");
66 t_fiffStream.write_rt_command(1, t_sCommand);
67
68 this->waitForReadyRead(100);
69 // ID is send as answer
70 FiffTag::UPtr t_pTag;
71 t_fiffStream.read_tag(t_pTag);
72 if (t_pTag->kind == FIFF_MNE_RT_CLIENT_ID)
73 m_clientID = *t_pTag->toInt();
74 }
75 return m_clientID;
76}
77
78//=============================================================================================================
79
81{
82 FiffInfo::SPtr p_pFiffInfo(new FiffInfo());
83 bool t_bReadMeasBlockStart = false;
84 bool t_bReadMeasBlockEnd = false;
85 QString col_names, row_names;
86
87 FiffStream t_fiffStream(this);
88 //
89 // Find the start
90 //
91 FiffTag::UPtr t_pTag;
92 while (!t_bReadMeasBlockStart) {
93 t_fiffStream.read_rt_tag(t_pTag);
94 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MEAS_INFO) {
95 qInfo("FIFF_BLOCK_START FIFFB_MEAS_INFO");
96 t_bReadMeasBlockStart = true;
97 }
98 }
99
100 //
101 // Parse until the endblock
102 //
103
104 bool dev_head_t_read = false;
105 bool ctf_head_t_read = false;
106
107 while (!t_bReadMeasBlockEnd) {
108 t_fiffStream.read_rt_tag(t_pTag);
109 //
110 // megacq parameters
111 //
112 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_DACQ_PARS) {
113 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_DACQ_PARS) {
114 t_fiffStream.read_rt_tag(t_pTag);
115 if (t_pTag->kind == FIFF_DACQ_PARS)
116 p_pFiffInfo->acq_pars = t_pTag->toString();
117 else if (t_pTag->kind == FIFF_DACQ_STIM)
118 p_pFiffInfo->acq_stim = t_pTag->toString();
119 }
120 }
121 //
122 // Coordinate transformations if the HPI result block was not there
123 //
124 if (t_pTag->kind == FIFF_COORD_TRANS) {
125 if (!dev_head_t_read) {
126 p_pFiffInfo->dev_head_t = t_pTag->toCoordTrans();
127 dev_head_t_read = true;
128 } else if (!ctf_head_t_read) {
129 p_pFiffInfo->ctf_head_t = t_pTag->toCoordTrans();
130 ctf_head_t_read = true;
131 }
132 }
133 //
134 // Polhemus data
135 //
136 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_ISOTRAK) {
137 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_ISOTRAK) {
138 t_fiffStream.read_rt_tag(t_pTag);
139
140 if (t_pTag->kind == FIFF_DIG_POINT)
141 p_pFiffInfo->dig.append(t_pTag->toDigPoint());
142 }
143 }
144 //
145 // Projectors
146 //
147 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_PROJ) {
148 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_PROJ) {
149 t_fiffStream.read_rt_tag(t_pTag);
150 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_PROJ_ITEM) {
151 FiffProj proj;
152 qint32 countProj = p_pFiffInfo->projs.size();
153 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_PROJ_ITEM) {
154 t_fiffStream.read_rt_tag(t_pTag);
155 switch (t_pTag->kind) {
156 case FIFF_NAME: // First proj -> Proj is created
157 proj = FiffProj();
158 p_pFiffInfo->projs.append(proj);
159 p_pFiffInfo->projs[countProj].desc = t_pTag->toString();
160 break;
162 p_pFiffInfo->projs[countProj].kind = *(t_pTag->toInt());
163 break;
164 case FIFF_NCHAN: // First data -> FiffNamedMatrix is created
165 p_pFiffInfo->projs[countProj].data->ncol = *(t_pTag->toInt());
166 break;
168 p_pFiffInfo->projs[countProj].data->nrow = *(t_pTag->toInt());
169 break;
171 p_pFiffInfo->projs[countProj].active = *(t_pTag->toInt());
172 break;
174 p_pFiffInfo->projs[countProj].data->col_names = FiffStream::split_name_list(t_pTag->toString());
175 break;
177 //ToDo: Test; Float Matrix
178 p_pFiffInfo->projs[countProj].data->data = t_pTag->toFloatMatrix().transpose().cast<double>();
179 break;
180 }
181 }
182 }
183 }
184 }
185 // Check consisty
186 for (qint32 i = 0; i < p_pFiffInfo->projs.size(); ++i) {
187 if (p_pFiffInfo->projs[i].data->data.rows() != p_pFiffInfo->projs[i].data->nrow)
188 p_pFiffInfo->projs[i].data->data.transposeInPlace();
189 }
190
191 //
192 // CTF compensation info
193 //
194 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MNE_CTF_COMP) {
195 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_MNE_CTF_COMP) {
196 t_fiffStream.read_rt_tag(t_pTag);
197 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MNE_CTF_COMP_DATA) {
198 FiffCtfComp comp;
199 qint32 countComp = p_pFiffInfo->comps.size();
200 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_MNE_CTF_COMP_DATA) {
201 t_fiffStream.read_rt_tag(t_pTag);
202 switch (t_pTag->kind) {
203 case FIFF_MNE_CTF_COMP_KIND: //First comp -> create comp
204 comp = FiffCtfComp();
205 p_pFiffInfo->comps.append(comp);
206 p_pFiffInfo->comps[countComp].ctfkind = *(t_pTag->toInt());
207
208 if (p_pFiffInfo->comps[countComp].ctfkind == 1194410578) //hex2dec('47314252')
209 p_pFiffInfo->comps[countComp].kind = 1;
210 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194476114) //hex2dec('47324252')
211 p_pFiffInfo->comps[countComp].kind = 2;
212 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194541650) //hex2dec('47334252')
213 p_pFiffInfo->comps[countComp].kind = 3;
214 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194479433)
215 p_pFiffInfo->comps[countComp].kind = 4;
216 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194544969)
217 p_pFiffInfo->comps[countComp].kind = 5;
218 else
219 p_pFiffInfo->comps[countComp].kind = p_pFiffInfo->comps[countComp].ctfkind;
220 break;
222 p_pFiffInfo->comps[countComp].save_calibrated = *(t_pTag->toInt());
223 break;
224 case FIFF_MNE_NROW:
225 p_pFiffInfo->comps[countComp].data->nrow = *(t_pTag->toInt());
226 break;
227 case FIFF_MNE_NCOL:
228 p_pFiffInfo->comps[countComp].data->ncol = *(t_pTag->toInt());
229 break;
231 row_names = t_pTag->toString();
232 if (!row_names.isEmpty())
233 p_pFiffInfo->comps[countComp].data->row_names = FiffStream::split_name_list(row_names);
234 break;
236 col_names = t_pTag->toString();
237 if (!col_names.isEmpty())
238 p_pFiffInfo->comps[countComp].data->col_names = FiffStream::split_name_list(col_names);
239 break;
241 //ToDo: Test; Float Matrix
242 p_pFiffInfo->comps[countComp].data->data = t_pTag->toFloatMatrix().transpose().cast<double>();
243 break;
244 }
245 }
246 }
247 }
248 }
249 //
250 // Bad channels
251 //
252 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MNE_BAD_CHANNELS) {
253 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_MNE_BAD_CHANNELS) {
254 t_fiffStream.read_rt_tag(t_pTag);
255 if (t_pTag->kind == FIFF_MNE_CH_NAME_LIST)
256 p_pFiffInfo->bads = FiffStream::split_name_list(t_pTag->data());
257 }
258 }
259 //
260 // General
261 //
262 switch (t_pTag->kind) {
263 case FIFF_SFREQ:
264 p_pFiffInfo->sfreq = *(t_pTag->toFloat());
265 break;
266 case FIFF_LINE_FREQ:
267 p_pFiffInfo->linefreq = *(t_pTag->toFloat());
268 break;
269 case FIFF_HIGHPASS:
270 p_pFiffInfo->highpass = *(t_pTag->toFloat());
271 break;
272 case FIFF_LOWPASS:
273 p_pFiffInfo->lowpass = *(t_pTag->toFloat());
274 break;
275 case FIFF_NCHAN:
276 p_pFiffInfo->nchan = *(t_pTag->toInt());
277 break;
278 case FIFF_MEAS_DATE:
279 p_pFiffInfo->meas_date[0] = t_pTag->toInt()[0];
280 p_pFiffInfo->meas_date[1] = t_pTag->toInt()[1];
281 break;
282 case FIFF_PROJ_ID:
283 p_pFiffInfo->proj_id = *t_pTag->toInt();
284 break;
285 case FIFF_PROJ_NAME:
286 p_pFiffInfo->proj_name = t_pTag->toString();
287 break;
289 p_pFiffInfo->xplotter_layout = t_pTag->toString();
290 break;
292 p_pFiffInfo->experimenter = t_pTag->toString();
293 break;
294 case FIFF_DESCRIPTION:
295 p_pFiffInfo->description = t_pTag->toString();
296 break;
298 p_pFiffInfo->gantry_angle = *t_pTag->toInt();
299 break;
300 case FIFF_UTC_OFFSET:
301 p_pFiffInfo->utc_offset = t_pTag->toString();
302 break;
303 }
304
305 if (t_pTag->kind == FIFF_CH_INFO)
306 p_pFiffInfo->chs.append(t_pTag->toChInfo());
307
308 // END MEAS
309 if (t_pTag->kind == FIFF_BLOCK_END && *t_pTag->toInt() == FIFFB_MEAS_INFO) {
310 qInfo("FIFF_BLOCK_END FIFFB_MEAS_INFO");
311 t_bReadMeasBlockEnd = true;
312 }
313 }
314
315 //
316 // Add the channel information and make a list of channel names
317 // for convenience
318 //
319 for (qint32 c = 0; c < p_pFiffInfo->nchan; ++c)
320 p_pFiffInfo->ch_names << p_pFiffInfo->chs[c].ch_name;
321
322 return p_pFiffInfo;
323}
324
325//=============================================================================================================
326
328{
330 FiffInfo::SPtr p_pFiffInfo(new FiffInfo());
331
332 bool t_bReadMeasBlockStart = false;
333 bool t_bReadMeasBlockEnd = false;
334 QString col_names, row_names;
335
336 FiffStream t_fiffStream(this);
337 //
338 // Find the start
339 //
340 FiffTag::UPtr t_pTag;
341 while (!t_bReadMeasBlockStart) {
342 t_fiffStream.read_rt_tag(t_pTag);
343 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MEAS_INFO) {
344 qInfo("FIFF_BLOCK_START FIFFB_MEAS_INFO");
345 t_bReadMeasBlockStart = true;
346 }
347 }
348
349 //
350 // Parse until the endblock
351 //
352
353 bool dev_head_t_read = false;
354 bool ctf_head_t_read = false;
355
356 while (!t_bReadMeasBlockEnd) {
357 t_fiffStream.read_rt_tag(t_pTag);
358 //
359 // megacq parameters
360 //
361 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_DACQ_PARS) {
362 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_DACQ_PARS) {
363 t_fiffStream.read_rt_tag(t_pTag);
364 if (t_pTag->kind == FIFF_DACQ_PARS)
365 p_pFiffInfo->acq_pars = t_pTag->toString();
366 else if (t_pTag->kind == FIFF_DACQ_STIM)
367 p_pFiffInfo->acq_stim = t_pTag->toString();
368 }
369 }
370 //
371 // Coordinate transformations if the HPI result block was not there
372 //
373 if (t_pTag->kind == FIFF_COORD_TRANS) {
374 if (!dev_head_t_read) {
375 p_pFiffInfo->dev_head_t = t_pTag->toCoordTrans();
376 dev_head_t_read = true;
377 } else if (!ctf_head_t_read) {
378 p_pFiffInfo->ctf_head_t = t_pTag->toCoordTrans();
379 ctf_head_t_read = true;
380 }
381 }
382 //
383 // Polhemus data
384 //
385 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_ISOTRAK) {
386 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_ISOTRAK) {
387 t_fiffStream.read_rt_tag(t_pTag);
388
389 if (t_pTag->kind == FIFF_DIG_POINT) {
390 p_pFiffInfo->dig.append(t_pTag->toDigPoint());
391 p_pDigData->points.append(t_pTag->toDigPoint());
392 }
393 if (t_pTag->kind == FIFF_MNE_COORD_FRAME) {
394 p_pDigData->coord_frame = *t_pTag->toInt();
395 }
396 }
397 }
398 //
399 // Projectors
400 //
401 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_PROJ) {
402 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_PROJ) {
403 t_fiffStream.read_rt_tag(t_pTag);
404 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_PROJ_ITEM) {
405 FiffProj proj;
406 qint32 countProj = p_pFiffInfo->projs.size();
407 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_PROJ_ITEM) {
408 t_fiffStream.read_rt_tag(t_pTag);
409 switch (t_pTag->kind) {
410 case FIFF_NAME: // First proj -> Proj is created
411 proj = FiffProj();
412 p_pFiffInfo->projs.append(proj);
413 p_pFiffInfo->projs[countProj].desc = t_pTag->toString();
414 break;
416 p_pFiffInfo->projs[countProj].kind = *(t_pTag->toInt());
417 break;
418 case FIFF_NCHAN: // First data -> FiffNamedMatrix is created
419 p_pFiffInfo->projs[countProj].data->ncol = *(t_pTag->toInt());
420 break;
422 p_pFiffInfo->projs[countProj].data->nrow = *(t_pTag->toInt());
423 break;
425 p_pFiffInfo->projs[countProj].active = *(t_pTag->toInt());
426 break;
428 p_pFiffInfo->projs[countProj].data->col_names = FiffStream::split_name_list(t_pTag->toString());
429 break;
431 //ToDo: Test; Float Matrix
432 p_pFiffInfo->projs[countProj].data->data = t_pTag->toFloatMatrix().transpose().cast<double>();
433 break;
434 }
435 }
436 }
437 }
438 }
439 // Check consisty
440 for (qint32 i = 0; i < p_pFiffInfo->projs.size(); ++i) {
441 if (p_pFiffInfo->projs[i].data->data.rows() != p_pFiffInfo->projs[i].data->nrow)
442 p_pFiffInfo->projs[i].data->data.transposeInPlace();
443 }
444
445 //
446 // CTF compensation info
447 //
448 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MNE_CTF_COMP) {
449 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_MNE_CTF_COMP) {
450 t_fiffStream.read_rt_tag(t_pTag);
451 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MNE_CTF_COMP_DATA) {
452 FiffCtfComp comp;
453 qint32 countComp = p_pFiffInfo->comps.size();
454 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_MNE_CTF_COMP_DATA) {
455 t_fiffStream.read_rt_tag(t_pTag);
456 switch (t_pTag->kind) {
457 case FIFF_MNE_CTF_COMP_KIND: //First comp -> create comp
458 comp = FiffCtfComp();
459 p_pFiffInfo->comps.append(comp);
460 p_pFiffInfo->comps[countComp].ctfkind = *(t_pTag->toInt());
461
462 if (p_pFiffInfo->comps[countComp].ctfkind == 1194410578) //hex2dec('47314252')
463 p_pFiffInfo->comps[countComp].kind = 1;
464 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194476114) //hex2dec('47324252')
465 p_pFiffInfo->comps[countComp].kind = 2;
466 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194541650) //hex2dec('47334252')
467 p_pFiffInfo->comps[countComp].kind = 3;
468 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194479433)
469 p_pFiffInfo->comps[countComp].kind = 4;
470 else if (p_pFiffInfo->comps[countComp].ctfkind == 1194544969)
471 p_pFiffInfo->comps[countComp].kind = 5;
472 else
473 p_pFiffInfo->comps[countComp].kind = p_pFiffInfo->comps[countComp].ctfkind;
474 break;
476 p_pFiffInfo->comps[countComp].save_calibrated = *(t_pTag->toInt());
477 break;
478 case FIFF_MNE_NROW:
479 p_pFiffInfo->comps[countComp].data->nrow = *(t_pTag->toInt());
480 break;
481 case FIFF_MNE_NCOL:
482 p_pFiffInfo->comps[countComp].data->ncol = *(t_pTag->toInt());
483 break;
485 row_names = t_pTag->toString();
486 if (!row_names.isEmpty())
487 p_pFiffInfo->comps[countComp].data->row_names = FiffStream::split_name_list(row_names);
488 break;
490 col_names = t_pTag->toString();
491 if (!col_names.isEmpty())
492 p_pFiffInfo->comps[countComp].data->col_names = FiffStream::split_name_list(col_names);
493 break;
495 //ToDo: Test; Float Matrix
496 p_pFiffInfo->comps[countComp].data->data = t_pTag->toFloatMatrix().transpose().cast<double>();
497 break;
498 }
499 }
500 }
501 }
502 }
503 //
504 // Bad channels
505 //
506 if (t_pTag->kind == FIFF_BLOCK_START && *(t_pTag->toInt()) == FIFFB_MNE_BAD_CHANNELS) {
507 while (t_pTag->kind != FIFF_BLOCK_END || *(t_pTag->toInt()) != FIFFB_MNE_BAD_CHANNELS) {
508 t_fiffStream.read_rt_tag(t_pTag);
509 if (t_pTag->kind == FIFF_MNE_CH_NAME_LIST)
510 p_pFiffInfo->bads = FiffStream::split_name_list(t_pTag->data());
511 }
512 }
513 //
514 // General
515 //
516 switch (t_pTag->kind) {
517 case FIFF_SFREQ:
518 p_pFiffInfo->sfreq = *(t_pTag->toFloat());
519 break;
520 case FIFF_LINE_FREQ:
521 p_pFiffInfo->linefreq = *(t_pTag->toFloat());
522 break;
523 case FIFF_HIGHPASS:
524 p_pFiffInfo->highpass = *(t_pTag->toFloat());
525 break;
526 case FIFF_LOWPASS:
527 p_pFiffInfo->lowpass = *(t_pTag->toFloat());
528 break;
529 case FIFF_NCHAN:
530 p_pFiffInfo->nchan = *(t_pTag->toInt());
531 break;
532 case FIFF_MEAS_DATE:
533 p_pFiffInfo->meas_date[0] = t_pTag->toInt()[0];
534 p_pFiffInfo->meas_date[1] = t_pTag->toInt()[1];
535 break;
536 case FIFF_PROJ_ID:
537 p_pFiffInfo->proj_id = *t_pTag->toInt();
538 break;
539 case FIFF_PROJ_NAME:
540 p_pFiffInfo->proj_name = t_pTag->toString();
541 break;
543 p_pFiffInfo->xplotter_layout = t_pTag->toString();
544 break;
546 p_pFiffInfo->experimenter = t_pTag->toString();
547 break;
548 case FIFF_DESCRIPTION:
549 p_pFiffInfo->description = t_pTag->toString();
550 break;
552 p_pFiffInfo->gantry_angle = *t_pTag->toInt();
553 break;
554 case FIFF_UTC_OFFSET:
555 p_pFiffInfo->utc_offset = t_pTag->toString();
556 break;
557 }
558
559 if (t_pTag->kind == FIFF_CH_INFO)
560 p_pFiffInfo->chs.append(t_pTag->toChInfo());
561
562 // END MEAS
563 if (t_pTag->kind == FIFF_BLOCK_END && *t_pTag->toInt() == FIFFB_MEAS_INFO) {
564 qInfo("FIFF_BLOCK_END FIFFB_MEAS_INFO");
565 t_bReadMeasBlockEnd = true;
566 }
567 }
568
569 //
570 // Add the channel information and make a list of channel names
571 // for convenience
572 //
573 for (qint32 c = 0; c < p_pFiffInfo->nchan; ++c)
574 p_pFiffInfo->ch_names << p_pFiffInfo->chs[c].ch_name;
575
576 p_pDigData->npoint = p_pDigData->points.size();
577
578 for (int k = 0; k < p_pDigData->npoint; k++) {
579 p_pDigData->active.append(1);
580 p_pDigData->discard.append(0);
581 }
582
583 return MetaData(p_pFiffInfo, p_pDigData);
584}
585
586//=============================================================================================================
587
588void RtDataClient::readRawBuffer(qint32 p_nChannels,
589 MatrixXf& data,
590 fiff_int_t& kind)
591{
592 FiffStream t_fiffStream(this);
593 //
594 // Find the start
595 //
596 FiffTag::UPtr t_pTag;
597
598 t_fiffStream.read_rt_tag(t_pTag);
599
600 kind = t_pTag->kind;
601
602 if (kind == FIFF_DATA_BUFFER) {
603 qint32 nSamples = (t_pTag->size() / 4) / p_nChannels;
604 data = MatrixXf(Map<const MatrixXf>(t_pTag->toFloat(), p_nChannels, nSamples));
605 }
606 // else
607 // data = tag.data;
608}
609
610//=============================================================================================================
611
612void RtDataClient::setClientAlias(const QString& p_sAlias)
613{
614 FiffStream t_fiffStream(this);
615 t_fiffStream.write_rt_command(2, p_sAlias); //MNE_RT.MNE_RT_SET_CLIENT_ALIAS, alias);
616 this->flush();
617}
TCP client for the mne_rt_server raw-data port (4218): pulls FiffInfo, digitizer points and streamed ...
#define FIFF_MNE_COORD_FRAME
#define FIFF_MNE_CTF_COMP_KIND
#define FIFFB_MNE_CTF_COMP_DATA
#define FIFF_MNE_CTF_COMP_CALIBRATED
#define FIFF_MNE_ROW_NAMES
#define FIFF_MNE_PROJ_ITEM_ACTIVE
#define FIFF_MNE_RT_CLIENT_ID
#define FIFF_MNE_COL_NAMES
#define FIFF_MNE_CTF_COMP_DATA
#define FIFF_MNE_CH_NAME_LIST
#define FIFF_MNE_NCOL
#define FIFFB_MNE_CTF_COMP
#define FIFF_MNE_NROW
#define FIFFB_MNE_BAD_CHANNELS
FIFF tag-kind, block-kind and type-code numerical definitions, authoritative for FIFFLIB.
#define FIFF_DATA_BUFFER
Definition fiff_file.h:549
#define FIFF_GANTRY_ANGLE
Definition fiff_file.h:548
#define FIFF_DACQ_STIM
Definition fiff_file.h:344
#define FIFFB_PROJ
Definition fiff_file.h:402
#define FIFF_NCHAN
Definition fiff_file.h:446
#define FIFF_BLOCK_END
Definition fiff_file.h:321
#define FIFF_XPLOTTER_LAYOUT
Definition fiff_file.h:830
#define FIFF_PROJ_ID
Definition fiff_file.h:568
#define FIFFB_ISOTRAK
Definition fiff_file.h:363
#define FIFF_HIGHPASS
Definition fiff_file.h:469
#define FIFF_EXPERIMENTER
Definition fiff_file.h:458
#define FIFF_BLOCK_START
Definition fiff_file.h:320
#define FIFF_PROJ_NAME
Definition fiff_file.h:569
#define FIFF_NAME
Definition fiff_file.h:478
#define FIFF_DESCRIPTION
Definition fiff_file.h:479
#define FIFF_LINE_FREQ
Definition fiff_file.h:482
#define FIFF_UTC_OFFSET
Definition fiff_file.h:444
#define FIFFB_PROJ_ITEM
Definition fiff_file.h:403
#define FIFFB_DACQ_PARS
Definition fiff_file.h:372
#define FIFF_PROJ_ITEM_VECTORS
Definition fiff_file.h:798
#define FIFF_COORD_TRANS
Definition fiff_file.h:468
#define FIFF_PROJ_ITEM_KIND
Definition fiff_file.h:793
#define FIFF_DACQ_PARS
Definition fiff_file.h:343
#define FIFF_MEAS_DATE
Definition fiff_file.h:450
#define FIFF_CH_INFO
Definition fiff_file.h:449
#define FIFF_PROJ_ITEM_CH_NAME_LIST
Definition fiff_file.h:802
#define FIFF_DIG_POINT
Definition fiff_file.h:459
#define FIFF_LOWPASS
Definition fiff_file.h:465
#define FIFFB_MEAS_INFO
Definition fiff_file.h:356
#define FIFF_PROJ_ITEM_NVEC
Definition fiff_file.h:797
#define FIFF_SFREQ
Definition fiff_file.h:447
Real-time client/server communication primitives for talking to mne_rt_server.
FIFF file I/O, in-memory data structures and high-level readers/writers.
qint32 fiff_int_t
Definition fiff_types.h:86
Value-type aggregate of the FIFF metadata blocks mne_rt_server sends at the start of a measurement.
void setClientAlias(const QString &p_sAlias)
void readRawBuffer(qint32 p_nChannels, Eigen::MatrixXf &data, FIFFLIB::fiff_int_t &kind)
RtDataClient(QObject *parent=nullptr)
FIFFLIB::FiffInfo::SPtr readInfo()
virtual void disconnectFromHost()
One CTF software-gradient compensation matrix: grade kind, calibration flag and the gradiometer × ref...
Registration-ready digitization data: dig points, device→head transform and HPI fit metadata.
QSharedPointer< FiffDigitizerData > SPtr
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...
Definition fiff_info.h:90
QSharedPointer< FiffInfo > SPtr
Definition fiff_info.h:92
Single SSP projection item: kind, active flag, desired flag and the named projection vector matrix.
Definition fiff_proj.h:81
FIFF tag-stream reader/writer: wraps a QIODevice and exposes typed read_* / write_* methods for every...
bool read_rt_tag(std::unique_ptr< FiffTag > &p_pTag)
void write_rt_command(fiff_int_t command, const QString &data)
static QStringList split_name_list(QString p_sNameList)
bool read_tag(std::unique_ptr< FiffTag > &p_pTag, fiff_long_t pos=-1)
std::unique_ptr< FiffTag > UPtr
Definition fiff_tag.h:165