28 GtkWidget *
title = gtk_label_new(
"");
29 gtk_label_set_markup(GTK_LABEL(title),
"<big>Filter</big>");
31 TabAdd(gtk_hseparator_new());
35 this->updating_view =
true;
36 this->num_filters = 0;
37 this->selected_filter =
"";
38 this->is_collecting =
false;
39 this->training_collected =
false;
40 this->num_seconds = 7;
43 GtkWidget *hbox_filters = gtk_hbox_new(
false, 0);
45 combo_filters = gtk_combo_box_new_text();
48 gtk_combo_box_set_active(GTK_COMBO_BOX(combo_filters),0);
49 g_signal_connect(G_OBJECT(combo_filters),
51 G_CALLBACK(CB_changeFilter),
54 gtk_box_pack_start(GTK_BOX(hbox_filters), combo_filters,
false,
false, 0);
57 check_filter_made = gtk_check_button_new_with_label(
"Filter Made");
58 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_filter_made),
false);
59 gtk_widget_set_sensitive(check_filter_made,
false);
61 gtk_box_pack_end(GTK_BOX(hbox_filters),check_filter_made,
false,
false, 0);
67 btn_box1 = gtk_hbutton_box_new();
68 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box1),GTK_BUTTONBOX_START);
69 GtkWidget *hbox1 = gtk_hbox_new(
false,0);
70 GtkWidget *hbox2 = gtk_hbox_new(
false,0);
72 btn_box2 = gtk_hbutton_box_new();
73 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box2),GTK_BUTTONBOX_START);
75 btn_box3 = gtk_hbutton_box_new();
76 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box3),GTK_BUTTONBOX_START);
83 btn_collect = gtk_button_new_with_label(
"Collect Training Data");
84 g_signal_connect(G_OBJECT(btn_collect),
86 G_CALLBACK(CB_collectData),
88 spin_seconds = gtk_spin_button_new_with_range(1,30,1);
89 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_seconds),num_seconds);
90 g_signal_connect(G_OBJECT(spin_seconds),
92 G_CALLBACK(CB_changeNumSeconds),
94 gtk_widget_set_size_request(spin_seconds, 40,25);
97 btn_show = gtk_button_new_with_label(
"Show Components");
98 spin_lags = gtk_spin_button_new_with_range(0,50,1);
99 gtk_widget_set_size_request(spin_lags,40,25);
101 g_signal_connect(G_OBJECT(spin_lags),
103 G_CALLBACK(CB_changeNumLags),
106 g_signal_connect(G_OBJECT(btn_show),
108 G_CALLBACK(CB_showComponents),
112 entry_components = gtk_entry_new();
113 g_signal_connect(G_OBJECT(entry_components),
115 G_CALLBACK(CB_selectComponents),
119 label_selected = gtk_label_new(
"(not set)");
120 gtk_label_set_max_width_chars(GTK_LABEL(label_selected),35);
124 btn_create_filter = gtk_button_new_with_label(
"Create Filter");
125 g_signal_connect(G_OBJECT(btn_create_filter),
127 G_CALLBACK(CB_createFilter),
131 gtk_box_pack_start(GTK_BOX(btn_box3),gtk_label_new(
"Seconds to collect: "),
false,
false, 0);
132 gtk_box_pack_start(GTK_BOX(btn_box3),spin_seconds,
false,
false, 0);
133 gtk_box_pack_start(GTK_BOX(btn_box3),btn_collect,
false,
false, 0);
134 gtk_box_pack_start(GTK_BOX(hbox1),gtk_label_new(
"Lags: "),
false,
false, 0);
135 gtk_box_pack_start(GTK_BOX(hbox1),spin_lags,
false,
false, 0);
136 gtk_box_pack_start(GTK_BOX(hbox1),gtk_label_new(
" "),
false,
false, 0);
137 gtk_box_pack_start(GTK_BOX(hbox1),btn_show,
false,
false, 0);
138 gtk_box_pack_start(GTK_BOX(hbox2),gtk_label_new(
"Select Components (e.g. 1,3,6:9): "),
false,
false, 0);
139 gtk_box_pack_start(GTK_BOX(hbox2),entry_components,
false,
false, 0);
140 gtk_box_pack_start(GTK_BOX(hbox2),gtk_label_new(
" = "),
false,
false, 0);
141 gtk_box_pack_start(GTK_BOX(hbox2),label_selected,
false,
false, 0);
142 gtk_box_pack_start(GTK_BOX(btn_box2),btn_create_filter,
false,
false, 0);
145 GtkWidget * btn_boxes = gtk_vbox_new(
false,0);
146 gtk_box_pack_start(GTK_BOX(btn_boxes), btn_box3,
false,
false, 0);
147 gtk_box_pack_start(GTK_BOX(btn_boxes), hbox1,
false,
false, 1);
148 gtk_box_pack_start(GTK_BOX(btn_boxes), btn_box1,
false,
false, 0);
149 gtk_box_pack_start(GTK_BOX(btn_boxes), hbox2,
false,
false, 0);
150 gtk_box_pack_start(GTK_BOX(btn_boxes), btn_box2,
false,
false, 0);
156 gtk_widget_set_sensitive(btn_create_filter,
false);
158 this->updating_view =
false;
162 if(gtk_combo_box_get_active(GTK_COMBO_BOX(combo_filters))==-1)
163 gtk_combo_box_set_active(GTK_COMBO_BOX(combo_filters),0);
174 this->updating_view =
true;
185 if(names != this->filter_names
186 || this->selected_filter != model_selected_filter)
188 this->selected_filter = model_selected_filter;
189 this->filter_names = names;
190 for(
int i = this->num_filters-1; i >= 0; i--)
192 gtk_combo_box_remove_text(GTK_COMBO_BOX(combo_filters),i);
194 this->num_filters = names.size();
197 for(
unsigned int i=0;i<names.size();i++)
199 gtk_combo_box_append_text(GTK_COMBO_BOX(combo_filters),
201 if(names[i]==model_selected_filter)
203 gtk_combo_box_set_active(GTK_COMBO_BOX(combo_filters),i);
210 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_lags),n);
214 gtk_label_set_text(GTK_LABEL(label_selected),comps.c_str());
217 string input = string(gtk_entry_get_text(GTK_ENTRY(entry_components)));
225 gtk_entry_set_text(GTK_ENTRY(entry_components),comps.c_str());
231 gtk_widget_set_sensitive(btn_create_filter,components_valid);
234 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_filter_made),
238 this->updating_view =
false;
252 void TabFilter::createPlot(
int num_channels)
258 TabAdd(*plot,
true,
true, 0);
270 void TabFilter::startCollect()
272 if(!this->is_collecting)
274 this->training_data.
clear();
275 this->training_collected =
false;
279 }
catch(exception & e) {
280 string msg =
"There was an error starting the data source. \n("+string(e.what())+
")";
284 this->is_collecting =
true;
290 int display_step = 64;
293 while(this->is_collecting)
295 gtk_main_iteration();
298 gtk_main_iteration();
301 }
catch(exception & e){}
303 this->is_collecting =
false;
309 }
catch(exception & e) {}
310 int new_samples = training_data.
size2();
311 double elapsed = collect_timer.
elapsed() / 1000.0;
312 if(new_samples - num_samples > display_step)
314 num_samples = new_samples;
315 percent = elapsed/num_seconds;
316 if(elapsed >= num_seconds)
318 this->is_collecting =
false;
319 this->training_collected =
true;
321 this->CB_showComponents(NULL,
this);
327 msg << int(elapsed) <<
" of " << num_seconds <<
" seconds\n";
328 msg << num_samples <<
" samples";
340 void TabFilter::stopCollect()
342 if(this->is_collecting)
345 this->is_collecting =
false;
353 void TabFilter::CB_selectComponents(GtkWidget *w, gpointer data)
356 if(!filter->updating_view)
358 string input = string(gtk_entry_get_text(GTK_ENTRY(w)));
366 void TabFilter::CB_showComponents(GtkWidget *w, gpointer data)
370 if(!tab->training_collected || tab->is_collecting)
372 string msg =
"Failed to extract components. Collect data first!";
382 tab->createPlot(components.
size1());
384 tab->plot->
Plot(components);
390 string msg =
"Failed to extract components. \n(" + string(e.
what()) +
")";
396 string msg =
"Failed to extract components. \n(" + string(e.what()) +
")";
402 void TabFilter::CB_createFilter(GtkWidget *w, gpointer data)
411 string msg =
"Failed to make filter. \n(" + string(e.what()) +
")";
417 void TabFilter::CB_changeFilter(GtkWidget *w, gpointer data)
423 if(tab->num_filters > 0 && !tab->updating_view)
426 gtk_combo_box_get_active_text(GTK_COMBO_BOX(tab->combo_filters));
429 if(filter != tab->selected_filter)
437 cerr <<
"Error selecting filter.\n";
443 void TabFilter::CB_changeNumLags(GtkWidget *w, gpointer data)
446 if(!tab->updating_view)
448 int n = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(tab->spin_lags)));
453 void TabFilter::CB_changeNumSeconds(GtkWidget *w, gpointer data)
456 if(!tab->updating_view)
458 tab->num_seconds = int(gtk_spin_button_get_value(GTK_SPIN_BUTTON(tab->spin_seconds)));
463 void TabFilter::CB_collectData(GtkWidget *w, gpointer data)
466 if(!tab->is_collecting)