3 #include <boost/regex.hpp>
4 #include "../CEBLModel.hpp"
15 max_num_channels = 24;
16 channels_names.resize(max_num_channels);
17 channels_enabled.resize(max_num_channels);
18 channels_reference.resize(max_num_channels);
22 loadFile(config_filename);
26 cerr <<
"Error loading default channels file. Enabling 8 channels.\n";
28 this->setElectrodeEnabled(i,
true);
45 return config_filename;
50 return channels_names[electrode];
55 return channels_enabled[electrode];
60 return channels_reference[electrode];
65 return max_num_channels;
71 for(
unsigned int i = 0; i<this->channels_enabled.size();i++)
73 if(this->channels_enabled[i])
81 std::vector<string> ret;
82 for(
unsigned int i = 0; i<this->channels_enabled.size();i++)
84 if(this->channels_enabled[i])
85 ret.push_back(getElectrodeName(i));
93 this->saveConfigToStream(ss);
108 channels_names[electrode] = name;
113 channels_reference[electrode] = enabled;
118 channels_enabled[electrode] = enabled;
125 this->parseConfigFromStream(ss);
141 ifstream ifs(filename.c_str());
147 if(parseConfigFromStream(ifs))
148 this->config_filename = filename;
151 throw FileException(
"Failed to parse channels config file \""
158 bool ChannelsConfig::parseConfigFromStream(std::istream &ifs)
161 vector<string> new_names;
162 vector<bool> new_enabled;
163 vector<bool> new_reference;
164 new_names.resize(channels_names.size());
165 new_enabled.resize(channels_enabled.size());
166 new_reference.resize(channels_reference.size());
168 boost::regex comment_regexp(
"^[[:space:]]*#.*");
169 boost::regex valid_line_regexp(
"^[[:space:]]*\\d+[[:space:]]+[\\w|-]+");
176 int valid_line_count = 0;
183 ifs.getline(buffer,256);
186 if(regex_search(line,comment_regexp))
190 if(!regex_search(line,valid_line_regexp))
196 stringstream ss_parser(line);
198 ss_parser.exceptions(ifstream::failbit);
202 }
catch(ifstream::failure e){
208 }
catch(ifstream::failure e){
214 }
catch(ifstream::failure e){
220 }
catch(ifstream::failure e){
225 if(jack >0 && jack <= max_num_channels)
227 new_enabled[jack-1] = enable==
'y';
228 new_reference[jack-1] = ref==
'y' || ref==
'r';
230 new_names[jack-1] = string(name);
232 new_names[jack-1] =
"";
240 if(valid_line_count == 0)
246 channels_names = new_names;
247 channels_enabled = new_enabled;
248 channels_reference = new_reference;
265 ofstream ofs(filename.c_str());
271 if(!saveConfigToStream(ofs))
278 bool ChannelsConfig::saveConfigToStream(std::ostream &ofs)
283 ofs <<
"#\tname\tref\tenable" << endl;
284 for(
int i=0; i < max_num_channels; i++)
287 << (channels_names[i] ==
"" ?
"-" : channels_names[i]) <<
'\t'
288 << (channels_reference[i] ?
'y' :
'-') <<
'\t'
289 << (channels_enabled[i] ?
'y' :
'n') << endl;