GammaLib 2.0.0
Loading...
Searching...
No Matches
GModelSpectral.cpp
Go to the documentation of this file.
1/***************************************************************************
2 * GModelSpectral.cpp - Abstract spectral model base class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2009-2021 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- *
6 * *
7 * This program is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 * *
20 ***************************************************************************/
21/**
22 * @file GModelSpectral.cpp
23 * @brief Abstract spectral model base class implementation
24 * @author Juergen Knoedlseder
25 */
26
27/* __ Includes ___________________________________________________________ */
28#ifdef HAVE_CONFIG_H
29#include <config.h>
30#endif
31#include "GException.hpp"
32#include "GModelSpectral.hpp"
33#include "GModelPar.hpp"
34
35/* __ Method name definitions ____________________________________________ */
36#define G_ACCESS "GModelSpectral::operator[](std::string&)"
37#define G_AT "GModelPar& GModelSpectral::at(int&)"
38
39/* __ Macros _____________________________________________________________ */
40
41/* __ Coding definitions _________________________________________________ */
42
43/* __ Debug definitions __________________________________________________ */
44
45
46/*==========================================================================
47 = =
48 = Constructors/destructors =
49 = =
50 ==========================================================================*/
51
52/***********************************************************************//**
53 * @brief Void constructor
54 ***************************************************************************/
56{
57 // Initialise members
59
60 // Return
61 return;
62}
63
64
65/***********************************************************************//**
66 * @brief Copy constructor
67 *
68 * @param[in] model Spectral model.
69 ***************************************************************************/
71{
72 // Initialise members
74
75 // Copy members
76 copy_members(model);
77
78 // Return
79 return;
80}
81
82
83/***********************************************************************//**
84 * @brief Destructor
85 ***************************************************************************/
87{
88 // Free members
90
91 // Return
92 return;
93}
94
95
96/*==========================================================================
97 = =
98 = Operators =
99 = =
100 ==========================================================================*/
101
102/***********************************************************************//**
103 * @brief Assignment operator
104 *
105 * @param[in] model Spectral model.
106 * @return Spectral model.
107 ***************************************************************************/
109{
110 // Execute only if object is not identical
111 if (this != &model) {
112
113 // Free members
114 free_members();
115
116 // Initialise private members for clean destruction
117 init_members();
118
119 // Copy members
120 copy_members(model);
121
122 } // endif: object was not identical
123
124 // Return
125 return *this;
126}
127
128
129/***********************************************************************//**
130 * @brief Returns reference to model parameter
131 *
132 * @param[in] name Parameter name.
133 *
134 * @exception GException::invalid_argument
135 * Parameter with specified name not found.
136 ***************************************************************************/
137GModelPar& GModelSpectral::operator[](const std::string& name)
138{
139 // Get parameter index
140 int index = 0;
141 for (; index < size(); ++index) {
142 if (m_pars[index]->name() == name) {
143 break;
144 }
145 }
146
147 // Throw exception if parameter name was not found
148 if (index >= size()) {
149 std::string msg = "Model parameter \""+name+"\" not found in model. "
150 "Please specify a valid model parameter name.";
152 }
153
154 // Return reference
155 return *(m_pars[index]);
156}
157
158
159/***********************************************************************//**
160 * @brief Returns reference to model parameter (const version)
161 *
162 * @param[in] name Parameter name.
163 *
164 * @exception GException::invalid_argument
165 * Parameter with specified name not found.
166 ***************************************************************************/
167const GModelPar& GModelSpectral::operator[](const std::string& name) const
168{
169 // Get parameter index
170 int index = 0;
171 for (; index < size(); ++index) {
172 if (m_pars[index]->name() == name) {
173 break;
174 }
175 }
176
177 // Throw exception if parameter name was not found
178 if (index >= size()) {
179 std::string msg = "Model parameter \""+name+"\" not found in model. "
180 "Please specify a valid model parameter name.";
182 }
183
184 // Return reference
185 return *(m_pars[index]);
186}
187
188
189/*==========================================================================
190 = =
191 = Public methods =
192 = =
193 ==========================================================================*/
194
195/***********************************************************************//**
196 * @brief Returns model parameter
197 *
198 * @param[in] index Parameter index [0,...,size()[.
199 * @return Model parameter.
200 *
201 * @exception GException::out_of_range
202 * Parameter index is out of range.
203 *
204 * Returns model parameter with @p index range checking.
205 ***************************************************************************/
207{
208 // Compile option: raise exception if index is out of range
209 if (index < 0 || index >= size()) {
210 throw GException::out_of_range(G_AT, "Parameter index", index, size());
211 }
212
213 // Return reference
214 return *(m_pars[index]);
215}
216
217
218/***********************************************************************//**
219 * @brief Returns model parameter (const version)
220 *
221 * @param[in] index Parameter index [0,...,size()[.
222 * @return Model parameter.
223 *
224 * @exception GException::out_of_range
225 * Parameter index is out of range.
226 *
227 * Returns model parameter with @p index range checking.
228 ***************************************************************************/
229const GModelPar& GModelSpectral::at(const int& index) const
230{
231 // Compile option: raise exception if index is out of range
232 if (index < 0 || index >= size()) {
233 throw GException::out_of_range(G_AT, "Parameter index", index, size());
234 }
235
236 // Return reference
237 return *(m_pars[index]);
238}
239
240
241/***********************************************************************//**
242 * @brief Checks if parameter name exists
243 *
244 * @param[in] name Parameter name.
245 * @return True if parameter with specified @p name exists.
246 *
247 * Searches all parameter names for a match with the specified @p name. If
248 * the specified name has been found, true is returned.
249 ***************************************************************************/
250bool GModelSpectral::has_par(const std::string& name) const
251{
252 // Default found flag to false
253 bool found = false;
254
255 // Search for parameter name
256 for (int i = 0; i < size(); ++i) {
257 if (m_pars[i]->name() == name) {
258 found = true;
259 break;
260 }
261 }
262
263 // Return
264 return found;
265}
266
267
268/***********************************************************************//**
269 * @brief Autoscale parameters
270 *
271 * Sets the scale factors for all parameters so that the values are unity.
272 ***************************************************************************/
274{
275 // Loop over all parameters
276 for (int i = 0; i < m_pars.size(); ++i) {
277 if (m_pars[i] != NULL) {
278 m_pars[i]->autoscale();
279 }
280 }
281
282 // Return
283 return;
284}
285
286
287/*==========================================================================
288 = =
289 = Private methods =
290 = =
291 ==========================================================================*/
292
293/***********************************************************************//**
294 * @brief Initialise class members
295 ***************************************************************************/
297{
298 // Initialise members
299 m_pars.clear();
300
301 // Return
302 return;
303}
304
305
306/***********************************************************************//**
307 * @brief Copy class members
308 *
309 * @param[in] model Spectral model.
310 ***************************************************************************/
312{
313 // Copy members
314 m_pars = model.m_pars;
315
316 // Return
317 return;
318}
319
320
321/***********************************************************************//**
322 * @brief Delete class members
323 ***************************************************************************/
325{
326 // Return
327 return;
328}
#define G_AT
#define G_ACCESS
Exception handler interface definition.
Model parameter class interface definition.
Abstract spectral model base class interface definition.
Model parameter class.
Definition GModelPar.hpp:87
Abstract spectral model base class.
bool has_par(const std::string &name) const
Checks if parameter name exists.
void free_members(void)
Delete class members.
GModelPar & at(const int &index)
Returns model parameter.
virtual GModelSpectral & operator=(const GModelSpectral &model)
Assignment operator.
void copy_members(const GModelSpectral &model)
Copy class members.
virtual ~GModelSpectral(void)
Destructor.
virtual GModelPar & operator[](const int &index)
Returns model parameter.
std::vector< GModelPar * > m_pars
Parameter pointers.
void autoscale(void)
Autoscale parameters.
int size(void) const
Return number of parameters.
GModelSpectral(void)
Void constructor.
void init_members(void)
Initialise class members.