This is an automated email from the git hooks/post-receive script. hmmr-guest pushed a commit to branch master in repository aghermann.
commit 7dea678d785707947cd6a47f8e99a218632be8ff Author: Andrei Zavada <johnhom...@gmail.com> Date: Sat Sep 7 01:46:19 2013 +0300 separate struct SScoringFacility::SChannel into own sf/channel.hh --- upstream/src/aghermann/patterns/Makefile.am | 1 + upstream/src/aghermann/patterns/forward-decls.hh | 32 ++ upstream/src/aghermann/patterns/patterns.hh | 30 +- upstream/src/aghermann/ui/mw/mainmenu_cb.cc | 1 + upstream/src/aghermann/ui/sf/Makefile.am | 1 + upstream/src/aghermann/ui/sf/channel.cc | 2 + upstream/src/aghermann/ui/sf/channel.hh | 374 ++++++++++++++++++++ upstream/src/aghermann/ui/sf/d/artifacts-simple.hh | 2 +- upstream/src/aghermann/ui/sf/d/artifacts.cc | 1 + upstream/src/aghermann/ui/sf/d/artifacts_cb.cc | 3 +- .../src/aghermann/ui/sf/d/filters-construct.cc | 2 +- upstream/src/aghermann/ui/sf/d/filters.cc | 1 + upstream/src/aghermann/ui/sf/d/filters_cb.cc | 2 +- .../src/aghermann/ui/sf/d/patterns-construct.cc | 1 + upstream/src/aghermann/ui/sf/d/patterns-draw.cc | 3 +- .../src/aghermann/ui/sf/d/patterns-profiles.cc | 3 +- .../src/aghermann/ui/sf/d/patterns-profiles_cb.cc | 1 + upstream/src/aghermann/ui/sf/d/patterns.cc | 2 +- upstream/src/aghermann/ui/sf/d/patterns_cb.cc | 3 +- .../src/aghermann/ui/sf/d/phasediff-construct.cc | 2 +- upstream/src/aghermann/ui/sf/d/phasediff.cc | 3 +- upstream/src/aghermann/ui/sf/d/phasediff_cb.cc | 3 +- upstream/src/aghermann/ui/sf/hypnogram.cc | 2 + upstream/src/aghermann/ui/sf/ica.cc | 1 + upstream/src/aghermann/ui/sf/mainmenu_cb.cc | 2 + upstream/src/aghermann/ui/sf/montage-overlays.cc | 3 +- upstream/src/aghermann/ui/sf/montage.cc | 3 +- upstream/src/aghermann/ui/sf/montage_cb.cc | 3 +- upstream/src/aghermann/ui/sf/sf.cc | 22 +- upstream/src/aghermann/ui/sf/sf.hh | 349 +----------------- upstream/src/aghermann/ui/sf/sf_cb.cc | 1 + upstream/src/libsigfile/forward-decls.hh | 4 + upstream/src/libsigfile/source-base.hh | 13 +- 33 files changed, 509 insertions(+), 367 deletions(-) diff --git a/upstream/src/aghermann/patterns/Makefile.am b/upstream/src/aghermann/patterns/Makefile.am index 29e2fe0..a32f72d 100644 --- a/upstream/src/aghermann/patterns/Makefile.am +++ b/upstream/src/aghermann/patterns/Makefile.am @@ -5,6 +5,7 @@ AM_CXXFLAGS := \ noinst_LIBRARIES := liba.a liba_a_SOURCES := \ + forward-decls.hh \ patterns.cc patterns.hh patterns.ii # EXTRA_DIST := \ diff --git a/upstream/src/aghermann/patterns/forward-decls.hh b/upstream/src/aghermann/patterns/forward-decls.hh new file mode 100644 index 0000000..0078781 --- /dev/null +++ b/upstream/src/aghermann/patterns/forward-decls.hh @@ -0,0 +1,32 @@ +/* + * File name: aghermann/patterns/forward-decls.hh + * Project: Aghermann + * Author: Andrei Zavada <johnhom...@gmail.com> + * Initial version: 2013-09-07 + * + * Purpose: + * + * License: GPL + */ + +#ifndef SIGPROC_PATTERNS_FORWARD_DECLS_H_ +#define SIGPROC_PATTERNS_FORWARD_DECLS_H_ + +namespace pattern { + +template <typename T> class CMatch; +template <typename T> struct SPatternPPack; +template <typename T> class CPatternTool; +template <typename T> struct SPattern; + +} // namespace pattern + + +#endif + +// Local Variables: +// Mode: c++ +// indent-tabs-mode: nil +// tab-width: 8 +// c-basic-offset: 8 +// End: diff --git a/upstream/src/aghermann/patterns/patterns.hh b/upstream/src/aghermann/patterns/patterns.hh index 922b44f..87b512d 100644 --- a/upstream/src/aghermann/patterns/patterns.hh +++ b/upstream/src/aghermann/patterns/patterns.hh @@ -47,16 +47,16 @@ class CMatch template <typename T> struct SPatternPPack { - double env_scope; - double bwf_ffrom, + double env_scope; + double bwf_ffrom, bwf_fupto; - int bwf_order; - double dzcdf_step, + int bwf_order; + double dzcdf_step, dzcdf_sigma; - int dzcdf_smooth; + int dzcdf_smooth; bool operator==( const SPatternPPack<T>& rv) const // cannot be defaulted! { - return env_scope == rv.env_scope && + return env_scope == rv.env_scope && bwf_ffrom == rv.bwf_ffrom && bwf_fupto == rv.bwf_fupto && bwf_order == rv.bwf_order && @@ -66,7 +66,7 @@ struct SPatternPPack { } bool sane() const { - return env_scope > 0. && env_scope <= 1. && + return env_scope > 0. && env_scope <= 1. && bwf_ffrom < bwf_fupto && bwf_ffrom >= 0. && bwf_ffrom <= 50. && bwf_fupto >= 0. && bwf_fupto <= 50. && @@ -136,12 +136,12 @@ class CPatternTool sigproc::SCachedDzcdf<T> pdzcdf; - size_t samplerate; - size_t ctx_before, + size_t samplerate; + size_t ctx_before, ctx_after; T crit_linear_unity; - double crit_dzcdf_unity; + double crit_dzcdf_unity; }; @@ -154,17 +154,17 @@ extern const char* template <typename T> struct SPattern { - string name, + string name, path; - TOrigin origin; + TOrigin origin; - bool saved:1; + bool saved:1; valarray<T> thing; - size_t samplerate; - size_t context_before, + size_t samplerate; + size_t context_before, context_after; static const size_t context_pad = 100; diff --git a/upstream/src/aghermann/ui/mw/mainmenu_cb.cc b/upstream/src/aghermann/ui/mw/mainmenu_cb.cc index b5689db..e0d0a2f 100644 --- a/upstream/src/aghermann/ui/mw/mainmenu_cb.cc +++ b/upstream/src/aghermann/ui/mw/mainmenu_cb.cc @@ -12,6 +12,7 @@ #include "aghermann/ui/misc.hh" #include "aghermann/ui/sm/sm.hh" #include "aghermann/ui/sf/sf.hh" +#include "aghermann/ui/sf/channel.hh" #include "mw.hh" #include "mw_cb.hh" diff --git a/upstream/src/aghermann/ui/sf/Makefile.am b/upstream/src/aghermann/ui/sf/Makefile.am index b41a578..8f42c13 100644 --- a/upstream/src/aghermann/ui/sf/Makefile.am +++ b/upstream/src/aghermann/ui/sf/Makefile.am @@ -9,6 +9,7 @@ noinst_LIBRARIES := liba.a liba_a_SOURCES := \ channel.cc \ + channel.hh \ construct.cc \ controls_cb.cc \ hypnogram.cc \ diff --git a/upstream/src/aghermann/ui/sf/channel.cc b/upstream/src/aghermann/ui/sf/channel.cc index 6cc501a..0828b52 100644 --- a/upstream/src/aghermann/ui/sf/channel.cc +++ b/upstream/src/aghermann/ui/sf/channel.cc @@ -17,7 +17,9 @@ #include "libsigproc/exstrom.hh" #include "libmetrics/bands.hh" #include "aghermann/ui/globals.hh" +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" #include "d/artifacts.hh" #include "d/patterns.hh" diff --git a/upstream/src/aghermann/ui/sf/channel.hh b/upstream/src/aghermann/ui/sf/channel.hh new file mode 100644 index 0000000..1a581ca --- /dev/null +++ b/upstream/src/aghermann/ui/sf/channel.hh @@ -0,0 +1,374 @@ +/* + * File name: aghermann/ui/sf/channel.hh + * Project: Aghermann + * Author: Andrei Zavada <johnhom...@gmail.com> + * Initial version: 2013-09-07 + * + * Purpose: scoring facility channel representation + * + * License: GPL + */ + +#ifndef AGH_AGHERMANN_UI_SF_CHANNEL_H_ +#define AGH_AGHERMANN_UI_SF_CHANNEL_H_ + +#include <forward_list> +#include <list> +#include <string> + +#include <cairo/cairo.h> + +#include "common/alg.hh" +#include "common/config-validate.hh" +#include "libsigproc/sigproc.hh" +#include "libsigfile/forward-decls.hh" +#include "libmetrics/mc-artifacts.hh" +#include "libmetrics/page-metrics-base.hh" +#include "libmetrics/bands.hh" +#include "aghermann/patterns/forward-decls.hh" +#include "aghermann/expdesign/forward-decls.hh" +#include "aghermann/expdesign/recording.hh" +// #include "aghermann/ui/ui++.hh" + +#include "sf.hh" + +#if HAVE_CONFIG_H && !defined(VERSION) +# include "config.h" +#endif + + +using namespace std; + +namespace agh { +namespace ui { + +struct SScoringFacility::SChannel { + + DELETE_DEFAULT_METHODS (SChannel); + + bool operator==( const string&) const; + bool operator==( const SChannel&) const; + + agh::CRecording& + crecording; + + // shortcuts + int + h() const + { return crecording.h(); } + const sigfile::SChannel& + schannel() const + { return crecording.F().channel_by_id( h()); } + const char* + name() const + { return schannel().name(); } + + sigfile::SFilterPack& + filters; + list<sigfile::SAnnotation>& + annotations; + sigfile::SArtifacts& + artifacts; + + SScoringFacility& + _p; + + // signal waveforms, cached here + valarray<TFloat> + signal_original, + signal_filtered, + signal_reconstituted; // while it's hot + void get_signal_original(); + void get_signal_filtered(); + + // filters + bool have_low_pass() const; + bool have_high_pass() const; + bool have_notch_filter() const; + size_t n_samples() const; + size_t samplerate() const; + + // artifacts + float percent_dirty; + float calculate_dirty_percent(); + void detect_artifacts( const metrics::mc::SArtifactDetectionPP&); + pair<double, double> + mark_flat_regions_as_artifacts( double at_least_this_long, double pad); + + // annotations + list<sigfile::SAnnotation*> + in_annotations( double time) const; + + // signal metrics + static pattern::SPatternPPack<TFloat> + pattern_params; + sigproc::SCachedLowPassCourse<TFloat> + signal_lowpass; + sigproc::SCachedBandPassCourse<TFloat> + signal_bandpass; + sigproc::SCachedEnvelope<TFloat> + signal_envelope; + sigproc::SCachedDzcdf<TFloat> + signal_dzcdf; + void + drop_cached_signal_properties() + { + signal_lowpass.drop(); + signal_bandpass.drop(); + signal_envelope.drop(); + signal_dzcdf.drop(); + } + + // profiles + // psd + struct SProfilePSD { + valarray<TFloat> + course; + double from, upto; + double display_scale; // saved via libconfig, requiring it to be double + array<valarray<TFloat>, metrics::TBand::TBand_total> + course_in_bands; + size_t focused_band, + uppermost_band; + }; + void get_psd_course(); + void get_psd_in_bands(); + SProfilePSD + psd; + // swu + struct SProfileSWU { + valarray<TFloat> + course; + double f0; + double display_scale; + }; + void get_swu_course(); + SProfileSWU + swu; + // mc + struct SProfileMC { + valarray<TFloat> + course; + double display_scale; + double f0; + }; + SProfileMC + mc; + void get_mc_course(); + + tuple<metrics::TType, valarray<TFloat>&> + which_profile( metrics::TType); + + void update_profile_display_scales(); + + // spectrum + valarray<TFloat> + spectrum; // per page, is volatile + float spectrum_upper_freq; + unsigned + spectrum_bins, + last_spectrum_bin; + void get_spectrum(); // at current page + void get_spectrum( size_t p); + + // raw profile + valarray<TFloat> + raw_profile; + void get_raw_profile(); + + // region + void mark_region_as_artifact( bool do_mark); + void mark_region_as_annotation( const string&, sigfile::SAnnotation::TType); + void mark_region_as_pattern(); + + // ctor, dtor + SChannel( agh::CRecording& r, SScoringFacility&, size_t y, int seq); + + double zeroy; + bool operator<( const SChannel&) const; + + double signal_display_scale; + + // saved flags + bool hidden, + draw_zeroline, + draw_original_signal, + draw_filtered_signal, + zeromean_original, + zeromean_filtered, + draw_psd, + draw_swu, + draw_mc, + draw_emg, + draw_psd_bands, + autoscale_profile, + draw_spectrum, + resample_signal, + resample_power, + draw_selection_course, + draw_selection_envelope, + draw_selection_dzcdf, + draw_phasic_spindle, + draw_phasic_Kcomplex, + draw_phasic_eyeblink; + bool discard_marked, + apply_reconstituted; + + forward_list<agh::confval::SValidator<bool>> config_keys_b; + forward_list<agh::confval::SValidator<int>> config_keys_d; + forward_list<agh::confval::SValidator<double>> config_keys_g; + + void update_channel_menu_items( double x); + void update_power_menu_items(); + void selectively_enable_selection_menu_items(); + + // selection and marquee + float marquee_mstart, + marquee_mend, // in terms of event->x + marquee_start, + marquee_end; // set on button_release + double selection_start_time, + selection_end_time; // in seconds + size_t selection_start, + selection_end; // in samples + TFloat selection_SS, + selection_SU; + size_t marquee_to_selection(); + void put_selection( size_t a, size_t e); + void put_selection( double a, double e); + private: + void _put_selection(); + + public: + float spp() const; + float fine_line() const; + int sample_at_click( double) const; + + GtkMenuItem + *menu_item_when_hidden; + + // comprehensive draw + void draw_for_montage( const string& fname, int width, int height); // to a file + void draw_for_montage( cairo_t*); // to montage + + protected: + void draw_page( cairo_t*, int wd, float zeroy, // writers to an svg file override zeroy (with 0) + bool draw_marquee) const; + void draw_overlays( cairo_t*, int wd, float zeroy) const; + + // strictly draw the signal waveform bare + // (also used as such in some child dialogs) + void draw_signal_original( size_t width, int vdisp, cairo_t *cr) const + { + draw_signal( signal_original, width, vdisp, cr); + } + void draw_signal_filtered( size_t width, int vdisp, cairo_t *cr) const + { + draw_signal( signal_filtered, width, vdisp, cr); + } + friend class SScoringFacility; + void draw_signal_reconstituted( size_t width, int vdisp, cairo_t *cr) const + { + draw_signal( signal_reconstituted, width, vdisp, cr); + } + // generic draw_signal wrapper + void draw_signal( const valarray<TFloat>& signal, + size_t width, int vdisp, cairo_t *cr) const; +}; + +inline bool +SScoringFacility::SChannel:: +operator==( const string& _name) const +{ + return _name == name(); +} +// inline bool +// SScoringFacility::SChannel:: +// operator==( const SChannel& rv) const +// { +// return name == rv.name; +// } + + +inline bool +SScoringFacility::SChannel:: +have_low_pass() const +{ + return isfinite(filters.low_pass_cutoff) + && filters.low_pass_cutoff > 0. + && filters.low_pass_order > 0; +} + +inline bool +SScoringFacility::SChannel:: +have_high_pass() const +{ + return isfinite(filters.high_pass_cutoff) + && filters.high_pass_cutoff > 0. + && filters.high_pass_order > 0; +} +inline bool +SScoringFacility::SChannel:: +have_notch_filter() const +{ + return filters.notch_filter != sigfile::SFilterPack::TNotchFilter::none; +} + +inline size_t +SScoringFacility::SChannel:: +n_samples() const +{ + return signal_filtered.size(); +} + + +inline bool +SScoringFacility::SChannel:: +operator<( const SChannel& rv) const +{ + return zeroy < rv.zeroy; +} + + +inline float +SScoringFacility::SChannel:: +spp() const +{ + return (float)samplerate() * _p.vpagesize() / _p.da_wd; +} +inline float +SScoringFacility::SChannel:: +fine_line() const +{ + return ((not resample_signal) and spp() > 1.) + ? agh::alg::value_within( .6 / (spp() + .2), .1, 3.) + : .6; +} +inline int +SScoringFacility::SChannel:: +sample_at_click( double x) const +{ + return _p.time_at_click( x) * samplerate(); +} + + + + +inline size_t +SScoringFacility::SChannel:: +samplerate() const +{ + return crecording.F().samplerate(h()); +} + +} +} // namespace agh::ui + +#endif + +// Local Variables: +// Mode: c++ +// indent-tabs-mode: nil +// tab-width: 8 +// c-basic-offset: 8 +// End: diff --git a/upstream/src/aghermann/ui/sf/d/artifacts-simple.hh b/upstream/src/aghermann/ui/sf/d/artifacts-simple.hh index 72a824f..9347851 100644 --- a/upstream/src/aghermann/ui/sf/d/artifacts-simple.hh +++ b/upstream/src/aghermann/ui/sf/d/artifacts-simple.hh @@ -47,7 +47,7 @@ struct SScoringFacility::SArtifactsSimpleDialog SArtifactsSimpleDialog (SScoringFacility&); - double min_size, + double min_size, pad; SUIVarCollection diff --git a/upstream/src/aghermann/ui/sf/d/artifacts.cc b/upstream/src/aghermann/ui/sf/d/artifacts.cc index 8e1c173..e39a119 100644 --- a/upstream/src/aghermann/ui/sf/d/artifacts.cc +++ b/upstream/src/aghermann/ui/sf/d/artifacts.cc @@ -9,6 +9,7 @@ * License: GPL */ +#include "aghermann/ui/mw/mw.hh" #include "artifacts.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc b/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc index 5d02c47..1f5472b 100644 --- a/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc +++ b/upstream/src/aghermann/ui/sf/d/artifacts_cb.cc @@ -10,7 +10,8 @@ */ #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "aghermann/ui/sf/channel.hh" #include "artifacts.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/filters-construct.cc b/upstream/src/aghermann/ui/sf/d/filters-construct.cc index 6a565fc..05a6ecb 100644 --- a/upstream/src/aghermann/ui/sf/d/filters-construct.cc +++ b/upstream/src/aghermann/ui/sf/d/filters-construct.cc @@ -12,7 +12,7 @@ #include <stdexcept> #include "aghermann/ui/ui.hh" - +#include "aghermann/ui/mw/mw.hh" #include "filters.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/filters.cc b/upstream/src/aghermann/ui/sf/d/filters.cc index 2cdc425..f894ae4 100644 --- a/upstream/src/aghermann/ui/sf/d/filters.cc +++ b/upstream/src/aghermann/ui/sf/d/filters.cc @@ -10,6 +10,7 @@ */ +#include "aghermann/ui/mw/mw.hh" #include "filters.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/filters_cb.cc b/upstream/src/aghermann/ui/sf/d/filters_cb.cc index 816c8ac..1934996 100644 --- a/upstream/src/aghermann/ui/sf/d/filters_cb.cc +++ b/upstream/src/aghermann/ui/sf/d/filters_cb.cc @@ -11,7 +11,7 @@ #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" #include "filters.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/patterns-construct.cc b/upstream/src/aghermann/ui/sf/d/patterns-construct.cc index 7794ca2..3143c2a 100644 --- a/upstream/src/aghermann/ui/sf/d/patterns-construct.cc +++ b/upstream/src/aghermann/ui/sf/d/patterns-construct.cc @@ -11,6 +11,7 @@ #include <stdexcept> +#include "aghermann/ui/sf/channel.hh" #include "patterns.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/patterns-draw.cc b/upstream/src/aghermann/ui/sf/d/patterns-draw.cc index fc40f3f..88597d1 100644 --- a/upstream/src/aghermann/ui/sf/d/patterns-draw.cc +++ b/upstream/src/aghermann/ui/sf/d/patterns-draw.cc @@ -10,7 +10,8 @@ */ #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "aghermann/ui/sf/channel.hh" #include "patterns.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/patterns-profiles.cc b/upstream/src/aghermann/ui/sf/d/patterns-profiles.cc index 1b06b24..277db4a 100644 --- a/upstream/src/aghermann/ui/sf/d/patterns-profiles.cc +++ b/upstream/src/aghermann/ui/sf/d/patterns-profiles.cc @@ -12,7 +12,8 @@ #include <tuple> #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "aghermann/ui/sf/channel.hh" #include "patterns.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/patterns-profiles_cb.cc b/upstream/src/aghermann/ui/sf/d/patterns-profiles_cb.cc index 35e7460..3b05808 100644 --- a/upstream/src/aghermann/ui/sf/d/patterns-profiles_cb.cc +++ b/upstream/src/aghermann/ui/sf/d/patterns-profiles_cb.cc @@ -12,6 +12,7 @@ #include <sys/time.h> #include "aghermann/ui/misc.hh" +#include "aghermann/ui/sf/channel.hh" #include "patterns.hh" diff --git a/upstream/src/aghermann/ui/sf/d/patterns.cc b/upstream/src/aghermann/ui/sf/d/patterns.cc index 090d013..090980c 100644 --- a/upstream/src/aghermann/ui/sf/d/patterns.cc +++ b/upstream/src/aghermann/ui/sf/d/patterns.cc @@ -10,7 +10,7 @@ */ #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/sf/channel.hh" #include "patterns.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/patterns_cb.cc b/upstream/src/aghermann/ui/sf/d/patterns_cb.cc index bfc21c3..96b6023 100644 --- a/upstream/src/aghermann/ui/sf/d/patterns_cb.cc +++ b/upstream/src/aghermann/ui/sf/d/patterns_cb.cc @@ -12,7 +12,8 @@ #include <sys/time.h> #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "aghermann/ui/sf/channel.hh" #include "patterns.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/phasediff-construct.cc b/upstream/src/aghermann/ui/sf/d/phasediff-construct.cc index a9eb0b3..51e23a1 100644 --- a/upstream/src/aghermann/ui/sf/d/phasediff-construct.cc +++ b/upstream/src/aghermann/ui/sf/d/phasediff-construct.cc @@ -10,7 +10,7 @@ */ #include <stdexcept> - +#include "aghermann/ui/sf/channel.hh" #include "phasediff.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/phasediff.cc b/upstream/src/aghermann/ui/sf/d/phasediff.cc index 899cc74..424f813 100644 --- a/upstream/src/aghermann/ui/sf/d/phasediff.cc +++ b/upstream/src/aghermann/ui/sf/d/phasediff.cc @@ -11,7 +11,8 @@ #include "common/lang.hh" #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "aghermann/ui/sf/channel.hh" #include "phasediff.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/d/phasediff_cb.cc b/upstream/src/aghermann/ui/sf/d/phasediff_cb.cc index 3b2e271..16e76fc 100644 --- a/upstream/src/aghermann/ui/sf/d/phasediff_cb.cc +++ b/upstream/src/aghermann/ui/sf/d/phasediff_cb.cc @@ -11,7 +11,8 @@ #include "common/lang.hh" #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "aghermann/ui/sf/channel.hh" #include "phasediff.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/hypnogram.cc b/upstream/src/aghermann/ui/sf/hypnogram.cc index a03c85f..e7ec6a6 100644 --- a/upstream/src/aghermann/ui/sf/hypnogram.cc +++ b/upstream/src/aghermann/ui/sf/hypnogram.cc @@ -14,6 +14,8 @@ #include <cairo/cairo.h> +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/ica.cc b/upstream/src/aghermann/ui/sf/ica.cc index 0ddbad3..adc5526 100644 --- a/upstream/src/aghermann/ui/sf/ica.cc +++ b/upstream/src/aghermann/ui/sf/ica.cc @@ -15,6 +15,7 @@ #include "aghermann/ica/ica.hh" #include "aghermann/ui/misc.hh" +#include "channel.hh" #include "sf.hh" #include "sf_cb.hh" diff --git a/upstream/src/aghermann/ui/sf/mainmenu_cb.cc b/upstream/src/aghermann/ui/sf/mainmenu_cb.cc index 4acd9cf..8171150 100644 --- a/upstream/src/aghermann/ui/sf/mainmenu_cb.cc +++ b/upstream/src/aghermann/ui/sf/mainmenu_cb.cc @@ -9,6 +9,8 @@ * License: GPL */ +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" #include "d/patterns.hh" #include "d/phasediff.hh" diff --git a/upstream/src/aghermann/ui/sf/montage-overlays.cc b/upstream/src/aghermann/ui/sf/montage-overlays.cc index 3572dca..8b184a7 100644 --- a/upstream/src/aghermann/ui/sf/montage-overlays.cc +++ b/upstream/src/aghermann/ui/sf/montage-overlays.cc @@ -14,7 +14,8 @@ #include "common/lang.hh" #include "libmetrics/bands.hh" #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" using namespace std; diff --git a/upstream/src/aghermann/ui/sf/montage.cc b/upstream/src/aghermann/ui/sf/montage.cc index 072d1ef..e4fab03 100644 --- a/upstream/src/aghermann/ui/sf/montage.cc +++ b/upstream/src/aghermann/ui/sf/montage.cc @@ -13,7 +13,8 @@ #include "common/lang.hh" #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" #include "d/patterns.hh" diff --git a/upstream/src/aghermann/ui/sf/montage_cb.cc b/upstream/src/aghermann/ui/sf/montage_cb.cc index d52b70a..bdf9475 100644 --- a/upstream/src/aghermann/ui/sf/montage_cb.cc +++ b/upstream/src/aghermann/ui/sf/montage_cb.cc @@ -13,7 +13,8 @@ #include <cairo/cairo.h> #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" #include "sf_cb.hh" #include "d/artifacts.hh" diff --git a/upstream/src/aghermann/ui/sf/sf.cc b/upstream/src/aghermann/ui/sf/sf.cc index c5021a3..861ff73 100644 --- a/upstream/src/aghermann/ui/sf/sf.cc +++ b/upstream/src/aghermann/ui/sf/sf.cc @@ -15,8 +15,10 @@ #include "common/config-validate.hh" #include "common/fs.hh" #include "libmetrics/bands.hh" +#include "aghermann/expdesign/subject.hh" #include "aghermann/ui/misc.hh" - +#include "aghermann/ui/mw/mw.hh" +#include "channel.hh" #include "sf.hh" #include "sf_cb.hh" #include "d/artifacts.hh" @@ -27,7 +29,7 @@ using namespace std; using namespace agh::ui; -size_t SScoringFacility::IntersignalSpace = 120, +size_t SScoringFacility::IntersignalSpace = 120, SScoringFacility::HypnogramHeight = 40, SScoringFacility::EMGProfileHeight = 30; @@ -351,6 +353,22 @@ channel_idx( SChannel* h) const return -1; } +time_t +SScoringFacility:: +start_time() const +{ + return channels.front().crecording.F().start_time(); +} + + + +size_t +SScoringFacility:: +pagesize() const +{ + return _p.pagesize(); +} + diff --git a/upstream/src/aghermann/ui/sf/sf.hh b/upstream/src/aghermann/ui/sf/sf.hh index 519d560..f698962 100644 --- a/upstream/src/aghermann/ui/sf/sf.hh +++ b/upstream/src/aghermann/ui/sf/sf.hh @@ -12,23 +12,23 @@ #ifndef AGH_AGHERMANN_UI_SF_SF_H_ #define AGH_AGHERMANN_UI_SF_SF_H_ -#include <map> +#include <forward_list> #include <list> +#include <string> #include <cairo/cairo.h> -#include <gtk/gtk.h> #include "common/alg.hh" #include "common/config-validate.hh" -#include "libsigproc/winfun.hh" -#include "libsigproc/sigproc.hh" -#include "libmetrics/mc-artifacts.hh" -#include "aghermann/patterns/patterns.hh" +//#include "libsigproc/winfun.hh" +//#include "libsigproc/sigproc.hh" +#include "libsigfile/page.hh" +#include "libsigfile/forward-decls.hh" #include "aghermann/expdesign/forward-decls.hh" #include "aghermann/ica/ica.hh" #include "aghermann/ui/globals.hh" #include "aghermann/ui/ui++.hh" -#include "aghermann/ui/mw/mw.hh" +//#include "aghermann/ui/mw/mw.hh" #include "widgets.hh" @@ -42,6 +42,8 @@ using namespace std; namespace agh { namespace ui { +class SExpDesignUI; + class SScoringFacility : public SScoringFacilityWidgets { @@ -70,239 +72,7 @@ class SScoringFacility const string& session() const { return _session; } // channels - struct SChannel { - - DELETE_DEFAULT_METHODS (SChannel); - - bool operator==( const string&) const; - bool operator==( const SChannel&) const; - - agh::CRecording& - crecording; - - // shortcuts - int - h() const - { return crecording.h(); } - const sigfile::SChannel& - schannel() const - { return crecording.F().channel_by_id( h()); } - const char* - name() const - { return schannel().name(); } - - sigfile::SFilterPack& - filters; - list<sigfile::SAnnotation>& - annotations; - sigfile::SArtifacts& - artifacts; - - SScoringFacility& - _p; - - // signal waveforms, cached here - valarray<TFloat> - signal_original, - signal_filtered, - signal_reconstituted; // while it's hot - void get_signal_original(); - void get_signal_filtered(); - - // filters - bool have_low_pass() const; - bool have_high_pass() const; - bool have_notch_filter() const; - size_t n_samples() const; - size_t samplerate() const; - - // artifacts - float percent_dirty; - float calculate_dirty_percent(); - void detect_artifacts( const metrics::mc::SArtifactDetectionPP&); - pair<double, double> - mark_flat_regions_as_artifacts( double at_least_this_long, double pad); - - // annotations - list<sigfile::SAnnotation*> - in_annotations( double time) const; - - // signal metrics - static pattern::SPatternPPack<TFloat> - pattern_params; - sigproc::SCachedLowPassCourse<TFloat> - signal_lowpass; - sigproc::SCachedBandPassCourse<TFloat> - signal_bandpass; - sigproc::SCachedEnvelope<TFloat> - signal_envelope; - sigproc::SCachedDzcdf<TFloat> - signal_dzcdf; - void - drop_cached_signal_properties() - { - signal_lowpass.drop(); - signal_bandpass.drop(); - signal_envelope.drop(); - signal_dzcdf.drop(); - } - - // profiles - // psd - struct SProfilePSD { - valarray<TFloat> - course; - double from, upto; - double display_scale; // saved via libconfig, requiring it to be double - array<valarray<TFloat>, metrics::TBand::TBand_total> - course_in_bands; - size_t focused_band, - uppermost_band; - }; - void get_psd_course(); - void get_psd_in_bands(); - SProfilePSD - psd; - // swu - struct SProfileSWU { - valarray<TFloat> - course; - double f0; - double display_scale; - }; - void get_swu_course(); - SProfileSWU - swu; - // mc - struct SProfileMC { - valarray<TFloat> - course; - double display_scale; - double f0; - }; - SProfileMC - mc; - void get_mc_course(); - - tuple<metrics::TType, valarray<TFloat>&> - which_profile( metrics::TType); - - void update_profile_display_scales(); - - // spectrum - valarray<TFloat> - spectrum; // per page, is volatile - float spectrum_upper_freq; - unsigned - spectrum_bins, - last_spectrum_bin; - void get_spectrum(); // at current page - void get_spectrum( size_t p); - - // raw profile - valarray<TFloat> - raw_profile; - void get_raw_profile(); - - // region - void mark_region_as_artifact( bool do_mark); - void mark_region_as_annotation( const string&, sigfile::SAnnotation::TType); - void mark_region_as_pattern(); - - // ctor, dtor - SChannel( agh::CRecording& r, SScoringFacility&, size_t y, int seq); - - double zeroy; - bool operator<( const SChannel&) const; - - double signal_display_scale; - - // saved flags - bool hidden, - draw_zeroline, - draw_original_signal, - draw_filtered_signal, - zeromean_original, - zeromean_filtered, - draw_psd, - draw_swu, - draw_mc, - draw_emg, - draw_psd_bands, - autoscale_profile, - draw_spectrum, - resample_signal, - resample_power, - draw_selection_course, - draw_selection_envelope, - draw_selection_dzcdf, - draw_phasic_spindle, - draw_phasic_Kcomplex, - draw_phasic_eyeblink; - bool discard_marked, - apply_reconstituted; - - forward_list<agh::confval::SValidator<bool>> config_keys_b; - forward_list<agh::confval::SValidator<int>> config_keys_d; - forward_list<agh::confval::SValidator<double>> config_keys_g; - - void update_channel_menu_items( double x); - void update_power_menu_items(); - void selectively_enable_selection_menu_items(); - - // selection and marquee - float marquee_mstart, - marquee_mend, // in terms of event->x - marquee_start, - marquee_end; // set on button_release - double selection_start_time, - selection_end_time; // in seconds - size_t selection_start, - selection_end; // in samples - TFloat selection_SS, - selection_SU; - size_t marquee_to_selection(); - void put_selection( size_t a, size_t e); - void put_selection( double a, double e); - private: - void _put_selection(); - - public: - float spp() const; - float fine_line() const; - int sample_at_click( double) const; - - GtkMenuItem - *menu_item_when_hidden; - - // comprehensive draw - void draw_for_montage( const string& fname, int width, int height); // to a file - void draw_for_montage( cairo_t*); // to montage - - protected: - void draw_page( cairo_t*, int wd, float zeroy, // writers to an svg file override zeroy (with 0) - bool draw_marquee) const; - void draw_overlays( cairo_t*, int wd, float zeroy) const; - - // strictly draw the signal waveform bare - // (also used as such in some child dialogs) - void draw_signal_original( size_t width, int vdisp, cairo_t *cr) const - { - draw_signal( signal_original, width, vdisp, cr); - } - void draw_signal_filtered( size_t width, int vdisp, cairo_t *cr) const - { - draw_signal( signal_filtered, width, vdisp, cr); - } - friend class SScoringFacility; - void draw_signal_reconstituted( size_t width, int vdisp, cairo_t *cr) const - { - draw_signal( signal_reconstituted, width, vdisp, cr); - } - // generic draw_signal wrapper - void draw_signal( const valarray<TFloat>& signal, - size_t width, int vdisp, cairo_t *cr) const; - }; + struct SChannel; list<SChannel> channels; size_t n_eeg_channels; @@ -326,8 +96,7 @@ class SScoringFacility // timeline time_t - start_time() const - { return channels.front().crecording.F().start_time(); } + start_time() const; vector<char> hypnogram; @@ -392,9 +161,7 @@ class SScoringFacility bool page_has_annotations( size_t, const SChannel&) const; // pagesize - size_t - pagesize() const - { return _p.pagesize(); } + size_t pagesize() const; static const array<unsigned, 9> DisplayPageSizeValues; @@ -539,6 +306,10 @@ class SScoringFacility SArtifactsSimpleDialog& artifacts_simple_d(); + struct SRK1968Dialog; + SRK1968Dialog& + rk1968_d(); + private: SPatternsDialog *_patterns_d; @@ -550,6 +321,8 @@ class SScoringFacility *_artifacts_d; SArtifactsSimpleDialog *_artifacts_simple_d; + SRK1968Dialog + *_rk1968_d; public: // menu support @@ -585,92 +358,6 @@ class SScoringFacility }; -inline bool -SScoringFacility::SChannel:: -operator==( const string& _name) const -{ - return _name == name(); -} -// inline bool -// SScoringFacility::SChannel:: -// operator==( const SChannel& rv) const -// { -// return name == rv.name; -// } - - -inline bool -SScoringFacility::SChannel:: -have_low_pass() const -{ - return isfinite(filters.low_pass_cutoff) - && filters.low_pass_cutoff > 0. - && filters.low_pass_order > 0; -} - -inline bool -SScoringFacility::SChannel:: -have_high_pass() const -{ - return isfinite(filters.high_pass_cutoff) - && filters.high_pass_cutoff > 0. - && filters.high_pass_order > 0; -} -inline bool -SScoringFacility::SChannel:: -have_notch_filter() const -{ - return filters.notch_filter != sigfile::SFilterPack::TNotchFilter::none; -} - -inline size_t -SScoringFacility::SChannel:: -n_samples() const -{ - return signal_filtered.size(); -} - - -inline bool -SScoringFacility::SChannel:: -operator<( const SChannel& rv) const -{ - return zeroy < rv.zeroy; -} - - -inline float -SScoringFacility::SChannel:: -spp() const -{ - return (float)samplerate() * _p.vpagesize() / _p.da_wd; -} -inline float -SScoringFacility::SChannel:: -fine_line() const -{ - return ((not resample_signal) and spp() > 1.) - ? agh::alg::value_within( .6 / (spp() + .2), .1, 3.) - : .6; -} -inline int -SScoringFacility::SChannel:: -sample_at_click( double x) const -{ - return _p.time_at_click( x) * samplerate(); -} - - - - -inline size_t -SScoringFacility::SChannel:: -samplerate() const -{ - return crecording.F().samplerate(h()); -} - - inline size_t SScoringFacility:: diff --git a/upstream/src/aghermann/ui/sf/sf_cb.cc b/upstream/src/aghermann/ui/sf/sf_cb.cc index 18ae60b..ce8ce42 100644 --- a/upstream/src/aghermann/ui/sf/sf_cb.cc +++ b/upstream/src/aghermann/ui/sf/sf_cb.cc @@ -9,6 +9,7 @@ * License: GPL */ +#include "aghermann/ui/mw/mw.hh" #include "sf.hh" using namespace std; diff --git a/upstream/src/libsigfile/forward-decls.hh b/upstream/src/libsigfile/forward-decls.hh index d325ed6..7c3c8dc 100644 --- a/upstream/src/libsigfile/forward-decls.hh +++ b/upstream/src/libsigfile/forward-decls.hh @@ -20,6 +20,10 @@ struct SPageWithSWA; struct SPageSimulated; struct SChannel; +struct SArtifacts; +struct SAnnotation; +struct SFilterPack; + class CSource; class CTypedSource; class CHypnogram; diff --git a/upstream/src/libsigfile/source-base.hh b/upstream/src/libsigfile/source-base.hh index 7edcfaf..34e688b 100644 --- a/upstream/src/libsigfile/source-base.hh +++ b/upstream/src/libsigfile/source-base.hh @@ -207,10 +207,13 @@ struct SFilterPack { notch_filter = TNotchFilter::none; } - double low_pass_cutoff; - unsigned low_pass_order; - double high_pass_cutoff; - unsigned high_pass_order; + double low_pass_cutoff; + unsigned + low_pass_order; + + double high_pass_cutoff; + unsigned + high_pass_order; TNotchFilter notch_filter; @@ -266,7 +269,7 @@ class CSource { // load_ancillary_files(); /// defer until, at least, n_channels is known } - CSource( CSource&&); + CSource (CSource&&); virtual ~CSource() { // if ( not (_flags & no_ancillary_files) ) -- Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/aghermann.git _______________________________________________ debian-med-commit mailing list debian-med-commit@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit