Stan  2.10.0
probability, sampling & optimization
mcmc_writer.hpp
Go to the documentation of this file.
1 #ifndef STAN_SERVICES_SAMPLE_MCMC_WRITER_HPP
2 #define STAN_SERVICES_SAMPLE_MCMC_WRITER_HPP
3 
5 #include <stan/mcmc/sample.hpp>
7 #include <sstream>
8 #include <iomanip>
9 #include <string>
10 #include <vector>
11 
12 namespace stan {
13  namespace services {
14  namespace sample {
15 
23  template <class Model,
24  class SampleWriter, class DiagnosticWriter,
25  class MessageWriter>
26  class mcmc_writer {
27  private:
28  SampleWriter& sample_writer_;
29  DiagnosticWriter& diagnostic_writer_;
30  MessageWriter& message_writer_;
31 
32  public:
44  mcmc_writer(SampleWriter& sample_writer,
45  DiagnosticWriter& diagnostic_writer,
46  MessageWriter& message_writer)
47  : sample_writer_(sample_writer),
48  diagnostic_writer_(diagnostic_writer),
49  message_writer_(message_writer) {
50  }
51 
71  stan::mcmc::base_mcmc* sampler,
72  Model& model) {
73  std::vector<std::string> names;
74 
75  sample.get_sample_param_names(names);
76  sampler->get_sampler_param_names(names);
77  model.constrained_param_names(names, true, true);
78 
79  sample_writer_(names);
80  }
81 
82 
97  template <class RNG>
98  void write_sample_params(RNG& rng,
100  stan::mcmc::base_mcmc& sampler,
101  Model& model) {
102  std::vector<double> values;
103 
104  sample.get_sample_params(values);
105  sampler.get_sampler_params(values);
106 
107  Eigen::VectorXd model_values;
108 
109  std::stringstream ss;
110  model.write_array(rng,
111  const_cast<Eigen::VectorXd&>(sample.cont_params()),
112  model_values,
113  true, true,
114  &ss);
115  if (ss.str().length() > 0)
116  message_writer_(ss.str());
117 
118  for (int i = 0; i < model_values.size(); ++i)
119  values.push_back(model_values(i));
120 
121  sample_writer_(values);
122  }
123 
132  sample_writer_("Adaptation terminated");
133  sampler->write_sampler_state(sample_writer_);
134  }
135 
136 
150  stan::mcmc::base_mcmc* sampler,
151  Model& model) {
152  std::vector<std::string> names;
153 
154  sample.get_sample_param_names(names);
155  sampler->get_sampler_param_names(names);
156 
157  std::vector<std::string> model_names;
158  model.unconstrained_param_names(model_names, false, false);
159 
160  sampler->get_sampler_diagnostic_names(model_names, names);
161 
162  diagnostic_writer_(names);
163  }
164 
178  stan::mcmc::base_mcmc* sampler) {
179  std::vector<double> values;
180 
181  sample.get_sample_params(values);
182  sampler->get_sampler_params(values);
183  sampler->get_sampler_diagnostics(values);
184 
185  diagnostic_writer_(values);
186  }
187 
188 
203  template <class Writer>
204  void write_timing(double warmDeltaT, double sampleDeltaT,
205  Writer& writer) {
206  std::string title(" Elapsed Time: ");
207  std::stringstream ss;
208 
209 
210  writer();
211 
212  ss.str("");
213  ss << title << warmDeltaT << " seconds (Warm-up)";
214  writer(ss.str());
215 
216  ss.str("");
217  ss << std::string(title.size(), ' ') << sampleDeltaT
218  << " seconds (Sampling)";
219  writer(ss.str());
220 
221  ss.str("");
222  ss << std::string(title.size(), ' ')
223  << warmDeltaT + sampleDeltaT
224  << " seconds (Total)";
225  writer(ss.str());
226 
227  writer();
228  }
229 
230 
237  void write_timing(double warmDeltaT, double sampleDeltaT) {
238  write_timing(warmDeltaT, sampleDeltaT, sample_writer_);
239  write_timing(warmDeltaT, sampleDeltaT, diagnostic_writer_);
240  write_timing(warmDeltaT, sampleDeltaT, message_writer_);
241  }
242  };
243  }
244  }
245 }
246 
247 #endif
mcmc_writer writes out headers and samples
Definition: mcmc_writer.hpp:26
void write_timing(double warmDeltaT, double sampleDeltaT, Writer &writer)
Internal method.
void write_timing(double warmDeltaT, double sampleDeltaT)
Print timing information to all streams.
virtual void write_sampler_state(interface_callbacks::writer::base_writer &writer)
Definition: base_mcmc.hpp:29
void sample(stan::mcmc::base_mcmc *sampler, int num_warmup, int num_samples, int num_thin, int refresh, bool save, stan::services::sample::mcmc_writer< Model, SampleRecorder, DiagnosticRecorder, MessageRecorder > &mcmc_writer, stan::mcmc::sample &init_s, Model &model, RNG &base_rng, const std::string &prefix, const std::string &suffix, std::ostream &o, StartTransitionCallback &callback, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
Definition: sample.hpp:17
Probability, optimization and sampling library.
virtual void get_sampler_diagnostic_names(std::vector< std::string > &model_names, std::vector< std::string > &names)
Definition: base_mcmc.hpp:32
mcmc_writer(SampleWriter &sample_writer, DiagnosticWriter &diagnostic_writer, MessageWriter &message_writer)
Constructor.
Definition: mcmc_writer.hpp:44
virtual void get_sampler_params(std::vector< double > &values)
Definition: base_mcmc.hpp:26
void write_adapt_finish(stan::mcmc::base_mcmc *sampler)
Prints additional info to the streams.
void get_sample_params(std::vector< double > &values)
Definition: sample.hpp:50
void write_diagnostic_params(stan::mcmc::sample &sample, stan::mcmc::base_mcmc *sampler)
Print diagnostic params to the diagnostic stream.
virtual void get_sampler_diagnostics(std::vector< double > &values)
Definition: base_mcmc.hpp:35
double cont_params(int k) const
Definition: sample.hpp:25
virtual void get_sampler_param_names(std::vector< std::string > &names)
Definition: base_mcmc.hpp:24
void write_diagnostic_names(stan::mcmc::sample sample, stan::mcmc::base_mcmc *sampler, Model &model)
Print diagnostic names.
void write_sample_params(RNG &rng, stan::mcmc::sample &sample, stan::mcmc::base_mcmc &sampler, Model &model)
Outputs samples.
Definition: mcmc_writer.hpp:98
void write_sample_names(stan::mcmc::sample &sample, stan::mcmc::base_mcmc *sampler, Model &model)
Outputs parameter string names.
Definition: mcmc_writer.hpp:70
void get_sample_param_names(std::vector< std::string > &names)
Definition: sample.hpp:45

     [ Stan Home Page ] © 2011–2016, Stan Development Team.