[med-svn] [aghermann] 41/60: unify the three artifact detection algorithms (part 4/4)
andrei zavada
hmmr-guest at alioth.debian.org
Mon Nov 4 23:49:58 UTC 2013
This is an automated email from the git hooks/post-receive script.
hmmr-guest pushed a commit to branch WIP
in repository aghermann.
commit dabf05c72a100094fc607904fb7df0d762512dfa
Author: Andrei Zavada <johnhommer at gmail.com>
Date: Mon Oct 21 01:21:24 2013 +0300
unify the three artifact detection algorithms (part 4/4)
---
upstream/data/sf-artifacts.glade | 112 ++++++++++----------
upstream/src/aghermann/artifact-detection/3in1.cc | 1 +
upstream/src/aghermann/ui/sf/channel.cc | 7 +-
.../src/aghermann/ui/sf/d/artifacts-profiles_cb.cc | 5 +
upstream/src/aghermann/ui/sf/d/artifacts.cc | 6 ++
upstream/src/aghermann/ui/sf/d/artifacts.hh | 9 ++
upstream/src/aghermann/ui/sf/d/artifacts_cb.cc | 86 +++++++++++++--
7 files changed, 155 insertions(+), 71 deletions(-)
diff --git a/upstream/data/sf-artifacts.glade b/upstream/data/sf-artifacts.glade
index eb119d8..f7c620c 100644
--- a/upstream/data/sf-artifacts.glade
+++ b/upstream/data/sf-artifacts.glade
@@ -1,6 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkAdjustment" id="jSFADLowerThr">
+ <property name="lower">-30</property>
+ <property name="upper">-1</property>
+ <property name="value">-9</property>
+ <property name="step_increment">0.5</property>
+ <property name="page_increment">2</property>
+ </object>
+ <object class="GtkAdjustment" id="jSFADMCGain">
+ <property name="lower">1</property>
+ <property name="upper">100</property>
+ <property name="value">10</property>
+ <property name="step_increment">0.5</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="jSFADScope">
+ <property name="lower">1</property>
+ <property name="upper">60</property>
+ <property name="value">4</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="jSFADSmoothSide">
+ <property name="upper">8</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">2</property>
+ </object>
+ <object class="GtkAdjustment" id="jSFADUpperThr">
+ <property name="lower">1</property>
+ <property name="upper">30</property>
+ <property name="value">9</property>
+ <property name="step_increment">0.5</property>
+ <property name="page_increment">2</property>
+ </object>
<object class="GtkAdjustment" id="jSFADBackpolate">
<property name="upper">1</property>
<property name="value">0.5</property>
@@ -49,6 +82,13 @@
<property name="step_increment">0.25</property>
<property name="page_increment">1</property>
</object>
+ <object class="GtkAdjustment" id="jSFADFlatMinRegionSize">
+ <property name="lower">0.050000000000000003</property>
+ <property name="upper">120</property>
+ <property name="value">0.5</property>
+ <property name="step_increment">0.050000000000000003</property>
+ <property name="page_increment">0.5</property>
+ </object>
<object class="GtkAdjustment" id="jSFADFlatPad">
<property name="upper">10</property>
<property name="value">0.20000000000000001</property>
@@ -74,46 +114,6 @@
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
- <object class="GtkAdjustment" id="jSFADLowerThr">
- <property name="lower">-30</property>
- <property name="upper">-1</property>
- <property name="value">-9</property>
- <property name="step_increment">0.5</property>
- <property name="page_increment">2</property>
- </object>
- <object class="GtkAdjustment" id="jSFADMCGain">
- <property name="lower">1</property>
- <property name="upper">100</property>
- <property name="value">10</property>
- <property name="step_increment">0.5</property>
- <property name="page_increment">1</property>
- </object>
- <object class="GtkAdjustment" id="jSFADScope">
- <property name="lower">1</property>
- <property name="upper">60</property>
- <property name="value">4</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkAdjustment" id="jSFADSmoothSide">
- <property name="upper">8</property>
- <property name="step_increment">1</property>
- <property name="page_increment">2</property>
- </object>
- <object class="GtkAdjustment" id="jSFADUpperThr">
- <property name="lower">1</property>
- <property name="upper">30</property>
- <property name="value">9</property>
- <property name="step_increment">0.5</property>
- <property name="page_increment">2</property>
- </object>
- <object class="GtkAdjustment" id="jSFADFlatMinRegionSize">
- <property name="lower">0.050000000000000003</property>
- <property name="upper">120</property>
- <property name="value">0.5</property>
- <property name="step_increment">0.050000000000000003</property>
- <property name="page_increment">0.5</property>
- </object>
<object class="GtkDialog" id="wSFAD">
<property name="can_focus">False</property>
<property name="border_width">5</property>
@@ -281,7 +281,7 @@
</packing>
</child>
<child>
- <object class="GtkExpander" id="expander1">
+ <object class="GtkExpander" id="cSFADMCBasedExpander">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="resize_toplevel">True</property>
@@ -997,7 +997,18 @@
</packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Inspect every</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
</child>
<child>
<placeholder/>
@@ -1012,18 +1023,7 @@
<placeholder/>
</child>
<child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Inspect every</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
+ <placeholder/>
</child>
</object>
</child>
@@ -1087,7 +1087,7 @@
</packing>
</child>
<child>
- <object class="GtkExpander" id="expander2">
+ <object class="GtkExpander" id="cSFADFlatExpander">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
@@ -1251,7 +1251,7 @@
</packing>
</child>
<child>
- <object class="GtkExpander" id="expander3">
+ <object class="GtkExpander" id="cSFADEMGExpander">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
diff --git a/upstream/src/aghermann/artifact-detection/3in1.cc b/upstream/src/aghermann/artifact-detection/3in1.cc
index 2d8c899..a9823d4 100644
--- a/upstream/src/aghermann/artifact-detection/3in1.cc
+++ b/upstream/src/aghermann/artifact-detection/3in1.cc
@@ -129,6 +129,7 @@ detect_artifacts( sigfile::SNamedChannel& N,
1., P.emg_min_steadytone_run);
for ( size_t t = 0; t < emg_raw_profile.size(); ++t )
if ( emg_raw_profile[t] > this_steady_tone * P.emg_min_steadytone_factor ) {
+ marked_some = true;
AF.mark_artifact(
(t+0) * P.emg_min_steadytone_run,
(t+1) * P.emg_min_steadytone_run);
diff --git a/upstream/src/aghermann/ui/sf/channel.cc b/upstream/src/aghermann/ui/sf/channel.cc
index f3485b9..241d251 100644
--- a/upstream/src/aghermann/ui/sf/channel.cc
+++ b/upstream/src/aghermann/ui/sf/channel.cc
@@ -391,10 +391,7 @@ float
SScoringFacility::SChannel::
calculate_dirty_percent()
{
- size_t total = 0; // in samples
- for ( auto &A : artifacts() )
- total += A.size();
- return percent_dirty = (float)total / n_samples();
+ return percent_dirty = 100 * artifacts.region_dirty_fraction( 0., crecording.F().recording_time());
}
@@ -520,7 +517,7 @@ update_channel_menu_items( const double x)
gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawPSDSpectrum, is_eeg);
gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawSWUProfile, is_eeg);
- gtk_widget_set_visible( (GtkWidget*)_p.iSFPageArtifactsDetect, is_eeg and not _p.artifacts_dialog_shown);
+ gtk_widget_set_visible( (GtkWidget*)_p.iSFPageArtifactsDetect, is_eeg);
gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawMCProfile, is_eeg);
gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawEMGProfile, is_emg);
gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawEMGSteadyTone, is_emg);
diff --git a/upstream/src/aghermann/ui/sf/d/artifacts-profiles_cb.cc b/upstream/src/aghermann/ui/sf/d/artifacts-profiles_cb.cc
index 0d5c59b..0c606cd 100644
--- a/upstream/src/aghermann/ui/sf/d/artifacts-profiles_cb.cc
+++ b/upstream/src/aghermann/ui/sf/d/artifacts-profiles_cb.cc
@@ -22,6 +22,11 @@ void eSFADProfileList_changed_cb(
{
auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+ for ( auto& W : {AD.cSFADMCBasedExpander, AD.cSFADFlatExpander, AD.cSFADEMGExpander} ) {
+ g_signal_emit_by_name( W, "activate");
+ g_signal_emit_by_name( W, "activate");
+ }
+
AD.eXProfileList_changed_cb();
}
diff --git a/upstream/src/aghermann/ui/sf/d/artifacts.cc b/upstream/src/aghermann/ui/sf/d/artifacts.cc
index 8051321..9079c5d 100644
--- a/upstream/src/aghermann/ui/sf/d/artifacts.cc
+++ b/upstream/src/aghermann/ui/sf/d/artifacts.cc
@@ -56,6 +56,7 @@ SArtifactsDialog (SScoringFacility& p_)
AGH_GBGETOBJ (eSFADProfileSaveOriginUser);
AGH_GBGETOBJ (bSFADProfileSaveOK);
+ AGH_GBGETOBJ (cSFADMCBasedExpander);
AGH_GBGETOBJ (lSFADMCBasedSummary);
AGH_GBGETOBJ (eSFADMCBasedConsider);
AGH_GBGETOBJ (cSFADMCBased);
@@ -79,12 +80,14 @@ SArtifactsDialog (SScoringFacility& p_)
AGH_GBGETOBJ (cSFADWhenEstimateEOn);
AGH_GBGETOBJ (cSFADWhenEstimateEOff);
+ AGH_GBGETOBJ (cSFADFlatExpander);
AGH_GBGETOBJ (lSFADFlatSummary);
AGH_GBGETOBJ (eSFADFlatConsider);
AGH_GBGETOBJ (cSFADFlat);
AGH_GBGETOBJ (eSFADFlatMinRegionSize);
AGH_GBGETOBJ (eSFADFlatPad);
+ AGH_GBGETOBJ (cSFADEMGExpander);
AGH_GBGETOBJ (lSFADEMGSummary);
AGH_GBGETOBJ (eSFADEMGConsider);
AGH_GBGETOBJ (cSFADEMG);
@@ -113,6 +116,9 @@ SArtifactsDialog (SScoringFacility& p_)
G_CONNECT_1 (bSFADProfileRevert, clicked);
G_CONNECT_1 (bSFADProfileDiscard, clicked);
+ G_CONNECT_1 (cSFADMCBasedExpander, activate);
+ G_CONNECT_1 (cSFADFlatExpander, activate);
+ G_CONNECT_1 (cSFADEMGExpander, activate);
G_CONNECT_1 (eSFADMCBasedConsider, toggled);
G_CONNECT_1 (eSFADFlatConsider, toggled);
G_CONNECT_1 (eSFADEMGConsider, toggled);
diff --git a/upstream/src/aghermann/ui/sf/d/artifacts.hh b/upstream/src/aghermann/ui/sf/d/artifacts.hh
index 43e357c..639d60b 100644
--- a/upstream/src/aghermann/ui/sf/d/artifacts.hh
+++ b/upstream/src/aghermann/ui/sf/d/artifacts.hh
@@ -78,6 +78,8 @@ struct SScoringFacility::SArtifactsDialog
// B. Contents
// 1. MC-based
+ GtkExpander
+ *cSFADMCBasedExpander;
GtkLabel
*lSFADMCBasedSummary;
GtkTable
@@ -109,6 +111,8 @@ struct SScoringFacility::SArtifactsDialog
*cSFADWhenEstimateEOff;
// 2. Flat regions
+ GtkExpander
+ *cSFADFlatExpander;
GtkLabel
*lSFADFlatSummary;
GtkTable
@@ -120,6 +124,8 @@ struct SScoringFacility::SArtifactsDialog
*eSFADFlatPad;
// 3. EMG perturbations
+ GtkExpander
+ *cSFADEMGExpander;
GtkLabel
*lSFADEMGSummary;
GtkTable
@@ -155,6 +161,9 @@ void bSFADProfileSave_clicked_cb( GtkButton*, gpointer);
void bSFADProfileRevert_clicked_cb( GtkButton*, gpointer);
void bSFADProfileDiscard_clicked_cb( GtkButton*, gpointer);
+void cSFADMCBasedExpander_activate_cb( GtkExpander*, gpointer);
+void cSFADFlatExpander_activate_cb( GtkExpander*, gpointer);
+void cSFADEMGExpander_activate_cb( GtkExpander*, gpointer);
void eSFADMCBasedConsider_toggled_cb( GtkToggleButton*, gpointer);
void eSFADFlatConsider_toggled_cb( GtkToggleButton*, gpointer);
void eSFADEMGConsider_toggled_cb( GtkToggleButton*, gpointer);
diff --git a/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc b/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc
index 727c460..34d0135 100644
--- a/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc
+++ b/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc
@@ -36,12 +36,15 @@ wSFAD_show_cb(
*SF._p.ED,
agh::SExpDirLevelId {SF._p.ED->group_of(SF.csubject()), SF.csubject().id, SF.session()});
AD.populate_combo();
+ if ( gtk_combo_box_get_active( AD.eSFADProfileList) == -1 )
+ gtk_combo_box_set_active( AD.eSFADProfileList, 0);
+
AD.set_profile_manage_buttons_visibility();
- // g_signal_emit_by_name( AD.eSFADEstimateE, "toggled");
- // g_signal_emit_by_name( AD.eSFADEstimateE, "toggled");
- // g_signal_emit_by_name( AD.eSFADUseThisRange, "toggled");
- // g_signal_emit_by_name( AD.eSFADUseThisRange, "toggled");
+ for ( auto& W : {AD.cSFADMCBasedExpander, AD.cSFADFlatExpander, AD.cSFADEMGExpander} ) {
+ g_signal_emit_by_name( W, "activate");
+ g_signal_emit_by_name( W, "activate");
+ }
gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADApply, FALSE);
AD.suppress_preview_handler = true;
@@ -52,10 +55,10 @@ wSFAD_show_cb(
gtk_label_set_text(
AD.lSFADInfo,
- snprintf_buf( "Artifact detection in channel %s", AD.using_channel->name()));
+ snprintf_buf( "Artifact detection in %s", AD.using_channel->name()));
gtk_label_set_text(
AD.lSFADDirtyPercent,
- snprintf_buf( "%4.2f%% marked", AD.using_channel->calculate_dirty_percent() * 100));
+ snprintf_buf( "%4.2f%% marked", AD.using_channel->calculate_dirty_percent()));
}
gboolean
@@ -77,6 +80,65 @@ wSFAD_close_cb(
}
+
+void
+cSFADMCBasedExpander_activate_cb(
+ GtkExpander* expander,
+ const gpointer userdata)
+{
+ auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+ bool yesitis = !gtk_expander_get_expanded( expander);
+ auto& P = AD.Pp2.Pp.MC;
+ gtk_label_set_text(
+ AD.lSFADMCBasedSummary,
+ yesitis
+ ? ""
+ : snprintf_buf(
+ "at:%g thr:%g..%g f %g:%g:%g g:%g bp:%g E:%g d:%g..%g hs:%zu sm:%zu estE:%d range:%d",
+ P.scope, P.upper_thr, P.lower_thr, P.f0, P.fc, P.bandwidth, P.mc_gain, P.iir_backpolate,
+ P.E, P.dmin, P.dmax, P.sssu_hist_size, P.smooth_side,
+ P.estimate_E, P.use_range));
+}
+
+void
+cSFADFlatExpander_activate_cb(
+ GtkExpander* expander,
+ const gpointer userdata)
+{
+ auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+ bool yesitis = !gtk_expander_get_expanded( expander);
+ auto& P = AD.Pp2.Pp;
+ gtk_label_set_text(
+ AD.lSFADFlatSummary,
+ yesitis
+ ? ""
+ : snprintf_buf(
+ "min_size:%g pad:%g",
+ P.flat_min_size, P.flat_pad));
+}
+
+void
+cSFADEMGExpander_activate_cb(
+ GtkExpander* expander,
+ const gpointer userdata)
+{
+ auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+ bool yesitis = !gtk_expander_get_expanded( expander);
+ auto& P = AD.Pp2.Pp;
+ gtk_label_set_text(
+ AD.lSFADEMGSummary,
+ yesitis
+ ? ""
+ : snprintf_buf(
+ "factor:%g run:%g",
+ P.emg_min_steadytone_factor, P.emg_min_steadytone_run));
+}
+
+
+
void
eSFADMCBasedConsider_toggled_cb(
GtkToggleButton *b,
@@ -84,9 +146,10 @@ eSFADMCBasedConsider_toggled_cb(
{
auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+ bool enabled = gtk_toggle_button_get_active( b);
gtk_widget_set_sensitive(
(GtkWidget*)AD.cSFADMCBased,
- gtk_toggle_button_get_active( b));
+ enabled);
AD.eX_any_profile_value_changed_cb();
}
@@ -98,9 +161,10 @@ eSFADFlatConsider_toggled_cb(
{
auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+ bool enabled = gtk_toggle_button_get_active( b);
gtk_widget_set_sensitive(
(GtkWidget*)AD.cSFADFlat,
- gtk_toggle_button_get_active( b));
+ enabled);
AD.eX_any_profile_value_changed_cb();
}
@@ -112,9 +176,10 @@ eSFADEMGConsider_toggled_cb(
{
auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+ bool enabled = gtk_toggle_button_get_active( b);
gtk_widget_set_sensitive(
(GtkWidget*)AD.cSFADEMG,
- gtk_toggle_button_get_active( b));
+ enabled);
AD.eX_any_profile_value_changed_cb();
}
@@ -240,6 +305,7 @@ bSFADPreview_toggled_cb(
} else {
AD.using_channel->artifacts = AD.artifacts_backup;
+ AD.using_channel->calculate_dirty_percent();
for ( auto& H : AD.channels_visible_backup )
H.first->hidden = H.second;
AD.using_channel->draw_original_signal = AD.orig_signal_visible_backup;
@@ -250,7 +316,7 @@ bSFADPreview_toggled_cb(
gtk_label_set_markup(
AD.lSFADDirtyPercent,
- snprintf_buf( "%4.2f%% marked", AD.using_channel->calculate_dirty_percent() * 100));
+ snprintf_buf( "%4.2f%%", AD.using_channel->percent_dirty));
gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
--
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/aghermann.git
More information about the debian-med-commit
mailing list