MNE-CPP  0.1.9
A Framework for Electrophysiology
selectionio.cpp
Go to the documentation of this file.
1 //=============================================================================================================
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
41 #include "selectionio.h"
42 
43 #include <iostream>
44 #include <fstream>
45 #include <sstream>
46 
47 //=============================================================================================================
48 // QT INCLUDES
49 //=============================================================================================================
50 
51 #include <QFileInfo>
52 #include <QTextStream>
53 #include <QFile>
54 #include <QDebug>
55 
56 //=============================================================================================================
57 // USED NAMESPACES
58 //=============================================================================================================
59 
60 using namespace UTILSLIB;
61 
62 //=============================================================================================================
63 // DEFINE MEMBER METHODS
64 //=============================================================================================================
65 
67 {
68 }
69 
70 //=============================================================================================================
71 
72 bool SelectionIO::readMNESelFile(QString path, QMap<QString,QStringList> &selectionMap)
73 {
74  //Open .sel file
75  if(!path.contains(".sel"))
76  return false;
77 
78  //clear the map first
79  selectionMap.clear();
80 
81  QFile file(path);
82  if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
83  qDebug()<<"Error opening selection file";
84  return false;
85  }
86 
87  //Start reading from file
88  QTextStream in(&file);
89 
90  while(!in.atEnd()) {
91  QString line = in.readLine();
92 
93  if(line.contains("%") == false && line.contains(":") == true) //Skip commented areas in file
94  {
95  QStringList firstSplit = line.split(":");
96 
97  //Create new key
98  QString key = firstSplit.at(0);
99 
100  QStringList secondSplit = firstSplit.at(1).split("|");
101 
102  //Delete last element if it is a blank character
103  if(secondSplit.at(secondSplit.size()-1) == "")
104  secondSplit.removeLast();
105 
106  //Add to map
107  selectionMap.insertMulti(key, secondSplit);
108  }
109  }
110 
111  file.close();
112 
113  return true;
114 }
115 
116 //=============================================================================================================
117 
118 bool SelectionIO::readMNESelFile(const std::string& path, std::multimap<std::string,std::vector<std::string>> &selectionMap)
119 {
120  //Open .sel file
121  if(path.find(".sel") != std::string::npos)
122  return false;
123 
124  //clear the map first
125  selectionMap.clear();
126 
127  std::ifstream inFile(path);
128  if(!inFile.is_open()){
129  qDebug()<<"Error opening selection file";
130  return false;
131  }
132 
133  std::string line;
134 
135  while(std::getline(inFile, line)){
136  if(line.find('%') == std::string::npos && line.find(':') != std::string::npos){
137  std::stringstream stream{line};
138  std::vector<std::string> firstSplit;
139  for (std::string element; std::getline(stream, line, ':');){
140  firstSplit.push_back(std::move(element));
141  }
142  std::string key = firstSplit.at(0);
143 
144  std::vector<std::string> secondSplit;
145  for (std::string element; std::getline(stream, line, '|');){
146  secondSplit.push_back(std::move(element));
147  }
148  if(secondSplit.back() == ""){
149  secondSplit.pop_back();
150  }
151  selectionMap.insert({key, secondSplit});
152  }
153  }
154 
155  return true;
156 }
157 
158 //=============================================================================================================
159 
160 bool SelectionIO::readBrainstormMonFile(QString path, QMap<QString,QStringList> &selectionMap)
161 {
162  //Open .sel file
163  if(!path.contains(".mon"))
164  return false;
165 
166  //clear the map first
167  selectionMap.clear();
168 
169  QFile file(path);
170  if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
171  qDebug()<<"Error opening montage file";
172  return false;
173  }
174 
175  //Start reading from file
176  QTextStream in(&file);
177  QString groupName = in.readLine();
178  QStringList channels;
179 
180  while(!in.atEnd()) {
181  QString line = in.readLine();
182 
183  if(line.contains(":") == true) {
184  QStringList secondSplit = line.split(":");
185  QString key = secondSplit.at(0);
186  channels.append(key);
187  }
188  }
189 
190  //Add to map
191  selectionMap.insertMulti(groupName, channels);
192 
193  file.close();
194 
195  return true;
196 }
197 
198 //=============================================================================================================
199 
200 bool SelectionIO::readBrainstormMonFile(const std::string& path, std::multimap<std::string,std::vector<std::string>>& selectionMap)
201 {
202  //Open file
203  if(path.find(".mon") != std::string::npos)
204  return false;
205 
206  //clear the map first
207  selectionMap.clear();
208 
209  std::ifstream inFile(path);
210  if(!inFile.is_open()){
211  qDebug()<<"Error opening montage file";
212  return false;
213  }
214  std::vector<std::string> channels;
215 
216  std::string groupName;
217  std::getline(inFile, groupName);
218 
219  std::string line;
220  while(std::getline(inFile, line)){
221  if(line.find(':') != std::string::npos){
222  std::stringstream stream{line};
223  std::vector<std::string> split;
224  for (std::string element; std::getline(stream, line, ':');){
225  split.push_back(std::move(element));
226  }
227  channels.push_back(split.at(0));
228  }
229  }
230 
231  selectionMap.insert({groupName, channels});
232 
233  return true;
234 }
235 
236 //=============================================================================================================
237 
238 bool SelectionIO::writeMNESelFile(QString path, const QMap<QString,QStringList> &selectionMap)
239 {
240  //Open .sel file
241  if(!path.contains(".sel"))
242  return false;
243 
244  QFile file(path);
245  if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
246  qDebug()<<"Error opening sel file for writing";
247  return false;
248  }
249 
250  //Write selections to file
251  QTextStream out(&file);
252 
253  QMap<QString, QStringList>::const_iterator i = selectionMap.constBegin();
254  while (i != selectionMap.constEnd()) {
255  out << i.key() << ":";
256 
257  for(int u=0; u<i.value().size() ; u++)
258  out << i.value().at(u) << "|";
259 
260  out << "\n" << "\n";
261 
262  ++i;
263  }
264 
265  file.close();
266 
267  return true;
268 }
269 
270 //=============================================================================================================
271 
272 bool SelectionIO::writeMNESelFile(const std::string& path, const std::map<std::string,std::vector<std::string>>& selectionMap)
273 {
274  //Open .sel file
275  if(path.find(".sel") == std::string::npos)
276  return false;
277 
278  std::ofstream outFile(path);
279  if (outFile.is_open()){
280  qDebug()<<"Error opening sel file for writing";
281  return false;
282  }
283 
284  for(auto& mapElement : selectionMap){
285  outFile << mapElement.first << ":";
286  for(auto& vectorElement : mapElement.second){
287  outFile << vectorElement << "|";
288  }
289  outFile << "\n" << "\n";
290  }
291 
292  return true;
293 }
294 
295 //=============================================================================================================
296 
297 bool SelectionIO::writeBrainstormMonFiles(QString path, const QMap<QString,QStringList> &selectionMap)
298 {
299  //Open .sel file
300  if(!path.contains(".mon"))
301  return false;
302 
303  QMapIterator<QString,QStringList> i(selectionMap);
304  while (i.hasNext()) {
305  i.next();
306 
307  QFileInfo fileInfo(path);
308 
309  QString newPath = QString("%1/%2.mon").arg(fileInfo.absolutePath()).arg(i.key());
310 
311  //std::cout<<newPath.toStdString()<<std::endl;
312 
313  QFile file(newPath);
314  if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
315  qDebug()<<"Error opening mon file for writing";
316  return false;
317  }
318 
319  //Write selections to file
320  QTextStream out(&file);
321 
322  out<<i.key()<<"\n";
323 
324  for(int u=0; u<i.value().size() ; u++)
325  out << i.value().at(u) << " : " << i.value().at(u) << "\n";
326 
327  file.close();
328  }
329 
330  return true;
331 }
332 
333 //=============================================================================================================
334 
335 bool SelectionIO::writeBrainstormMonFiles(const std::string& path, const std::map<std::string,std::vector<std::string>>& selectionMap)
336 {
337  //Open file
338  if(path.find(".mon") == std::string::npos)
339  return false;
340 
341  for(auto& mapElement : selectionMap){
342  //logic of using parent_path here might not be "correct"
343  std::string newPath{path.substr(0, path.find_last_of("/") + 1) + mapElement.first + ".mon"};
344  std::ofstream outFile(newPath);
345  if(!outFile.is_open()){
346  qDebug()<<"Error opening mon file for writing";
347  return false;
348  }
349 
350  outFile << mapElement.first << "\n";
351  for(auto& vectorElement : mapElement.second){
352  outFile << vectorElement << " : " << vectorElement << "\n";
353  }
354  }
355 
356  return true;
357 }
static bool writeMNESelFile(QString path, const QMap< QString, QStringList > &selectionMap)
static bool readMNESelFile(QString path, QMap< QString, QStringList > &selectionMap)
Definition: selectionio.cpp:72
static bool writeBrainstormMonFiles(QString path, const QMap< QString, QStringList > &selectionMap)
SelectionIO class declaration.
static bool readBrainstormMonFile(QString path, QMap< QString, QStringList > &selectionMap)