The following commit has been merged in the master branch:
commit 87b65a8023f50a30ddf201bcd7a442771c7b3498
Author: Andrei Zavada <[email protected]>
Date:   Sun Apr 14 00:44:22 2013 +0300

    ensure profile_scale_* get calculated

diff --git a/src/ui/mw/measurements.cc b/src/ui/mw/measurements.cc
index c5ed48f..3bdcaf6 100644
--- a/src/ui/mw/measurements.cc
+++ b/src/ui/mw/measurements.cc
@@ -103,6 +103,8 @@ draw_timeline( cairo_t *cr) const
                case metrics::TType::mc : scale = _p._p.profile_scale_mc;  
break;
                default: break;
                }
+               if ( !isfinite(scale) || scale <= 0. )
+                       scale = _p._p.calculate_profile_scale();
 
              // profile
                auto& episodes = csubject.measurements[*_p._p._AghDi].episodes;
diff --git a/src/ui/mw/mw.cc b/src/ui/mw/mw.cc
index 0545e44..5389505 100644
--- a/src/ui/mw/mw.cc
+++ b/src/ui/mw/mw.cc
@@ -507,7 +507,7 @@ adjust_op_freq_spinbuttons()
 
 
 
-void
+double
 aghui::SExpDesignUI::
 calculate_profile_scale()
 {
@@ -516,24 +516,33 @@ calculate_profile_scale()
        for ( auto& G : groups )
                for ( auto &J : G )
                        if ( J.cprofile && !J.cprofile->mm_list().empty() ) {
-                               avg_profile_height += J.cprofile->metric_avg();
-                               ++valid_episodes;
+                               auto this_episode_avg = 
J.cprofile->metric_avg();
+                               if ( isfinite(this_episode_avg) ) {
+                                       avg_profile_height += this_episode_avg;
+                                       printf( "this_episode_avg %g\n", 
this_episode_avg);
+                                       ++valid_episodes;
+                               }
                        }
-       avg_profile_height /= valid_episodes;
+       double value =
+               unlikely (valid_episodes == 0)
+               ? 1.
+               : timeline_height / valid_episodes / avg_profile_height * .3;
 
        switch ( display_profile_type ) {
        case metrics::TType::psd:
-               profile_scale_psd = timeline_height / avg_profile_height * .3;
+               profile_scale_psd = value;
            break;
        case metrics::TType::swu:
-               profile_scale_swu = timeline_height / avg_profile_height * .3;
+               profile_scale_swu = value;
            break;
        case metrics::TType::mc:
-               profile_scale_mc = timeline_height / avg_profile_height * .3;
+               profile_scale_mc  = value;
            break;
        default:
            break;
        }
+
+       return value;
 }
 
 
diff --git a/src/ui/mw/mw.hh b/src/ui/mw/mw.hh
index 3af454e..2d694f1 100644
--- a/src/ui/mw/mw.hh
+++ b/src/ui/mw/mw.hh
@@ -261,7 +261,7 @@ class SExpDesignUI
        double  profile_scale_psd,
                profile_scale_swu,
                profile_scale_mc;
-       void calculate_profile_scale();
+       double calculate_profile_scale();
        void modify_profile_scales( GdkScrollDirection);
 
        bool    autoscale;
diff --git a/src/ui/mw/populate.cc b/src/ui/mw/populate.cc
index b08efe0..2fdca87 100644
--- a/src/ui/mw/populate.cc
+++ b/src/ui/mw/populate.cc
@@ -421,9 +421,6 @@ populate_1()
        timeline_width = (timeline_end - timeline_start) / 3600 * timeline_pph;
        timeline_pages = (timeline_end - timeline_start) / 
ED->fft_params.pagesize;
 
-       if ( profile_scale_psd == 0. || profile_scale_mc == 0. || 
profile_scale_swu == 0. ) // not previously saved
-               calculate_profile_scale();
-
        printf( "SExpDesignUI::populate_1(): common timeline:\n");
        fputs( asctime( localtime(&earliest_start)), stdout);
        fputs( asctime( localtime(&latest_end)), stdout);

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to