CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Pair.cpp
Go to the documentation of this file.
1 /*******************************************************************
2  * Copyright (C) 2015 by Federico Marulli *
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 "Pair.h"
35 #include "Pair1D_extra.h"
36 #include "Pair2D_extra.h"
37 
38 using namespace std;
39 
40 using namespace cbl;
41 using namespace catalogue;
42 using namespace pairs;
43 
44 
45 // ============================================================================================
46 
47 
48 shared_ptr<Pair> cbl::pairs::Pair::Create (const cbl::pairs::PairType type, const cbl::pairs::PairInfo info, const double Min, const double Max, const int nbins, const double shift, const CoordinateUnits angularUnits, FunctionDoubleDouble angularWeight)
49 {
50  if (info==PairInfo::_standard_) {
51 
52  if (type==PairType::_angular_lin_)
53  return move(unique_ptr<Pair1D_angular_lin>{new Pair1D_angular_lin(Min, Max, nbins, shift, angularUnits, angularWeight)});
54 
55  else if (type==PairType::_angular_log_)
56  return move(unique_ptr<Pair1D_angular_log>{new Pair1D_angular_log(Min, Max, nbins, shift, angularUnits, angularWeight)});
57 
58  else if (type==PairType::_comoving_lin_)
59  return move(unique_ptr<Pair1D_comoving_lin>{new Pair1D_comoving_lin(Min, Max, nbins, shift, angularUnits, angularWeight)});
60 
61  else if (type==PairType::_comoving_log_)
62  return move(unique_ptr<Pair1D_comoving_log>{new Pair1D_comoving_log(Min, Max, nbins, shift, angularUnits, angularWeight)});
63 
64  else if (type==PairType::_comoving_multipoles_lin_)
65  return move(unique_ptr<Pair1D_comoving_multipoles_lin>{new Pair1D_comoving_multipoles_lin(Min, Max, nbins, shift, angularUnits, angularWeight)});
66 
67  else if (type==PairType::_comoving_multipoles_log_)
68  return move(unique_ptr<Pair1D_comoving_multipoles_log>{new Pair1D_comoving_multipoles_log(Min, Max, nbins, shift, angularUnits, angularWeight)});
69 
70  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
71 
72  }
73 
74  else if (info==PairInfo::_extra_) {
75 
76  if (type==PairType::_angular_lin_)
77  return move(unique_ptr<Pair1D_angular_lin_extra>{new Pair1D_angular_lin_extra(Min, Max, nbins, shift, angularUnits, angularWeight)});
78 
79  else if (type==PairType::_angular_log_)
80  return move(unique_ptr<Pair1D_angular_log_extra>{new Pair1D_angular_log_extra(Min, Max, nbins, shift, angularUnits, angularWeight)});
81 
82  else if (type==PairType::_comoving_lin_)
83  return move(unique_ptr<Pair1D_comoving_lin_extra>{new Pair1D_comoving_lin_extra(Min, Max, nbins, shift, angularUnits, angularWeight)});
84 
85  else if (type==PairType::_comoving_log_)
86  return move(unique_ptr<Pair1D_comoving_log_extra>{new Pair1D_comoving_log_extra(Min, Max, nbins, shift, angularUnits, angularWeight)});
87 
88  else if (type==PairType::_comoving_multipoles_lin_)
89  return move(unique_ptr<Pair1D_comoving_multipoles_lin_extra>{new Pair1D_comoving_multipoles_lin_extra(Min, Max, nbins, shift, angularUnits, angularWeight)});
90 
91  else if (type==PairType::_comoving_multipoles_log_)
92  return move(unique_ptr<Pair1D_comoving_multipoles_log_extra>{new Pair1D_comoving_multipoles_log_extra(Min, Max, nbins, shift, angularUnits, angularWeight)});
93 
94  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
95 
96  }
97 
98  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
99 
100  return NULL;
101 }
102 
103 
104 // ============================================================================================
105 
106 
107 shared_ptr<Pair> cbl::pairs::Pair::Create (const PairType type, const PairInfo info, const double Min, const double Max, const double binSize, const double shift, const CoordinateUnits angularUnits, FunctionDoubleDouble angularWeight)
108 {
109  if (info==PairInfo::_standard_) {
110 
111  if (type==PairType::_angular_lin_)
112  return move(unique_ptr<Pair1D_angular_lin>{new Pair1D_angular_lin(Min, Max, binSize, shift, angularUnits, angularWeight)});
113 
114  else if (type==PairType::_angular_log_)
115  return move(unique_ptr<Pair1D_angular_log>{new Pair1D_angular_log(Min, Max, binSize, shift, angularUnits, angularWeight)});
116 
117  else if (type==PairType::_comoving_lin_)
118  return move(unique_ptr<Pair1D_comoving_lin>{new Pair1D_comoving_lin(Min, Max, binSize, shift, angularUnits, angularWeight)});
119 
120  else if (type==PairType::_comoving_log_)
121  return move(unique_ptr<Pair1D_comoving_log>{new Pair1D_comoving_log(Min, Max, binSize, shift, angularUnits, angularWeight)});
122 
123  else if (type==PairType::_comoving_multipoles_lin_)
124  return move(unique_ptr<Pair1D_comoving_multipoles_lin>{new Pair1D_comoving_multipoles_lin(Min, Max, binSize, shift, angularUnits, angularWeight)});
125 
126  else if (type==PairType::_comoving_multipoles_log_)
127  return move(unique_ptr<Pair1D_comoving_multipoles_log>{new Pair1D_comoving_multipoles_log(Min, Max, binSize, shift, angularUnits, angularWeight)});
128 
129  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
130 
131  }
132 
133  else if (info==PairInfo::_extra_) {
134 
135  if (type==PairType::_angular_lin_)
136  return move(unique_ptr<Pair1D_angular_lin_extra>{new Pair1D_angular_lin_extra(Min, Max, binSize, shift, angularUnits, angularWeight)});
137 
138  else if (type==PairType::_angular_log_)
139  return move(unique_ptr<Pair1D_angular_log_extra>{new Pair1D_angular_log_extra(Min, Max, binSize, shift, angularUnits, angularWeight)});
140 
141  else if (type==PairType::_comoving_lin_)
142  return move(unique_ptr<Pair1D_comoving_lin_extra>{new Pair1D_comoving_lin_extra(Min, Max, binSize, shift, angularUnits, angularWeight)});
143 
144  else if (type==PairType::_comoving_log_)
145  return move(unique_ptr<Pair1D_comoving_log_extra>{new Pair1D_comoving_log_extra(Min, Max, binSize, shift, angularUnits, angularWeight)});
146 
147  else if (type==PairType::_comoving_multipoles_lin_)
148  return move(unique_ptr<Pair1D_comoving_multipoles_lin_extra>{new Pair1D_comoving_multipoles_lin_extra(Min, Max, binSize, shift, angularUnits, angularWeight)});
149 
150  else if (type==PairType::_comoving_multipoles_log_)
151  return move(unique_ptr<Pair1D_comoving_multipoles_log_extra>{new Pair1D_comoving_multipoles_log_extra(Min, Max, binSize, shift, angularUnits, angularWeight)});
152 
153  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
154 
155  }
156 
157  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
158 
159  return NULL;
160 }
161 
162 
163 // ============================================================================================
164 
165 
166 shared_ptr<Pair> cbl::pairs::Pair::Create (const cbl::pairs::PairType type, const PairInfo info, const double Min_D1, const double Max_D1, const int nbins_D1, const double shift_D1, const double Min_D2, const double Max_D2, const int nbins_D2, const double shift_D2, const CoordinateUnits angularUnits, FunctionDoubleDouble angularWeight)
167 {
168  if (info==PairInfo::_standard_) {
169 
170  if (type==PairType::_comovingCartesian_linlin_)
171  return move(unique_ptr<Pair2D_comovingCartesian_linlin>{new Pair2D_comovingCartesian_linlin(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
172 
173  else if (type==PairType::_comovingCartesian_linlog_)
174  return move(unique_ptr<Pair2D_comovingCartesian_linlog>{new Pair2D_comovingCartesian_linlog(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
175 
176  else if (type==PairType::_comovingCartesian_loglin_)
177  return move(unique_ptr<Pair2D_comovingCartesian_loglin>{new Pair2D_comovingCartesian_loglin(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
178 
179  else if (type==PairType::_comovingCartesian_loglog_)
180  return move(unique_ptr<Pair2D_comovingCartesian_loglog>{new Pair2D_comovingCartesian_loglog(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
181 
182  else if (type==PairType::_comovingPolar_linlin_)
183  return move(unique_ptr<Pair2D_comovingPolar_linlin>{new Pair2D_comovingPolar_linlin(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
184 
185  else if (type==PairType::_comovingPolar_linlog_)
186  return move(unique_ptr<Pair2D_comovingPolar_linlog>{new Pair2D_comovingPolar_linlog(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
187 
188  else if (type==PairType::_comovingPolar_loglin_)
189  return move(unique_ptr<Pair2D_comovingPolar_loglin>{new Pair2D_comovingPolar_loglin(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
190 
191  else if (type==PairType::_comovingPolar_loglog_)
192  return move(unique_ptr<Pair2D_comovingPolar_loglog>{new Pair2D_comovingPolar_loglog(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
193 
194  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
195 
196  }
197 
198  else if (info==PairInfo::_extra_) {
199 
200  if (type==PairType::_comovingCartesian_linlin_)
201  return move(unique_ptr<Pair2D_comovingCartesian_linlin_extra>{new Pair2D_comovingCartesian_linlin_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
202 
203  else if (type==PairType::_comovingCartesian_linlog_)
204  return move(unique_ptr<Pair2D_comovingCartesian_linlog_extra>{new Pair2D_comovingCartesian_linlog_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
205 
206  else if (type==PairType::_comovingCartesian_loglin_)
207  return move(unique_ptr<Pair2D_comovingCartesian_loglin_extra>{new Pair2D_comovingCartesian_loglin_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
208 
209  else if (type==PairType::_comovingCartesian_loglog_)
210  return move(unique_ptr<Pair2D_comovingCartesian_loglog_extra>{new Pair2D_comovingCartesian_loglog_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
211 
212  else if (type==PairType::_comovingPolar_linlin_)
213  return move(unique_ptr<Pair2D_comovingPolar_linlin_extra>{new Pair2D_comovingPolar_linlin_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
214 
215  else if (type==PairType::_comovingPolar_linlog_)
216  return move(unique_ptr<Pair2D_comovingPolar_linlog_extra>{new Pair2D_comovingPolar_linlog_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
217 
218  else if (type==PairType::_comovingPolar_loglin_)
219  return move(unique_ptr<Pair2D_comovingPolar_loglin_extra>{new Pair2D_comovingPolar_loglin_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
220 
221  else if (type==PairType::_comovingPolar_loglog_)
222  return move(unique_ptr<Pair2D_comovingPolar_loglog_extra>{new Pair2D_comovingPolar_loglog_extra(Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight)});
223 
224  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
225 
226  }
227 
228  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
229 
230  return NULL;
231 }
232 
233 
234 // ============================================================================================
235 
236 
237 shared_ptr<Pair> cbl::pairs::Pair::Create (const cbl::pairs::PairType type, const PairInfo info, const double Min_D1, const double Max_D1, const double binSize_D1, const double shift_D1, const double Min_D2, const double Max_D2, const double binSize_D2, const double shift_D2, const CoordinateUnits angularUnits, FunctionDoubleDouble angularWeight)
238 {
239  if (info==PairInfo::_standard_) {
240 
241  if (type==PairType::_comovingCartesian_linlin_)
242  return move(unique_ptr<Pair2D_comovingCartesian_linlin>{new Pair2D_comovingCartesian_linlin(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
243 
244  else if (type==PairType::_comovingCartesian_linlog_)
245  return move(unique_ptr<Pair2D_comovingCartesian_linlog>{new Pair2D_comovingCartesian_linlog(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
246 
247  else if (type==PairType::_comovingCartesian_loglin_)
248  return move(unique_ptr<Pair2D_comovingCartesian_loglin>{new Pair2D_comovingCartesian_loglin(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
249 
250  else if (type==PairType::_comovingCartesian_loglog_)
251  return move(unique_ptr<Pair2D_comovingCartesian_loglog>{new Pair2D_comovingCartesian_loglog(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
252 
253  else if (type==PairType::_comovingPolar_linlin_)
254  return move(unique_ptr<Pair2D_comovingPolar_linlin>{new Pair2D_comovingPolar_linlin(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
255 
256  else if (type==PairType::_comovingPolar_linlog_)
257  return move(unique_ptr<Pair2D_comovingPolar_linlog>{new Pair2D_comovingPolar_linlog(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
258 
259  else if (type==PairType::_comovingPolar_loglin_)
260  return move(unique_ptr<Pair2D_comovingPolar_loglin>{new Pair2D_comovingPolar_loglin(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
261 
262  else if (type==PairType::_comovingPolar_loglog_)
263  return move(unique_ptr<Pair2D_comovingPolar_loglog>{new Pair2D_comovingPolar_loglog(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
264 
265  }
266 
267  else if (info==PairInfo::_extra_) {
268 
269  if (type==PairType::_comovingCartesian_linlin_)
270  return move(unique_ptr<Pair2D_comovingCartesian_linlin_extra>{new Pair2D_comovingCartesian_linlin_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
271 
272  else if (type==PairType::_comovingCartesian_linlog_)
273  return move(unique_ptr<Pair2D_comovingCartesian_linlog_extra>{new Pair2D_comovingCartesian_linlog_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
274 
275  else if (type==PairType::_comovingCartesian_loglin_)
276  return move(unique_ptr<Pair2D_comovingCartesian_loglin_extra>{new Pair2D_comovingCartesian_loglin_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
277 
278  else if (type==PairType::_comovingCartesian_loglog_)
279  return move(unique_ptr<Pair2D_comovingCartesian_loglog_extra>{new Pair2D_comovingCartesian_loglog_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
280 
281  else if (type==PairType::_comovingPolar_linlin_)
282  return move(unique_ptr<Pair2D_comovingPolar_linlin_extra>{new Pair2D_comovingPolar_linlin_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
283 
284  else if (type==PairType::_comovingPolar_linlog_)
285  return move(unique_ptr<Pair2D_comovingPolar_linlog_extra>{new Pair2D_comovingPolar_linlog_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
286 
287  else if (type==PairType::_comovingPolar_loglin_)
288  return move(unique_ptr<Pair2D_comovingPolar_loglin_extra>{new Pair2D_comovingPolar_loglin_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
289 
290  else if (type==PairType::_comovingPolar_loglog_)
291  return move(unique_ptr<Pair2D_comovingPolar_loglog_extra>{new Pair2D_comovingPolar_loglog_extra(Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight)});
292 
293  }
294 
295  else ErrorCBL("no such type of object!", "Create", "Pair.cpp");
296 
297  return NULL;
298 }
299 
300 
301 
The classes Pair1D_extra*.
The classes Pair2D_extra*.
The class Pair.
The class Pair1D_angular_lin_extra.
Definition: Pair1D_extra.h:379
The class Pair1D_angular_lin.
Definition: Pair1D.h:427
The class Pair1D_angular_log_extra.
Definition: Pair1D_extra.h:493
The class Pair1D_angular_log.
Definition: Pair1D.h:570
The class Pair1D_comoving_lin_extra.
Definition: Pair1D_extra.h:670
The class Pair1D_comoving_lin.
Definition: Pair1D.h:832
The class Pair1D_comoving_log_extra.
Definition: Pair1D_extra.h:781
The class Pair1D_comoving_log.
Definition: Pair1D.h:971
The class Pair1D_comoving_multipoles_lin_extra.
Definition: Pair1D_extra.h:951
The class Pair1D_comoving_multipoles_lin.
Definition: Pair1D.h:1235
The class Pair1D_comoving_multipoles_log_extra.
The class Pair1D_comoving_multipoles_log.
Definition: Pair1D.h:1389
The class Pair2D_comovingCartesian_linlin_extra.
Definition: Pair2D_extra.h:455
The class Pair2D_comovingCartesian_linlin.
Definition: Pair2D.h:515
The class Pair2D_comovingCartesian_linlog_extra.
Definition: Pair2D_extra.h:716
The class Pair2D_comovingCartesian_linlog.
Definition: Pair2D.h:826
The class Pair2D_comovingCartesian_loglin_extra.
Definition: Pair2D_extra.h:586
The class Pair2D_comovingCartesian_loglin.
Definition: Pair2D.h:671
The class Pair2D_comovingCartesian_loglog_extra.
Definition: Pair2D_extra.h:846
The class Pair2D_comovingCartesian_loglog.
Definition: Pair2D.h:981
The class Pair2D_comovingPolar_linlin_extra.
The class Pair2D_comovingPolar_linlin.
Definition: Pair2D.h:1284
The class Pair2D_comovingPolar_linlog_extra.
The class Pair2D_comovingPolar_linlog.
Definition: Pair2D.h:1588
The class Pair2D_comovingPolar_loglin_extra.
The class Pair2D_comovingPolar_loglin.
Definition: Pair2D.h:1436
The class Pair2D_comovingPolar_loglog_extra.
The class Pair2D_comovingPolar_loglog.
Definition: Pair2D.h:1739
static std::shared_ptr< Pair > Create(const PairType type, const PairInfo info, const double Min, const double Max, const int nbins, const double shift, const CoordinateUnits angularUnits=CoordinateUnits::_radians_, FunctionDoubleDouble angularWeight=nullptr)
static factory used to construct pairs of any type
Definition: Pair.cpp:48
PairType
the pair type
Definition: Pair.h:59
PairInfo
the information contained in the pairs
Definition: Pair.h:117
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
T Min(const std::vector< T > vect)
minimum element of a std::vector
Definition: Kernel.h:1324
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
T Max(const std::vector< T > vect)
maximum element of a std::vector
Definition: Kernel.h:1336
std::function< double(double)> FunctionDoubleDouble
typedef of a function returning a double with a double in input
Definition: Kernel.h:687
CoordinateUnits
the coordinate units
Definition: Kernel.h:562