CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
ModelParameters.cpp
Go to the documentation of this file.
1 /********************************************************************
2  * Copyright (C) 2014 by Federico Marulli and Alfonso Veropalumbo *
3  * federico.marulli3@unibo.it *
4  * *
5  * This program is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU General Public License as *
7  * published by the Free Software Foundation; either version 2 of *
8  * the License, or (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public *
16  * License along with this program; if not, write to the Free *
17  * Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ********************************************************************/
20 
34 #include "ModelParameters.h"
35 
36 using namespace std;
37 
38 using namespace cbl;
39 
40 // ============================================================================================
41 
42 
43 vector<double> cbl::statistics::ModelParameters::full_parameter (const vector<double> parameter_value) const
44 {
45  if (parameter_value.size()==m_nparameters_base) {
46  vector<double> all_parameters(m_nparameters, 0);
47 
48  for (size_t i=0; i<m_nparameters_base; i++)
49  all_parameters[m_base_parameter[i]] = parameter_value[i];
50 
51  for (size_t i=0; i<m_nparameters_derived; i++)
52  all_parameters[m_derived_parameter[i]] = 0.;
53 
54  return all_parameters;
55  }
56  else if (parameter_value.size() == m_nparameters)
57  return parameter_value;
58  else
59  ErrorCBL("the provided vector has the wrong size!", "full_parameter", "ModelParameters.cpp");
60 
61  vector<double> vv;
62  return vv;
63 }
64 
65 
66 // ============================================================================================
67 
68 
70 {
71  m_nparameters_base = 0;
72  m_nparameters_derived = 0;
73 
74  m_base_parameter.erase(m_base_parameter.begin(), m_base_parameter.end());
75  m_derived_parameter.erase(m_derived_parameter.begin(), m_derived_parameter.end());
76 
77  for (size_t i=0; i<m_nparameters; i++) {
78  switch (m_parameter_type[i]) {
79  case statistics::ParameterType::_Base_:
80  m_nparameters_base +=1;
81  m_base_parameter.push_back(i);
82  break;
83 
84  case statistics::ParameterType::_Correlated_:
85  m_nparameters_correlated ++;
86  m_nparameters_base ++;
87  m_base_parameter.push_back(i);
88  break;
89 
90  case statistics::ParameterType::_Derived_:
91  m_nparameters_derived += 1;
92  m_derived_parameter.push_back(i);
93  break;
94 
95  default:
96  ErrorCBL("no such kind of parameter!", "m_set_parameter_type", "ModelParameters.cpp");
97  }
98  }
99 }
100 
101 
102 // ============================================================================================
103 
104 
105 cbl::statistics::ModelParameters::ModelParameters (const size_t nparameters, std::vector<ParameterType> parameterTypes, std::vector<std::string> parameterNames)
106 {
107  set_parameters(nparameters, parameterTypes, parameterNames);
108 }
109 
110 
111 // ============================================================================================
112 
113 
114 cbl::statistics::ModelParameters::ModelParameters (const size_t nparameters, std::vector<std::string> parameterNames)
115 {
116  set_parameters(nparameters, parameterNames);
117 }
118 
119 
120 // ============================================================================================
121 
122 
124 {
125  return m_nparameters;
126 }
127 
128 
129 // ============================================================================================
130 
131 
133 {
134  return m_nparameters_base;
135 }
136 
137 
138 // ============================================================================================
139 
140 
142 {
143  return m_nparameters_derived;
144 }
145 
146 
147 // ============================================================================================
148 
149 
151 {
152  return m_nparameters_correlated;
153 }
154 
155 
156 // ============================================================================================
157 
158 
159 void cbl::statistics::ModelParameters::set_parameters (const size_t nparameters, std::vector<ParameterType> parameterTypes, std::vector<std::string> parameterNames)
160 {
161  if (nparameters==0)
162  ErrorCBL("nparameters should be > 0!", "set_parameters", "ModelParameters.cpp");
163 
164  if ((parameterTypes.size()!=nparameters) && (parameterTypes.size()!=0))
165  ErrorCBL("wrong size for the vector parameterTypes!", "set_parameters", "ModelParameters.cpp");
166 
167  if ((parameterNames.size()!=nparameters) && (parameterNames.size()!=0))
168  ErrorCBL("wrong size for the vector parameterNames!", "set_parameters", "ModelParameters.cpp");
169 
170 
171  if ((parameterTypes.size()==nparameters) && (parameterNames.size()==nparameters)) {
172  m_nparameters=nparameters;
173  m_parameter_type = parameterTypes;
174  m_parameter_name = parameterNames;
175  }
176  else if ((parameterTypes.size()==0) && (parameterNames.size()==0)) {
177  m_nparameters=nparameters;
178  vector<ParameterType> pTypes(m_nparameters);
179  vector<string> pNames(m_nparameters);
180  for (size_t i=0; i<m_nparameters; i++) {
181  pTypes[i] = ParameterType::_Base_;
182  pNames[i] = "par_"+conv(i+1, par::fINT);
183  }
184  m_parameter_type = pTypes;
185  m_parameter_name = pNames;
186  }
187  else if ((parameterTypes.size()==nparameters) && (parameterNames.size()==0)) {
188  m_nparameters=nparameters;
189  vector<string> pNames(m_nparameters);
190  for (size_t i=0; i<m_nparameters; i++)
191  pNames[i] = "par_"+conv(i+1, par::fINT);
192 
193  m_parameter_type = parameterTypes;
194  m_parameter_name = pNames;
195  }
196  else if ((parameterTypes.size()==0) && (parameterNames.size()==0)) {
197  m_nparameters=nparameters;
198  vector<ParameterType> pTypes(m_nparameters);
199  for (size_t i=0; i<m_nparameters; i++)
200  pTypes[i] = ParameterType::_Base_;
201 
202  m_parameter_type = pTypes;
203  m_parameter_name = parameterNames;
204  }
205 
206  m_set_parameter_type();
207 }
208 
209 
210 // ============================================================================================
211 
212 
213 void cbl::statistics::ModelParameters::set_parameters (const size_t nparameters, std::vector<std::string> parameterNames)
214 {
215  if (nparameters==0)
216  ErrorCBL("nparameters should be > 0!", "set_parameters", "ModelParameters.cpp");
217 
218  if ((parameterNames.size()!=nparameters) && (parameterNames.size()!=0))
219  ErrorCBL("wrong size for the vector parameterNames!", "set_parameters", "ModelParameters.cpp");
220 
221  m_nparameters=nparameters;
222  m_parameter_name = parameterNames;
223 
224  if (parameterNames.size()==0) {
225  vector<string> pNames(m_nparameters);
226  for (size_t i=0; i<m_nparameters; i++) pNames[i] = "par_"+conv(i+1, par::fINT);
227  }
228 
229  vector<ParameterType> pTypes(m_nparameters);
230 
231  for (size_t i=0; i<m_nparameters; i++)
232  pTypes[i] = ParameterType::_Base_;
233 
234  m_parameter_type = pTypes;
235 
236  m_set_parameter_type();
237 }
The class ModelParameters.
size_t nparameters_correlated() const
return the number of correlated parameters
size_t nparameters() const
return the total number of parameters
size_t nparameters_base() const
return the number of base parameters
virtual void set_parameters(const size_t nparameters, std::vector< ParameterType > parameterTypes, std::vector< std::string > parameterNames)
set the parameter
size_t nparameters_derived() const
return the number of derived parameters
virtual std::vector< double > full_parameter(const std::vector< double > parameter_value) const
return all the model parameters, for internal usage
virtual void m_set_parameter_type()
private member to set the parameter types
ModelParameters()=default
default constructor
static const char fINT[]
conversion symbol for: int -> std::string
Definition: Constants.h:121
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
std::string conv(const T val, const char *fact)
convert a number to a std::string
Definition: Kernel.h:903
int ErrorCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL, const cbl::glob::ExitCode exitCode=cbl::glob::ExitCode::_error_)
throw an exception: it is used for handling exceptions inside the CosmoBolognaLib
Definition: Kernel.h:780