[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