[med-svn] [SCM] aghermann branch, master, updated. 3b87b4f8039ed683022537a0599b7dea069974d2
Andrei Zavada
johnhommer at gmail.com
Sun Sep 30 22:40:53 UTC 2012
The following commit has been merged in the master branch:
commit c92f1af1f84f1f409d000733395a1bb8e3615d3f
Author: Andrei Zavada <johnhommer at gmail.com>
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
More information about the debian-med-commit
mailing list