The following commit has been merged in the master branch:
commit c92f1af1f84f1f409d000733395a1bb8e3615d3f
Author: Andrei Zavada <[email protected]>
Date:   Sun Sep 30 21:22:51 2012 +0300

    CExpDesign::for_all_modruns

diff --git a/src/expdesign/primaries.cc b/src/expdesign/primaries.cc
index 7d577c5..49dc385 100644
--- a/src/expdesign/primaries.cc
+++ b/src/expdesign/primaries.cc
@@ -190,6 +190,42 @@ for_all_recordings( const TRecordingOpFun& F, const 
TRecordingReportFun& report,
                        report( *get<0>(v[i]), *get<1>(v[i]), *get<2>(v[i]), 
*get<3>(v[i]), *get<4>(v[i]),
                                ++global_i, v.size());
                }
+}
+
+void
+agh::CExpDesign::
+for_all_modruns( const TModelRunOpFun& F, const TModelRunReportFun& report, 
const TModelRunFilterFun& filter)
+{
+       vector<tuple<CJGroup*,
+                    CSubject*,
+                    const string*,
+                    const sigfile::TMetricType*,
+                    const string*,
+                    const pair<float,float>*,
+                    ach::CModelRun*>> v;
+       for ( auto& G : groups )
+               for ( auto& J : G.second )
+                       for ( auto& D : J.measurements )
+                               for ( auto& T : D.second.modrun_sets )
+                                       for ( auto& H : T.second )
+                                               for ( auto& Q : H.second )
+                                                       if ( filter(Q.second) )
+                                                               v.emplace_back(
+                                                                       
make_tuple (
+                                                                               
&G.second, &J, &D.first,
+                                                                               
&T.first,
+                                                                               
&H.first,
+                                                                               
&Q.first,
+                                                                               
&Q.second));
+       size_t global_i = 0;
+#pragma omp parallel for
+       for ( size_t i = 0; i < v.size(); ++i ) {
+#pragma omp critical
+               {
+                       report( *get<0>(v[i]), *get<1>(v[i]), *get<2>(v[i]), 
*get<3>(v[i]), *get<4>(v[i]), *get<5>(v[i]), *get<6>(v[i]),
+                               ++global_i, v.size());
+               }
+               F( *get<6>(v[i]));
        }
 }
 
diff --git a/src/expdesign/primaries.hh b/src/expdesign/primaries.hh
index 476cd10..0501290 100644
--- a/src/expdesign/primaries.hh
+++ b/src/expdesign/primaries.hh
@@ -410,6 +410,22 @@ class CExpDesign {
        void
        for_all_recordings( const TRecordingOpFun&, const TRecordingReportFun&, 
const TRecordingFilterFun&);
 
+       typedef function<void(ach::CModelRun&)>
+               TModelRunOpFun;
+       typedef function<void(const CJGroup&,
+                             const CSubject&,
+                             const string&,
+                             const sigfile::TMetricType&,
+                             const string&,
+                             const pair<float,float>&,
+                             const ach::CModelRun&,
+                             size_t, size_t)>
+               TModelRunReportFun;
+       typedef function<bool(ach::CModelRun&)>
+               TModelRunFilterFun;
+       void
+       for_all_modruns( const TModelRunOpFun&, const TModelRunReportFun&, 
const TModelRunFilterFun&);
+
       // inventory
        sigfile::SFFTParamSet
                fft_params;
diff --git a/src/ui/expdesign-simulations_cb.cc 
b/src/ui/expdesign-simulations_cb.cc
index dfbbcde..3a58cbe 100644
--- a/src/ui/expdesign-simulations_cb.cc
+++ b/src/ui/expdesign-simulations_cb.cc
@@ -91,19 +91,39 @@ iSimulationsRunBatch_activate_cb( GtkMenuItem*, gpointer 
userdata)
                                                                             
ED.display_profile_type,
                                                                             
range_from, range_upto,
                                                                             
sim);
-                                               if ( retval ) {
-                                                       ; // didn't work
-                                               } else {
-                                                       snprintf_buf( "Running 
simulation in channel %s (%g-%g Hz) for %s (session %s) ...",
-                                                                     
H.c_str(), range_from, range_upto,
-                                                                     
J.c_str(), D.c_str());
-                                                       
ED.buf_on_main_status_bar();
-                                                       sim -> 
watch_simplex_move( nullptr);
-                                               }
                                        }
-                                       ED.populate_2();
-                                       gtk_flush();
                                }
+               using namespace agh;
+               CExpDesign::TModelRunOpFun F =
+                       []( ach::CModelRun& R)
+                       {
+                               R.watch_simplex_move( nullptr);
+                       };
+               CExpDesign::TModelRunReportFun report =
+                       [&ED]( const CJGroup&,
+                              const CSubject& J,
+                              const string& D,
+                              const sigfile::TMetricType& T,
+                              const string& H,
+                              const pair<float,float>& Q,
+                              const ach::CModelRun&,
+                              size_t i, size_t n)
+                       {
+                               snprintf_buf( "(%zu of %zu) Running simulation 
in channel %s (%g-%g Hz) for %s (session %s) ...",
+                                             i, n, H.c_str(), Q.first, 
Q.second,
+                                             J.name(), D.c_str());
+                               ED.buf_on_main_status_bar();
+                               gtk_flush();
+                       };
+               CExpDesign::TModelRunFilterFun filter =
+                       []( ach::CModelRun&) -> bool
+                       {
+                               return true;
+                       };
+               ED.ED->for_all_modruns( F, report, filter);
+
+               ED.populate_2();
+
                snprintf_buf( "Done");
                ED.buf_on_main_status_bar();
        }

-- 
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