queso-0.56.1
ExperimentModelOptions.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------bl-
2 //--------------------------------------------------------------------------
3 //
4 // QUESO - a library to support the Quantification of Uncertainty
5 // for Estimation, Simulation and Optimization
6 //
7 // Copyright (C) 2008-2015 The PECOS Development Team
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the Version 2.1 GNU Lesser General
11 // Public License as published by the Free Software Foundation.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc. 51 Franklin Street, Fifth Floor,
21 // Boston, MA 02110-1301 USA
22 //
23 //-----------------------------------------------------------------------el-
24 
25 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
26 #include <boost/program_options.hpp>
27 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
28 
29 #include <queso/ExperimentModelOptions.h>
30 #include <queso/Miscellaneous.h>
31 
32 namespace QUESO {
33 
35  :
36  m_prefix("em_"),
37  m_Gvalues(0),
44 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
45  m_parser(NULL),
46 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
47  m_option_help(m_prefix + "help"),
48  m_option_Gvalues(m_prefix + "Gvalues"),
49  m_option_a_v(m_prefix + "a_v"),
50  m_option_b_v(m_prefix + "b_v"),
51  m_option_a_rho_v(m_prefix + "a_rho_v"),
52  m_option_b_rho_v(m_prefix + "b_rho_v"),
53  m_option_a_y(m_prefix + "a_y"),
54  m_option_b_y(m_prefix + "b_y")
55 {
56 }
57 
59  prefix)
60  :
61  m_prefix((std::string)(prefix) + "em_"),
62  m_Gvalues(0),
69 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
70  m_parser(new BoostInputOptionsParser(env->optionsInputFileName())),
71 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
72  m_option_help(m_prefix + "help"),
73  m_option_Gvalues(m_prefix + "Gvalues"),
74  m_option_a_v(m_prefix + "a_v"),
75  m_option_b_v(m_prefix + "b_v"),
76  m_option_a_rho_v(m_prefix + "a_rho_v"),
77  m_option_b_rho_v(m_prefix + "b_rho_v"),
78  m_option_a_y(m_prefix + "a_y"),
79  m_option_b_y(m_prefix + "b_y")
80 {
81 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
82  m_parser->registerOption(m_option_help, "produce help message for experiment model options");
90 
92 
93  m_parser->getOption<std::vector<unsigned int> >(m_option_Gvalues, m_Gvalues);
100 #else
101 
102  // UQ_EXPERIMENT_MODEL_G_VALUES_ODV is the empty set (string) by default
103  unsigned int size = env->input().vector_variable_size(m_option_Gvalues);
104  for (unsigned int i = 0; i < size; i++) {
105  // We default to empty set, so the default values are actually never
106  // used here
107  unsigned int value = env->input()(m_option_Gvalues, i, i);
108  m_Gvalues.push_back(value);
109  }
110 
117 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
118 }
119 
121 {
122 }
123 
125 {
126  this->copy(src);
127 }
128 
131 {
132  this->copy(rhs);
133  return *this;
134 }
135 
136 // void
137 // EmOptionsValues::defineOptions()
138 // {
139 // (*m_optionsDescription).add_options()
140 // (m_option_help.c_str(), "produce help message for experiment model options")
141 // (m_option_Gvalues.c_str(), boost::program_options::value<std::string >()->default_value(UQ_EXPERIMENT_MODEL_G_VALUES_ODV), "G values" )
142 // (m_option_a_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_A_V_ODV ), "a_v" )
143 // (m_option_b_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_B_V_ODV ), "b_v" )
144 // (m_option_a_rho_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_A_RHO_V_ODV ), "a_rho_v" )
145 // (m_option_b_rho_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_B_RHO_V_ODV ), "b_rho_v" )
146 // (m_option_a_y.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_A_Y_ODV ), "a_y" )
147 // (m_option_b_y.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_B_Y_ODV ), "b_y" )
148 // ;
149 // }
150 //
151 // void
152 // EmOptionsValues::getOptionValues()
153 // {
154 // if ((*m_optionsMap).count(m_option_help)) {
155 // if (m_env->subDisplayFile()) {
156 // *m_env->subDisplayFile() << *m_optionsDescription
157 // << std::endl;
158 // }
159 // }
160 //
161 // std::vector<double> tmpValues(0,0.);
162 // if ((*m_optionsMap).count(m_option_Gvalues)) {
163 // std::string inputString = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_Gvalues]).as<std::string>();
164 // MiscReadDoublesFromString(inputString,tmpValues);
165 // //if (m_env->subDisplayFile()) {
166 // // *m_env->subDisplayFile() << "In ExperimentModelOptions::getMyOptionValues(): tmpValues =";
167 // // for (unsigned int i = 0; i < tmpValues.size(); ++i) {
168 // // *m_env->subDisplayFile() << " " << tmpValues[i];
169 // // }
170 // // *m_env->subDisplayFile() << std::endl;
171 // //}
172 // unsigned int tmpSize = tmpValues.size();
173 // m_Gvalues.clear();
174 // m_Gvalues.resize(tmpSize,0);
175 // for (unsigned int i = 0; i < tmpSize; ++i) {
176 // m_Gvalues[i] = (unsigned int) tmpValues[i];
177 // }
178 // }
179 //
180 // if ((*m_optionsMap).count(m_option_a_v)) {
181 // m_a_v = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_a_v]).as<double>();
182 // }
183 //
184 // if ((*m_optionsMap).count(m_option_b_v)) {
185 // m_b_v = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_b_v]).as<double>();
186 // }
187 //
188 // if ((*m_optionsMap).count(m_option_a_rho_v)) {
189 // m_a_rho_v = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_a_rho_v]).as<double>();
190 // }
191 //
192 // if ((*m_optionsMap).count(m_option_b_rho_v)) {
193 // m_b_rho_v = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_b_rho_v]).as<double>();
194 // }
195 //
196 // if ((*m_optionsMap).count(m_option_a_y)) {
197 // m_a_y = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_a_y]).as<double>();
198 // }
199 //
200 // if ((*m_optionsMap).count(m_option_b_y)) {
201 // m_b_y = ((const boost::program_options::variable_value&) (*m_optionsMap)[m_option_b_y]).as<double>();
202 // }
203 // }
204 
205 void
207 {
208  m_Gvalues = src.m_Gvalues;
209  m_a_v = src.m_a_v;
210  m_b_v = src.m_b_v;
211  m_a_rho_v = src.m_a_rho_v;
212  m_b_rho_v = src.m_b_rho_v;
213  m_a_y = src.m_a_y;
214  m_b_y = src.m_b_y;
215 
216  return;
217 }
218 
220  const BaseEnvironment& env,
221  const char* prefix)
222  :
223  m_ov (),
224  m_prefix ((std::string)(prefix) + "em_"),
225  m_env (env),
226 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
227  m_optionsDesc (new boost::program_options::options_description("Experiment model options")),
228 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
229  m_option_help (m_prefix + "help" ),
230  m_option_Gvalues(m_prefix + "Gvalues"),
231  m_option_a_v (m_prefix + "a_v" ),
232  m_option_b_v (m_prefix + "b_v" ),
233  m_option_a_rho_v(m_prefix + "a_rho_v"),
234  m_option_b_rho_v(m_prefix + "b_rho_v"),
235  m_option_a_y (m_prefix + "a_y" ),
236  m_option_b_y (m_prefix + "b_y" )
237 {
239 
240  queso_require_not_equal_to_msg(m_env.optionsInputFileName(), std::string(""), std::string("this constructor is incompatible with the abscense of an options input file"));
241 }
242 
244  const BaseEnvironment& env,
245  const char* prefix,
246  const EmOptionsValues& alternativeOptionsValues)
247  :
248  m_ov (alternativeOptionsValues),
249  m_prefix ((std::string)(prefix) + "em_"),
250  m_env (env),
251 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
252  m_optionsDesc (NULL),
253 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
254  m_option_help (m_prefix + "help" ),
255  m_option_Gvalues(m_prefix + "Gvalues"),
256  m_option_a_v (m_prefix + "a_v" ),
257  m_option_b_v (m_prefix + "b_v" ),
258  m_option_a_rho_v(m_prefix + "a_rho_v"),
259  m_option_b_rho_v(m_prefix + "b_rho_v"),
260  m_option_a_y (m_prefix + "a_y" ),
261  m_option_b_y (m_prefix + "b_y" )
262 {
264 
265  queso_require_equal_to_msg(m_env.optionsInputFileName(), std::string(""), std::string("this constructor is incompatible with the existence of an options input file"));
266 
267  if (m_env.subDisplayFile() != NULL) {
268  *m_env.subDisplayFile() << "In ExperimentModelOptions::constructor(2)"
269  << ": after setting values of options with prefix '" << m_prefix
270  << "', state of object is:"
271  << "\n" << *this
272  << std::endl;
273  }
274 }
275 
277 {
279 
280 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
281  if (m_optionsDesc) delete m_optionsDesc;
282 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
283 }
284 
285 void
287 {
289 
290 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
291  queso_require_msg(m_optionsDesc, "m_optionsDesc variable is NULL");
292 
296 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
297 
298  if (m_env.subDisplayFile() != NULL) {
299  *m_env.subDisplayFile() << "In ExperimentModelOptions::scanOptionsValues()"
300  << ": after reading values of options with prefix '" << m_prefix
301  << "', state of object is:"
302  << "\n" << *this
303  << std::endl;
304  }
305 
306  return;
307 }
308 
309 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
310 void
311 ExperimentModelOptions::defineMyOptions(boost::program_options::options_description& optionsDesc) const
312 {
314 
315  optionsDesc.add_options()
316  (m_option_help.c_str(), "produce help message for experiment model options")
317  (m_option_Gvalues.c_str(), boost::program_options::value<std::string >()->default_value(UQ_EXPERIMENT_MODEL_G_VALUES_ODV), "G values" )
318  (m_option_a_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_A_V_ODV ), "a_v" )
319  (m_option_b_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_B_V_ODV ), "b_v" )
320  (m_option_a_rho_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_A_RHO_V_ODV ), "a_rho_v" )
321  (m_option_b_rho_v.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_B_RHO_V_ODV ), "b_rho_v" )
322  (m_option_a_y.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_A_Y_ODV ), "a_y" )
323  (m_option_b_y.c_str(), boost::program_options::value<double >()->default_value(UQ_EXPERIMENT_MODEL_B_Y_ODV ), "b_y" )
324  ;
325 
326  return;
327 }
328 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
329 
330 #ifndef DISABLE_BOOST_PROGRAM_OPTIONS
331 void
332 ExperimentModelOptions::getMyOptionValues(boost::program_options::options_description& optionsDesc)
333 {
335 
336  if (m_env.allOptionsMap().count(m_option_help)) {
337  if (m_env.subDisplayFile()) {
338  *m_env.subDisplayFile() << optionsDesc
339  << std::endl;
340  }
341  }
342 
343  std::vector<double> tmpValues(0,0.);
344  if (m_env.allOptionsMap().count(m_option_Gvalues)) {
345  std::string inputString = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_Gvalues]).as<std::string>();
346  MiscReadDoublesFromString(inputString,tmpValues);
347  //if (m_env.subDisplayFile()) {
348  // *m_env.subDisplayFile() << "In ExperimentModelOptions::getMyOptionValues(): tmpValues =";
349  // for (unsigned int i = 0; i < tmpValues.size(); ++i) {
350  // *m_env.subDisplayFile() << " " << tmpValues[i];
351  // }
352  // *m_env.subDisplayFile() << std::endl;
353  //}
354  unsigned int tmpSize = tmpValues.size();
355  m_ov.m_Gvalues.clear();
356  m_ov.m_Gvalues.resize(tmpSize,0);
357  for (unsigned int i = 0; i < tmpSize; ++i) {
358  m_ov.m_Gvalues[i] = (unsigned int) tmpValues[i];
359  }
360  }
361 
362  if (m_env.allOptionsMap().count(m_option_a_v)) {
363  m_ov.m_a_v = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_a_v]).as<double>();
364  }
365 
366  if (m_env.allOptionsMap().count(m_option_b_v)) {
367  m_ov.m_b_v = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_b_v]).as<double>();
368  }
369 
370  if (m_env.allOptionsMap().count(m_option_a_rho_v)) {
371  m_ov.m_a_rho_v = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_a_rho_v]).as<double>();
372  }
373 
374  if (m_env.allOptionsMap().count(m_option_b_rho_v)) {
375  m_ov.m_b_rho_v = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_b_rho_v]).as<double>();
376  }
377 
378  if (m_env.allOptionsMap().count(m_option_a_y)) {
379  m_ov.m_a_y = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_a_y]).as<double>();
380  }
381 
382  if (m_env.allOptionsMap().count(m_option_b_y)) {
383  m_ov.m_b_y = ((const boost::program_options::variable_value&) m_env.allOptionsMap()[m_option_b_y]).as<double>();
384  }
385 
386  return;
387 }
388 #endif // DISABLE_BOOST_PROGRAM_OPTIONS
389 
390 void
391 ExperimentModelOptions::print(std::ostream& os) const
392 {
394 
395  os << "\n" << m_option_Gvalues << " = ";
396  for (unsigned int i = 0; i < m_ov.m_Gvalues.size(); ++i) {
397  os << m_ov.m_Gvalues[i] << " ";
398  }
399  os << "\n" << m_option_a_v << " = " << m_ov.m_a_v
400  << "\n" << m_option_b_v << " = " << m_ov.m_b_v
401  << "\n" << m_option_a_rho_v << " = " << m_ov.m_a_rho_v
402  << "\n" << m_option_b_rho_v << " = " << m_ov.m_b_rho_v
403  << "\n" << m_option_a_y << " = " << m_ov.m_a_y
404  << "\n" << m_option_b_y << " = " << m_ov.m_b_y
405  << std::endl;
406 
407  return;
408 }
409 
410 std::ostream& operator<<(std::ostream& os, const ExperimentModelOptions& obj)
411 {
413 
414  obj.print(os);
415 
416  return os;
417 }
418 
419 } // End namespace QUESO
const GetPot & input() const
The GetPot input file parser.
Definition: Environment.C:1148
std::ofstream * subDisplayFile() const
Access function for m_subDisplayFile (displays file on stream).
Definition: Environment.C:320
#define UQ_EXPERIMENT_MODEL_A_Y_ODV
std::string optionsInputFileName() const
Access to the attribute m_optionsInputFileName, which stores the name of the input file passed by the...
Definition: Environment.C:353
#define UQ_EXPERIMENT_MODEL_A_RHO_V_ODV
This (virtual) class sets up the environment underlying the use of the QUESO library by an executable...
Definition: Environment.h:197
void copy(const EmOptionsValues &src)
EmOptionsValues & operator=(const EmOptionsValues &rhs)
unsigned vector_variable_size(const char *VarName) const
Definition: getpot.h:2532
void getOption(std::string &name, T &value)
Get option name from the parser and set value to the parsed value.
#define queso_require_equal_to_msg(expr1, expr2, msg)
Definition: asserts.h:73
boost::program_options::variables_map & allOptionsMap() const
Definition: Environment.C:385
void MiscReadDoublesFromString(const std::string &inputString, std::vector< double > &outputDoubles)
Definition: Miscellaneous.C:40
void print(std::ostream &os) const
std::vector< unsigned int > m_Gvalues
#define UQ_EXPERIMENT_MODEL_B_V_ODV
#define queso_deprecated()
Definition: Defines.h:134
std::ostream & operator<<(std::ostream &os, const BaseEnvironment &obj)
void scanInputFileForMyOptions(const boost::program_options::options_description &optionsDesc) const
This method scans the input file provided by the user to QUESO.
Definition: Environment.C:396
void scanInputFile()
This is the method that parses the input file.
#define UQ_EXPERIMENT_MODEL_B_Y_ODV
BoostInputOptionsParser * m_parser
ExperimentModelOptions(const BaseEnvironment &env, const char *prefix)
#define UQ_EXPERIMENT_MODEL_A_V_ODV
void getMyOptionValues(boost::program_options::options_description &optionsDesc)
#define queso_require_not_equal_to_msg(expr1, expr2, msg)
Definition: asserts.h:74
#define UQ_EXPERIMENT_MODEL_B_RHO_V_ODV
void registerOption(std::string name, T defaultValue, std::string description)
Call this to register an option with the parser.
#define queso_require_msg(asserted, msg)
Definition: asserts.h:69
#define UQ_EXPERIMENT_MODEL_G_VALUES_ODV
void defineMyOptions(boost::program_options::options_description &optionsDesc) const
boost::program_options::options_description * m_optionsDesc

Generated on Thu Dec 15 2016 13:23:10 for queso-0.56.1 by  doxygen 1.8.5