diff --git a/triqs/mc_tools/mc_move_set.hpp b/triqs/mc_tools/mc_move_set.hpp
index f7d8f0a6..43178a7b 100644
--- a/triqs/mc_tools/mc_move_set.hpp
+++ b/triqs/mc_tools/mc_move_set.hpp
@@ -96,6 +96,8 @@ namespace triqs { namespace mc_tools {
void reject() { reject_(); }
double acceptance_rate() const { return acceptance_rate_;}
+ uint64_t n_proposed_config () const { return NProposed;}
+ uint64_t n_accepted_config () const { return Naccepted;}
void collect_statistics(boost::mpi::communicator const & c) {
uint64_t nacc_tot=0, nprop_tot=1;
diff --git a/triqs/utility/debug_stream.hpp b/triqs/utility/debug_stream.hpp
new file mode 100644
index 00000000..32fd4bb8
--- /dev/null
+++ b/triqs/utility/debug_stream.hpp
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ *
+ * TRIQS: a Toolbox for Research in Interacting Quantum Systems
+ *
+ * Copyright (C) 2014 by O. Parcollet
+ *
+ * TRIQS is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * TRIQS. If not, see .
+ *
+ ******************************************************************************/
+#pragma once
+#include
+#include
+
+namespace triqs {
+namespace utility {
+
+ /**
+ * \brief Output stream with a condition
+ *
+ * This class behaves pretty much like a standard ostream
+ * except that the printing is "under" condition
+ *
+ * Example:
+ *
+ * debug_stream rep( std::cerr, [&mc](){ return mc.config_id() %100 == 0;}
+ *
+ */
+ class debug_stream {
+ std::ostream* out;
+ std::function condition;
+
+ public:
+ debug_stream(std::ostream* out_, std::function condition) : out(out_), condition(condition) {}
+ debug_stream(std::ostream* out_) : out(out_) {}
+
+ template debug_stream& operator<<(T const& x) {
+#ifdef TRIQS_DEBUG
+ if (condition && condition()) (*out) << x;
+#endif
+ return *this;
+ }
+
+ // this is the type of std::cout
+ typedef std::basic_ostream> CoutType;
+
+ // this is the function signature of std::endl
+ typedef CoutType& (*StandardEndLine)(CoutType&);
+
+ // define an operator<< to take in std::endl
+ debug_stream& operator<<(StandardEndLine manip) {
+ // call the function, but we cannot return it's value
+#ifdef TRIQS_DEBUG
+ if (condition && condition()) manip(*out);
+#endif
+ return *this;
+ }
+ };
+}
+}