52 QStringList &channelNames,
53 QList<QVector<float> > &location3D,
54 QList<QVector<float> > &location2D,
58 if(!path.contains(
".elc"))
62 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
63 qDebug()<<
"Error opening elc file";
68 double numberElectrodes;
69 QTextStream in(&file);
74 QString line = in.readLine();
76 QStringList fields = line.split(QRegularExpression(
"\\s+"));
79 if(fields.at(fields.size()-1) ==
"")
82 if(!line.contains(
"#"))
85 if(line.contains(
"NumberPositions"))
86 numberElectrodes = fields.at(1).toDouble();
89 if(line.contains(
"UnitPosition"))
93 if(line.contains(
"Positions2D"))
96 if(line.contains(
":") && !read2D)
98 channelNames.push_back(fields.at(0));
99 QVector<float> posTemp;
101 posTemp.push_back(fields.at(fields.size()-3).toDouble());
102 posTemp.push_back(fields.at(fields.size()-2).toDouble());
103 posTemp.push_back(fields.at(fields.size()-1).toDouble());
105 location3D.append(posTemp);
108 if(line.contains(
":") && read2D)
110 QVector<float> posTemp;
111 posTemp.push_back(fields.at(fields.size()-2).toDouble());
112 posTemp.push_back(fields.at(fields.size()-1).toDouble());
113 location2D.append(posTemp);
117 if(line.contains(
"Labels"))
119 line = in.readLine();
120 fields = line.split(QRegularExpression(
"\\s+"));
123 if(fields.at(fields.size()-1) ==
"")
126 channelNames = fields;
131 Q_UNUSED(numberElectrodes);
141 std::vector<std::string> &channelNames,
142 std::vector<std::vector<float> > &location3D,
143 std::vector<std::vector<float> > &location2D,
147 if(path.find(
".elc") == std::string::npos){
151 std::ifstream inFile(path);
153 if(!inFile.is_open()){
154 qDebug()<<
"Error opening elc file";
159 double numberElectrodes;
164 while(std::getline(inFile, line)){
165 if(line.find(
'#') == std::string::npos){
166 std::vector<std::string> elements;
167 std::stringstream stream{line};
171 while(stream >> element){
172 elements.push_back(std::move(element));
177 if(line.find(
"NumberPositions") != std::string::npos)
178 numberElectrodes = std::stod(elements.at(1));
181 if(line.find(
"UnitPosition") != std::string::npos)
182 unit = elements.at(1);
185 if(line.find(
"Positions2D") != std::string::npos)
188 if(line.find(
':') != std::string::npos && !read2D)
190 channelNames.push_back(elements.at(0));
191 std::vector<float> posTemp;
193 posTemp.push_back(std::stod(elements.at(elements.size()-3)));
194 posTemp.push_back(std::stod(elements.at(elements.size()-2)));
195 posTemp.push_back(std::stod(elements.at(elements.size()-1)));
197 location3D.push_back(std::move(posTemp));
200 if(line.find(
":") != std::string::npos && read2D)
202 std::vector<float> posTemp;
203 posTemp.push_back(std::stod(elements.at(elements.size()-2)));
204 posTemp.push_back(std::stod(elements.at(elements.size()-1)));
205 location2D.push_back(std::move(posTemp));
209 if(line.find(
"Labels") != std::string::npos)
211 std::getline(inFile, line);
212 std::stringstream channels{line};
213 std::vector<std::string> listOfNames;
215 std::string channelName;
218 while(channels >> channelName){
219 listOfNames.push_back(std::move(channelName));
223 channelNames = std::move(listOfNames);
228 Q_UNUSED(numberElectrodes);
238 if(!path.contains(
".lout"))
244 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
245 qDebug()<<
"Error opening mne lout file";
250 QTextStream in(&file);
256 QString line = in.readLine();
258 QStringList fields = line.split(QRegularExpression(
"\\s+"));
261 if(fields.at(fields.size()-1) ==
"")
265 posTemp.setX(fields.at(1).toDouble());
266 posTemp.setY(fields.at(2).toDouble());
269 QString key = QString(
"%1 %2").arg(fields.at(fields.size()-2)).arg(fields.at(fields.size()-1));
270 channelData.insert(key, posTemp);
283 if(path.find(
".lout") == std::string::npos){
288 std::ifstream inFile(path);
290 if(!inFile.is_open()){
291 qDebug()<<
"Error opening mne lout file";
298 std::getline(inFile, line);
300 while(std::getline(inFile, line)){
301 if(line.empty())
continue;
303 std::vector<std::string> elements;
304 std::stringstream stream{line};
308 while(stream >> element){
309 elements.push_back(std::move(element));
313 if(elements.size() < 4)
continue;
316 posTemp.setX(std::stod(elements.at(1)));
317 posTemp.setY(std::stod(elements.at(2)));
320 std::string key{elements.at(elements.size() - 2) +
" " + elements.at(elements.size() - 1)};
321 channelData.insert(key, posTemp);