Jpp  master_rocky-37-gf0c5bc59d
the software that should make you happy
JOscParametersHelper.hh
Go to the documentation of this file.
1 #ifndef __JOSCPROB__JOSCPARAMETERSHELPER__
2 #define __JOSCPROB__JOSCPARAMETERSHELPER__
3 
4 #include <memory>
5 
6 #include "JLang/JException.hh"
7 
9 
10 
11 /**
12  * \author bjung
13  */
14 
15 namespace JOSCPROB {}
16 namespace JPP { using namespace JOSCPROB; }
17 
18 namespace JOSCPROB {
19 
20  /**
21  * Helper class for oscillation parameters.
22  */
23  template<class T>
25  public std::shared_ptr<JOscParametersInterface<T> >
26  {
29 
32 
35 
36  typedef std::shared_ptr<JOscParameters_t> pointer_type;
37 
38  using pointer_type::reset;
39 
40 
41  /**
42  * Default constructor.
43  */
45  pointer_type()
46  {}
47 
48 
49  /**
50  * Constructor.
51  *
52  * \param p pointer to oscillation parameters
53  */
55  pointer_type(p)
56  {}
57 
58 
59  /**
60  * Constructor.
61  *
62  * \param parameters oscillation parameters
63  */
65  {
66  this->configure(parameters);
67  }
68 
69 
70  /**
71  * Constructor.
72  *
73  * \param parameters oscillation parameters
74  * \param name parameter name
75  * \param value parameter value
76  * \param args remaining pairs of parameter names and values
77  */
78  template<class ...Args>
80  const std::string& name,
81  argument_type value,
82  const Args& ...args)
83  {
84  this->configure(parameters);
85  this->set(name, value, args...);
86  }
87 
88 
89  /**
90  * Configure oscillation parameters.
91  *
92  * \param p shared pointer to oscillation parameters
93  */
94  void configure(const pointer_type& p)
95  {
96  static_cast<pointer_type&>(*this);
97  }
98 
99 
100  /**
101  * Configure oscillation parameters.
102  *
103  * \param parameters oscillation parameters
104  */
105  void configure(const JOscParameters_t& parameters)
106  {
107  using namespace std;
108  using namespace JPP;
109 
110  JOscParameters_t* p = dynamic_cast<JOscParameters_t*>(parameters.clone());
111 
112  if (p != NULL) {
113  reset(p);
114  } else {
115  THROW(JNullPointerException, "JOscParametersHelper::configure(): Unable to retrieve oscillation parameters interface.");
116  }
117  }
118 
119 
120  /**
121  * Get reference to oscillation parameters interface.
122  *
123  * \return reference to oscillation parameters interface
124  */
126  {
127  using namespace JPP;
128 
129  if (static_cast<const JOscParametersHelper_t&>(*this)) {
130  return *(this->get());
131  } else {
132  THROW(JNullPointerException, "JOscParametersHelper::getParameters(): Oscillation parameters interface is not set.");
133  }
134  }
135 
136 
137  /**
138  * Get pointer to oscillation parameters interface.
139  *
140  * \return pointer to oscillation parameters interface
141  */
143  {
144  return pointer_type::get();
145  }
146 
147 
148  /**
149  * Get oscillation parameter.
150  *
151  * \param name parameter name
152  * \return parameter
153  */
154  JOscParameter_t& get(const std::string& name) const
155  {
156  return getParameters().get(name);
157  }
158 
159 
160 
161  /**
162  * Set value for a given oscillation parameter.
163  *
164  * \param name parameter name
165  * \param value parameter value
166  */
167  void set(const std::string& name,
168  const value_type& value) const
169  {
170  getParameters().set(name, value);
171  }
172 
173 
174  /**
175  * Set value for given list of oscillation parameters.
176  *
177  * \param name parameter name
178  * \param value parameter value
179  * \param args remaining pairs of parameter names and values
180  */
181  template<class ...Args>
182  void set(const std::string& name,
183  const value_type& value,
184  const Args& ...args) const
185  {
186  this->set(name, value);
187  this->set(args...);
188  }
189 
190 
191  /**
192  * Set oscillation parameters.
193  *
194  * \param parameters oscillation parameters
195  */
196  void set(const JOscParametersInterface<value_type>& parameters) const
197  {
198  using namespace std;
199  using namespace JPP;
200 
201  const JProperties properties = parameters.getProperties();
202 
203  for (JProperties::const_iterator i = properties.cbegin(); i != properties.cend(); ++i) {
204 
205  const JOscParameter<value_type>& parameter = i->second.getValue<const JOscParameter<value_type> >();
206 
207  this->set(i->first, parameter.getValue());
208  }
209  }
210 
211 
212  /**
213  * Check validity of oscillation parameters.
214  *
215  * \return true if all oscillation parameters are valid; else false
216  */
217  bool is_valid() const
218  {
219  return getParameters().is_valid();
220  }
221  };
222 }
223 
224 #endif
Exceptions.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
Utility class to parse parameter values.
Definition: JProperties.hh:501
Exception for null pointer operation.
Definition: JException.hh:234
Parameter class.
Definition: JParameter.hh:36
const value_type getValue() const
Get value of parameter.
Definition: JParameter.hh:82
Interface class for sets of oscillation parameters.
virtual JProperties getProperties(const JEquationParameters &equation=JOscParametersInterface_t::getEquationParameters())=0
Get properties of this class.
const JOscParameter_t & get(const std::string &name) const
Get oscillation parameter.
JParameter_t::argument_type argument_type
void set(const std::string &name, const value_type &value)
Set value for a given oscillation parameter.
bool is_valid() const
Check validity of oscillation parameters.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
void reset(T &value)
Reset value.
Definition: JSTDTypes.hh:14
virtual clone_type clone() const override
Get clone of this object.
Definition: JClonable.hh:69
Abstract base class for oscillation parameter.
Helper class for oscillation parameters.
JOscParameters_t * get() const
Get pointer to oscillation parameters interface.
void configure(const pointer_type &p)
Configure oscillation parameters.
JOscParametersHelper(const JOscParameters_t &parameters)
Constructor.
JOscParametersHelper< T > JOscParametersHelper_t
JOscParameter_t & get(const std::string &name) const
Get oscillation parameter.
void configure(const JOscParameters_t &parameters)
Configure oscillation parameters.
bool is_valid() const
Check validity of oscillation parameters.
std::shared_ptr< JOscParameters_t > pointer_type
JOscParameters_t::value_type value_type
JOscParametersHelper(const JOscParameters_t &parameters, const std::string &name, argument_type value, const Args &...args)
Constructor.
JOscParametersInterface< T > JOscParameters_t
void set(const std::string &name, const value_type &value, const Args &...args) const
Set value for given list of oscillation parameters.
JOscParametersHelper(const pointer_type &p)
Constructor.
JOscParameters_t & getParameters() const
Get reference to oscillation parameters interface.
void set(const JOscParametersInterface< value_type > &parameters) const
Set oscillation parameters.
JOscParameters_t::JOscParameter_t JOscParameter_t
JOscParametersHelper()
Default constructor.
JOscParameters_t::argument_type argument_type
void set(const std::string &name, const value_type &value) const
Set value for a given oscillation parameter.
JOscParameters_t::JParameter_t JParameter_t