bool MNEForwardSolution::read_one(FiffStream* p_pStream, const FiffDirTree& p_Node, MNEForwardSolution& one) { // // Read all interesting stuff for one forward solution // if(p_Node.isEmpty()) return false; one.clear(); FIFFLIB::FiffTag* t_pTag = NULL; if(!p_Node.find_tag(p_pStream, FIFF_MNE_SOURCE_ORIENTATION, t_pTag)) { p_pStream->device()->close(); std::cout << "Source orientation tag not found."; //ToDo: throw error. return false; } one.source_ori = *t_pTag->toInt(); if(!p_Node.find_tag(p_pStream, FIFF_MNE_COORD_FRAME, t_pTag)) { p_pStream->device()->close(); std::cout << "Coordinate frame tag not found."; //ToDo: throw error. return false; } one.coord_frame = *t_pTag->toInt(); if(!p_Node.find_tag(p_pStream, FIFF_MNE_SOURCE_SPACE_NPOINTS, t_pTag)) { p_pStream->device()->close(); std::cout << "Number of sources not found."; //ToDo: throw error. return false; } one.nsource = *t_pTag->toInt(); if(!p_Node.find_tag(p_pStream, FIFF_NCHAN, t_pTag)) { p_pStream->device()->close(); printf("Number of channels not found."); //ToDo: throw error. return false; } one.nchan = *t_pTag->toInt(); if(p_pStream->read_named_matrix(p_Node, FIFF_MNE_FORWARD_SOLUTION, *one.sol.data())) one.sol->transpose_named_matrix(); else { p_pStream->device()->close(); printf("Forward solution data not found ."); //ToDo: throw error. //error(me,'Forward solution data not found (%s)',mne_omit_first_line(lasterr)); return false; } if(p_pStream->read_named_matrix(p_Node, FIFF_MNE_FORWARD_SOLUTION_GRAD, *one.sol_grad.data())) one.sol_grad->transpose_named_matrix(); else one.sol_grad->clear(); if (one.sol->data.rows() != one.nchan || (one.sol->data.cols() != one.nsource && one.sol->data.cols() != 3*one.nsource)) { p_pStream->device()->close(); printf("Forward solution matrix has wrong dimensions.\n"); //ToDo: throw error. //error(me,'Forward solution matrix has wrong dimensions'); return false; } if (!one.sol_grad->isEmpty()) { if (one.sol_grad->data.rows() != one.nchan || (one.sol_grad->data.cols() != 3*one.nsource && one.sol_grad->data.cols() != 3*3*one.nsource)) { p_pStream->device()->close(); printf("Forward solution gradient matrix has wrong dimensions.\n"); //ToDo: throw error. //error(me,'Forward solution gradient matrix has wrong dimensions'); } } if (t_pTag) delete t_pTag; return true; }