39 using namespace catalogue;
40 using namespace pairs;
48 for (
int i=0; i<m_nbins_D1; i++) {
49 for (
int j=0; j<m_nbins_D2; j++) {
51 m_PP2D_weighted[i][j] = 0;
61 const double binSize_D1 = ((m_rpMax-m_rpMin)/m_nbins_D1);
62 m_binSize_inv_D1 = 1./binSize_D1;
64 const double binSize_D2 = ((m_piMax-m_piMin)/m_nbins_D2);
65 m_binSize_inv_D2 = 1./binSize_D2;
67 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
68 for (
int i=0; i<m_nbins_D1; i++)
69 m_scale_D1[i] = (i+m_shift_D1)*binSize_D1+m_rpMin;
70 for (
int i=0; i<m_nbins_D2; i++)
71 m_scale_D2[i] = (i+m_shift_D2)*binSize_D2+m_piMin;
80 m_nbins_D1 =
nint((m_rpMax-m_rpMin)*m_binSize_inv_D1);
81 m_rpMax = m_nbins_D1/m_binSize_inv_D1+m_rpMin;
83 m_nbins_D2 =
nint((m_piMax-m_piMin)*m_binSize_inv_D2);
84 m_piMax = m_nbins_D2/m_binSize_inv_D2+m_piMin;
86 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
87 for (
int i=0; i<m_nbins_D1; i++)
88 m_scale_D1[i] = (i+m_shift_D1)/m_binSize_inv_D1+m_rpMin;
89 for (
int i=0; i<m_nbins_D2; i++)
90 m_scale_D2[i] = (i+m_shift_D2)/m_binSize_inv_D2+m_piMin;
100 ErrorCBL(
"m_piMin must be >0!",
"m_set_parameters_nbins",
"Pair2D.cpp");
102 const double binSize_D1 = ((m_rpMax-m_rpMin)/m_nbins_D1);
103 m_binSize_inv_D1 = 1./binSize_D1;
105 const double binSize_D2 = ((log10(m_piMax)-log10(m_piMin))/m_nbins_D2);
106 m_binSize_inv_D2 = 1./binSize_D2;
108 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
109 for (
int i=0; i<m_nbins_D1; i++)
110 m_scale_D1[i] = (i+m_shift_D1)*binSize_D1+m_rpMin;
111 for (
int i=0; i<m_nbins_D2; i++)
112 m_scale_D2[i] = pow(10.,(i+m_shift_D2)*binSize_D2+log10(m_piMin));
122 ErrorCBL(
"m_piMin must be >0!",
"m_set_parameters_binSize",
"Pair2D.cpp");
124 m_nbins_D1 =
nint((m_rpMax-m_rpMin)*m_binSize_inv_D1);
125 m_rpMax = m_nbins_D1/m_binSize_inv_D1+m_rpMin;
127 m_nbins_D2 =
nint((log10(m_piMax)-log10(m_piMin))*m_binSize_inv_D2);
128 m_piMax = pow(10.,m_nbins_D2/m_binSize_inv_D2+log10(m_piMin));
130 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
131 for (
int i=0; i<m_nbins_D1; i++)
132 m_scale_D1[i] = (i+m_shift_D1)/m_binSize_inv_D1+m_rpMin;
133 for (
int i=0; i<m_nbins_D2; i++)
134 m_scale_D2[i] = pow(10.,(i+m_shift_D2)/m_binSize_inv_D2+log10(m_piMin));
144 ErrorCBL(
"m_rpMin must be >0!",
"m_set_parameters_nbins",
"Pair2D.cpp");
146 const double binSize_D1 = ((log10(m_rpMax)-log10(m_rpMin))/m_nbins_D1);
147 m_binSize_inv_D1 = 1./binSize_D1;
149 const double binSize_D2 = ((m_piMax-m_piMin)/m_nbins_D2);
150 m_binSize_inv_D2 = 1./binSize_D2;
152 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
153 for (
int i=0; i<m_nbins_D1; i++)
154 m_scale_D1[i] = pow(10.,(i+m_shift_D1)*binSize_D1+log10(m_rpMin));
155 for (
int i=0; i<m_nbins_D2; i++)
156 m_scale_D2[i] = (i+m_shift_D2)*binSize_D2+m_piMin;
166 ErrorCBL(
"m_rpMin must be >0!",
"m_set_parameters_binSize",
"Pair2D.cpp");
168 m_nbins_D1 =
nint((log10(m_rpMax)-log10(m_rpMin))*m_binSize_inv_D1);
169 m_rpMax = pow(10.,m_nbins_D1/m_binSize_inv_D1+log10(m_rpMin));
171 m_nbins_D2 =
nint((m_piMax-m_piMin)*m_binSize_inv_D2);
172 m_piMax = m_nbins_D2/m_binSize_inv_D2+m_piMin;
174 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
175 for (
int i=0; i<m_nbins_D1; i++)
176 m_scale_D1[i] = pow(10.,(i+m_shift_D1)/m_binSize_inv_D1+log10(m_rpMin));
177 for (
int i=0; i<m_nbins_D2; i++)
178 m_scale_D2[i] = (i+m_shift_D2)/m_binSize_inv_D2+m_piMin;
187 if (m_rpMin<1.e-30 || m_piMin<1.e-30)
188 ErrorCBL(
"m_rpMin and m_piMin must be >0!",
"m_set_parameters_nbins",
"Pair2D.cpp");
190 const double binSize_D1 = ((log10(m_rpMax)-log10(m_rpMin))/m_nbins_D1);
191 m_binSize_inv_D1 = 1./binSize_D1;
193 const double binSize_D2 = ((log10(m_piMax)-log10(m_piMin))/m_nbins_D2);
194 m_binSize_inv_D2 = 1./binSize_D2;
196 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
197 for (
int i=0; i<m_nbins_D1; i++)
198 m_scale_D1[i] = pow(10.,(i+m_shift_D1)*binSize_D1+log10(m_rpMin));
199 for (
int i=0; i<m_nbins_D2; i++)
200 m_scale_D2[i] = pow(10.,(i+m_shift_D2)*binSize_D2+log10(m_piMin));
209 if (m_rpMin<1.e-30 || m_piMin<1.e-30)
210 ErrorCBL(
"m_rpMin and m_piMin must be >0!",
"m_set_parameters_binSize",
"Pair2D.cpp");
212 m_nbins_D1 =
nint((log10(m_rpMax)-log10(m_rpMin))*m_binSize_inv_D1);
213 m_rpMax = pow(10.,m_nbins_D1/m_binSize_inv_D1+log10(m_rpMin));
215 m_nbins_D2 =
nint((log10(m_piMax)-log10(m_piMin))*m_binSize_inv_D2);
216 m_piMax = pow(10.,m_nbins_D2/m_binSize_inv_D2+log10(m_piMin));
218 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
219 for (
int i=0; i<m_nbins_D1; i++)
220 m_scale_D1[i] = pow(10.,(i+m_shift_D1)/m_binSize_inv_D1+log10(m_rpMin));
221 for (
int i=0; i<m_nbins_D2; i++)
222 m_scale_D2[i] = pow(10.,(i+m_shift_D2)/m_binSize_inv_D2+log10(m_piMin));
231 const double binSize_D1 = ((m_rMax-m_rMin)/m_nbins_D1);
232 m_binSize_inv_D1 = 1./binSize_D1;
234 const double binSize_D2 = ((m_muMax-m_muMin)/m_nbins_D2);
235 m_binSize_inv_D2 = 1./binSize_D2;
237 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
238 for (
int i=0; i<m_nbins_D1; i++)
239 m_scale_D1[i] = (i+m_shift_D1)*binSize_D1+m_rMin;
240 for (
int i=0; i<m_nbins_D2; i++)
241 m_scale_D2[i] = (i+m_shift_D2)*binSize_D2+m_muMin;
250 m_nbins_D1 =
nint((m_rMax-m_rMin)*m_binSize_inv_D1);
251 m_rMax = m_nbins_D1/m_binSize_inv_D1+m_rMin;
253 m_nbins_D2 =
nint((m_muMax-m_muMin)*m_binSize_inv_D2);
254 m_muMax = m_nbins_D2/m_binSize_inv_D2+m_muMin;
256 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
257 for (
int i=0; i<m_nbins_D1; i++)
258 m_scale_D1[i] = (i+m_shift_D1)/m_binSize_inv_D1+m_rMin;
259 for (
int i=0; i<m_nbins_D2; i++)
260 m_scale_D2[i] = (i+m_shift_D2)/m_binSize_inv_D2+m_muMin;
270 ErrorCBL(
"m_muMin must be >0!",
"m_set_parameters_nbins",
"Pair2D.cpp");
272 const double binSize_D1 = ((m_rMax-m_rMin)/m_nbins_D1);
273 m_binSize_inv_D1 = 1./binSize_D1;
275 const double binSize_D2 = ((log10(m_muMax)-log10(m_muMin))/m_nbins_D2);
276 m_binSize_inv_D2 = 1./binSize_D2;
278 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
279 for (
int i=0; i<m_nbins_D1; i++)
280 m_scale_D1[i] = (i+m_shift_D1)*binSize_D1+m_rMin;
281 for (
int i=0; i<m_nbins_D2; i++)
282 m_scale_D2[i] = pow(10.,(i+m_shift_D2)*binSize_D2+log10(m_muMin));
292 ErrorCBL(
"m_muMin must be >0!",
"m_set_parameters_binSize",
"Pair2D.cpp");
294 m_nbins_D1 =
nint((m_rMax-m_rMin)*m_binSize_inv_D1);
295 m_rMax = m_nbins_D1/m_binSize_inv_D1+m_rMin;
297 m_nbins_D2 =
nint((log10(m_muMax)-log10(m_muMin))*m_binSize_inv_D2);
298 m_muMax = pow(10.,(m_nbins_D2-m_shift_D2)/m_binSize_inv_D2+log10(m_muMin));
300 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
301 for (
int i=0; i<m_nbins_D1; i++)
302 m_scale_D1[i] = (i+m_shift_D1)/m_binSize_inv_D1+m_rMin;
303 for (
int i=0; i<m_nbins_D2; i++)
304 m_scale_D2[i] = pow(10.,(i+m_shift_D2)/m_binSize_inv_D2+log10(m_muMin));
314 ErrorCBL(
"m_rMin must be >0!",
"m_set_parameters_nbins",
"Pair2D.cpp");
316 const double binSize_D1 = ((log10(m_rMax)-log10(m_rMin))/m_nbins_D1);
317 m_binSize_inv_D1 = 1./binSize_D1;
319 const double binSize_D2 = ((m_muMax-m_muMin)/m_nbins_D2);
320 m_binSize_inv_D2 = 1./binSize_D2;
322 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
323 for (
int i=0; i<m_nbins_D1; i++)
324 m_scale_D1[i] = pow(10.,(i+m_shift_D1)*binSize_D1+log10(m_rMin));
325 for (
int i=0; i<m_nbins_D2; i++)
326 m_scale_D2[i] = (i+m_shift_D2)*binSize_D2+m_muMin;
336 ErrorCBL(
"m_rMin must be >0!",
"m_set_parameters_binSize",
"Pair2D.cpp");
338 m_nbins_D1 =
nint((log10(m_rMax)-log10(m_rMin))*m_binSize_inv_D1);
339 m_rMax = pow(10.,m_nbins_D1/m_binSize_inv_D1+log10(m_rMin));
341 m_nbins_D2 =
nint((m_muMax-m_muMin)*m_binSize_inv_D2);
342 m_muMax = m_nbins_D2/m_binSize_inv_D2+m_muMin;
344 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
345 for (
int i=0; i<m_nbins_D1; i++)
346 m_scale_D1[i] = pow(10.,(i+m_shift_D1)/m_binSize_inv_D1+log10(m_rMin));
347 for (
int i=0; i<m_nbins_D2; i++)
348 m_scale_D2[i] = (i+m_shift_D2)/m_binSize_inv_D2+m_muMin;
357 if (m_rMin<1.e-30 || m_muMin<1.e-30)
358 ErrorCBL(
"m_rMin and m_muMin must be >0!",
"m_set_parameters_nbins",
"Pair2D.cpp");
360 const double binSize_D1 = ((log10(m_rMax)-log10(m_rMin))/m_nbins_D1);
361 m_binSize_inv_D1 = 1./binSize_D1;
363 const double binSize_D2 = ((log10(m_muMax)-log10(m_muMin))/m_nbins_D2);
364 m_binSize_inv_D2 = 1./binSize_D2;
366 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
367 for (
int i=0; i<m_nbins_D1; i++)
368 m_scale_D1[i] = pow(10.,(i+m_shift_D1)*binSize_D1+log10(m_rMin));
369 for (
int i=0; i<m_nbins_D2; i++)
370 m_scale_D2[i] = pow(10.,(i+m_shift_D2)*binSize_D2+log10(m_muMin));
379 if (m_rMin<1.e-30 || m_muMin<1.e-30)
380 ErrorCBL(
"m_rMin and m_muMin must be >0!",
"m_set_parameters_binSize",
"Pair2D.cpp");
382 m_nbins_D1 =
nint((log10(m_rMax)-log10(m_rMin))*m_binSize_inv_D1);
383 m_rMax = pow(10.,m_nbins_D1/m_binSize_inv_D1+log10(m_rMin));
385 m_nbins_D2 =
nint((log10(m_muMax)-log10(m_muMin))*m_binSize_inv_D2);
386 m_muMax = pow(10.,m_nbins_D2/m_binSize_inv_D2+log10(m_muMin));
388 m_scale_D1.resize(m_nbins_D1); m_scale_D2.resize(m_nbins_D2);
389 for (
int i=0; i<m_nbins_D1; i++)
390 m_scale_D1[i] = pow(10.,(i+m_shift_D1)/m_binSize_inv_D1+log10(m_rMin));
391 for (
int i=0; i<m_nbins_D2; i++)
392 m_scale_D2[i] = pow(10.,(i+m_shift_D2)/m_binSize_inv_D2+log10(m_muMin));
405 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
406 const double pi = fabs(obj1->dc()-obj2->dc());
408 if (m_rpMin<rp && rp<m_rpMax && m_piMin<=
pi &&
pi<m_piMax) {
410 ir = max(0, min(
int((rp-m_rpMin)*m_binSize_inv_D1), m_nbins_D1));
411 jr = max(0, min(
int((
pi-m_piMin)*m_binSize_inv_D2), m_nbins_D2));
413 const double angWeight = (m_angularWeight==
nullptr) ? 1.
414 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
416 ww = obj1->weight()*obj2->weight()*angWeight;
432 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
433 const double pi = fabs(obj1->dc()-obj2->dc());
435 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
437 ir = max(0, min(
int((rp-m_rpMin)*m_binSize_inv_D1), m_nbins_D1));
438 jr = max(0, min(
int((log10(
pi)-log10(m_piMin))*m_binSize_inv_D2), m_nbins_D2));
440 const double angWeight = (m_angularWeight==
nullptr) ? 1.
441 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
443 ww = obj1->weight()*obj2->weight()*angWeight;
458 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
459 const double pi = fabs(obj1->dc()-obj2->dc());
461 if (m_rpMin<rp && rp<m_rpMax && m_piMin<=
pi &&
pi<m_piMax) {
463 ir = max(0, min(
int((log10(rp)-log10(m_rpMin))*m_binSize_inv_D1), m_nbins_D1));
464 jr = max(0, min(
int((
pi-m_piMin)*m_binSize_inv_D2), m_nbins_D2));
466 const double angWeight = (m_angularWeight==
nullptr) ? 1.
467 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
469 ww = obj1->weight()*obj2->weight()*angWeight;
484 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
485 const double pi = fabs(obj1->dc()-obj2->dc());
487 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
489 ir = max(0, min(
int((log10(rp)-log10(m_rpMin))*m_binSize_inv_D1), m_nbins_D1));
490 jr = max(0, min(
int((log10(
pi)-log10(m_piMin))*m_binSize_inv_D2), m_nbins_D2));
492 const double angWeight = (m_angularWeight==
nullptr) ? 1.
493 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
495 ww = obj1->weight()*obj2->weight()*angWeight;
510 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
511 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
513 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
515 ir = max(0, min(
int((rr-m_rMin)*m_binSize_inv_D1), m_nbins_D1));
516 jr = max(0, min(
int((mu-m_muMin)*m_binSize_inv_D2), m_nbins_D2));
518 const double angWeight = (m_angularWeight==
nullptr) ? 1.
519 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
521 ww = obj1->weight()*obj2->weight()*angWeight;
536 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
537 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
539 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
541 ir = max(0, min(
int((rr-m_rMin)*m_binSize_inv_D1), m_nbins_D1));
542 jr = max(0, min(
int((log10(mu)-log10(m_muMin))*m_binSize_inv_D2), m_nbins_D2));
544 const double angWeight = (m_angularWeight==
nullptr) ? 1.
545 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
547 ww = obj1->weight()*obj2->weight()*angWeight;
561 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
562 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
564 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
566 ir = max(0, min(
int((log10(rr)-log10(m_rMin))*m_binSize_inv_D1), m_nbins_D1));
567 jr = max(0, min(
int((mu-m_muMin)*m_binSize_inv_D2), m_nbins_D2));
569 const double angWeight = (m_angularWeight==
nullptr) ? 1.
570 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
572 ww = obj1->weight()*obj2->weight()*angWeight;
587 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
588 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
590 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
592 ir = max(0, min(
int((log10(rr)-log10(m_rMin))*m_binSize_inv_D1), m_nbins_D1));
593 jr = max(0, min(
int((log10(mu)-log10(m_muMin))*m_binSize_inv_D2), m_nbins_D2));
595 const double angWeight = (m_angularWeight==
nullptr) ? 1.
596 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
598 ww = obj1->weight()*obj2->weight()*angWeight;
609 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
610 const double pi = fabs(obj1->dc()-obj2->dc());
612 if (m_rpMin<rp && rp<m_rpMax && m_piMin<=
pi &&
pi<m_piMax) {
614 const int ir = max(0, min(
int((rp-m_rpMin)*m_binSize_inv_D1), m_nbins_D1));
615 const int jr = max(0, min(
int((
pi-m_piMin)*m_binSize_inv_D2), m_nbins_D2));
617 const double angWeight = (m_angularWeight==
nullptr) ? 1.
618 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
621 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
632 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
633 const double pi = fabs(obj1->dc()-obj2->dc());
635 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
637 const int ir = max(0, min(
int((rp-m_rpMin)*m_binSize_inv_D1), m_nbins_D1));
638 const int jr = max(0, min(
int((log10(
pi)-log10(m_piMin))*m_binSize_inv_D2), m_nbins_D2));
640 const double angWeight = (m_angularWeight==
nullptr) ? 1.
641 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
644 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
655 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
656 const double pi = fabs(obj1->dc()-obj2->dc());
658 if (m_rpMin<rp && rp<m_rpMax && m_piMin<=
pi &&
pi<m_piMax) {
660 const int ir = max(0, min(
int((log10(rp)-log10(m_rpMin))*m_binSize_inv_D1), m_nbins_D1));
661 const int jr = max(0, min(
int((
pi-m_piMin)*m_binSize_inv_D2), m_nbins_D2));
663 const double angWeight = (m_angularWeight==
nullptr) ? 1.
664 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
667 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
678 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
679 const double pi = fabs(obj1->dc()-obj2->dc());
681 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
683 const int ir = max(0, min(
int((log10(rp)-log10(m_rpMin))*m_binSize_inv_D1), m_nbins_D1));
684 const int jr = max(0, min(
int((log10(
pi)-log10(m_piMin))*m_binSize_inv_D2), m_nbins_D2));
686 const double angWeight = (m_angularWeight==
nullptr) ? 1.
687 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
690 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
701 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
702 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
704 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
706 const int ir = max(0, min(
int((rr-m_rMin)*m_binSize_inv_D1), m_nbins_D1));
707 const int jr = max(0, min(
int((mu-m_muMin)*m_binSize_inv_D2), m_nbins_D2));
709 const double angWeight = (m_angularWeight==
nullptr) ? 1.
710 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
713 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
724 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
725 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
727 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
729 const int ir = max(0, min(
int((rr-m_rMin)*m_binSize_inv_D1), m_nbins_D1));
730 const int jr = max(0, min(
int((log10(mu)-log10(m_muMin))*m_binSize_inv_D2), m_nbins_D2));
732 const double angWeight = (m_angularWeight==
nullptr) ? 1.
733 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
736 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
747 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
748 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
750 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
752 const int ir = max(0, min(
int((log10(rr)-log10(m_rMin))*m_binSize_inv_D1), m_nbins_D1));
753 const int jr = max(0, min(
int((mu-m_muMin)*m_binSize_inv_D2), m_nbins_D2));
755 const double angWeight = (m_angularWeight==
nullptr) ? 1.
756 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
759 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
770 const double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
771 const double mu = fabs(obj1->dc()-obj2->dc())/rr;
773 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
775 const int ir = max(0, min(
int((log10(rr)-log10(m_rMin))*m_binSize_inv_D1), m_nbins_D1));
776 const int jr = max(0, min(
int((log10(mu)-log10(m_muMin))*m_binSize_inv_D2), m_nbins_D2));
778 const double angWeight = (m_angularWeight==
nullptr) ? 1.
779 : max(0., m_angularWeight(
converted_angle(
angular_distance(obj1->xx()/obj1->dc(), obj2->xx()/obj2->dc(), obj1->yy()/obj1->dc(), obj2->yy()/obj2->dc(), obj1->zz()/obj1->dc(), obj2->zz()/obj2->dc()), CoordinateUnits::_radians_, m_angularUnits)));
782 m_PP2D_weighted[ir][jr] += obj1->weight()*obj2->weight()*angWeight;
794 m_PP2D[ir][jr] += weight;
795 m_PP2D_weighted[ir][jr] += ww*weight;
806 m_PP2D[ir][jr] += weight;
807 m_PP2D_weighted[ir][jr] += ww*weight;
818 m_PP2D[ir][jr] += weight;
819 m_PP2D_weighted[ir][jr] += ww*weight;
830 m_PP2D[ir][jr] += weight;
831 m_PP2D_weighted[ir][jr] += ww*weight;
842 m_PP2D[ir][jr] += weight;
843 m_PP2D_weighted[ir][jr] += ww*weight;
854 m_PP2D[ir][jr] += weight;
855 m_PP2D_weighted[ir][jr] += ww*weight;
866 m_PP2D[ir][jr] += weight;
867 m_PP2D_weighted[ir][jr] += ww*weight;
878 m_PP2D[ir][jr] += weight;
879 m_PP2D_weighted[ir][jr] += ww*weight;
895 m_PP2D[i][j] += data[0];
896 m_PP2D_weighted[i][j] += data[1];
905 add_data2D(i, j, {ww*pair->PP2D(i, j), ww*pair->PP2D_weighted(i, j)});
914 if (m_nbins_D1 != pair->nbins_D1() || m_nbins_D2 != pair->nbins_D2())
915 ErrorCBL(
"dimension problems!",
"Sum",
"Pair2D.cpp");
917 for (
int i=0; i<m_nbins_D1; i++)
918 for (
int j=0; j<m_nbins_D2; j++)
919 add_data2D(i, j, pair, ww);
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void put(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2) override
estimate the distance between two objects and update the pair vector accordingly
void set(const int ir, const int jr, const double ww, const double weight=1) override
set the pair vector
void m_set_parameters_binSize() override
set the binning parameters given the bin size
void get(const std::shared_ptr< catalogue::Object > obj1, const std::shared_ptr< catalogue::Object > obj2, int &ir, int &jr, double &ww) override
get the pair index and weight
void m_set_parameters_nbins() override
set the binning parameters given the number of bins
void Sum(const std::shared_ptr< Pair > pp, const double ww=1) override
sum the number of binned pairs
void reset() override
reset the pair counts
void add_data2D(const int i, const int j, const std::vector< double > data) override
set the protected members by adding new data
static const double pi
: the ratio of a circle's circumference to its diameter
The global namespace of the CosmoBolognaLib
double Euclidean_distance(const double x1, const double x2, const double y1, const double y2, const double z1, const double z2)
the Euclidean distance in 3D relative to the origin (0,0,0), i.e. the Euclidean norm
double converted_angle(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_, const CoordinateUnits outputUnits=CoordinateUnits::_degrees_)
conversion to angle units
double angular_distance(const double x1, const double x2, const double y1, const double y2, const double z1, const double z2)
the angular separation in 3D
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
int nint(const T val)
the nearest integer
double perpendicular_distance(const double ra1, const double ra2, const double dec1, const double dec2, const double d1, const double d2)
the perpendicular separation, rp