Jpp master_rocky-44-g75b7c4f75
the software that should make you happy
Loading...
Searching...
No Matches
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
15namespace JOSCPROB {}
16namespace JPP { using namespace JOSCPROB; }
17
18namespace 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 */
47
48
49 /**
50 * Constructor.
51 *
52 * \param p pointer to oscillation parameters
53 */
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.
Utility class to parse parameter values.
Exception for null pointer operation.
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.
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.
JParameter_t::argument_type argument_type
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
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.
JOscParametersInterface< T > JOscParameters_t
void configure(const pointer_type &p)
Configure oscillation parameters.
JOscParametersHelper< T > JOscParametersHelper_t
JOscParameters_t * get() const
Get pointer to oscillation parameters interface.
JOscParametersHelper(const JOscParameters_t &parameters)
Constructor.
void configure(const JOscParameters_t &parameters)
Configure oscillation parameters.
bool is_valid() const
Check validity of oscillation parameters.
JOscParameters_t::JParameter_t JParameter_t
JOscParametersHelper(const JOscParameters_t &parameters, const std::string &name, argument_type value, const Args &...args)
Constructor.
JOscParameters_t & getParameters() const
Get reference to oscillation parameters interface.
JOscParameters_t::argument_type argument_type
JOscParameters_t::JOscParameter_t JOscParameter_t
std::shared_ptr< JOscParameters_t > pointer_type
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.
void set(const JOscParametersInterface< value_type > &parameters) const
Set oscillation parameters.
JOscParameter_t & get(const std::string &name) const
Get oscillation parameter.
JOscParametersHelper()
Default constructor.
void set(const std::string &name, const value_type &value) const
Set value for a given oscillation parameter.
JOscParameters_t::value_type value_type