40 using namespace catalogue;
41 using namespace pairs;
49 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
50 const double pi = fabs(obj1->dc()-obj2->dc());
52 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
54 const int ir = max(0, min(
int((rp-m_rpMin)*m_binSize_inv_D1), m_nbins_D1));
55 const int jr = max(0, min(
int((
pi-m_piMin)*m_binSize_inv_D2), m_nbins_D2));
57 const double angWeight = (m_angularWeight==
nullptr) ? 1.
58 : 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)));
60 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
63 m_PP2D_weighted[ir][jr] += WeightTOT;
65 if (m_PP2D_weighted[ir][jr]>0) {
67 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
68 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
69 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rp-scale_D1_mean_p);
70 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(
pi-scale_D2_mean_p);
71 m_scale_D1_S[ir][jr] += WeightTOT*(rp-scale_D1_mean_p)*(rp-m_scale_D1_mean[ir][jr]);
72 m_scale_D2_S[ir][jr] += WeightTOT*(
pi-scale_D2_mean_p)*(
pi-m_scale_D2_mean[ir][jr]);
74 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
75 const double z_mean_p = m_z_mean[ir][jr];
76 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
77 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
89 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
90 const double pi = fabs(obj1->dc()-obj2->dc());
92 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
94 const int ir = max(0, min(
int((rp-m_rpMin)*m_binSize_inv_D1), m_nbins_D1));
95 const int jr = max(0, min(
int((log10(
pi)-log10(m_piMin))*m_binSize_inv_D2), m_nbins_D2));
97 const double angWeight = (m_angularWeight==
nullptr) ? 1.
98 : 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)));
100 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
103 m_PP2D_weighted[ir][jr] += WeightTOT;
105 if (m_PP2D_weighted[ir][jr]>0) {
107 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
108 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
109 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rp-scale_D1_mean_p);
110 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(
pi-scale_D2_mean_p);
111 m_scale_D1_S[ir][jr] += WeightTOT*(rp-scale_D1_mean_p)*(rp-m_scale_D1_mean[ir][jr]);
112 m_scale_D2_S[ir][jr] += WeightTOT*(
pi-scale_D2_mean_p)*(
pi-m_scale_D2_mean[ir][jr]);
114 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
115 const double z_mean_p = m_z_mean[ir][jr];
116 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
117 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
130 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
131 const double pi = fabs(obj1->dc()-obj2->dc());
133 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
135 const int ir = max(0, min(
int((log10(rp)-log10(m_rpMin))*m_binSize_inv_D1), m_nbins_D1));
136 const int jr = max(0, min(
int((
pi-m_piMin)*m_binSize_inv_D2), m_nbins_D2));
138 const double angWeight = (m_angularWeight==
nullptr) ? 1.
139 : 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)));
141 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
144 m_PP2D_weighted[ir][jr] += WeightTOT;
146 if (m_PP2D_weighted[ir][jr]>0) {
148 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
149 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
150 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rp-scale_D1_mean_p);
151 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(
pi-scale_D2_mean_p);
152 m_scale_D1_S[ir][jr] += WeightTOT*(rp-scale_D1_mean_p)*(rp-m_scale_D1_mean[ir][jr]);
153 m_scale_D2_S[ir][jr] += WeightTOT*(
pi-scale_D2_mean_p)*(
pi-m_scale_D2_mean[ir][jr]);
155 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
156 const double z_mean_p = m_z_mean[ir][jr];
157 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
158 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
171 const double rp =
perpendicular_distance(obj1->ra(), obj2->ra(), obj1->dec(), obj2->dec(), obj1->dc(), obj2->dc());
172 const double pi = fabs(obj1->dc()-obj2->dc());
174 if (m_rpMin<rp && rp<m_rpMax && m_piMin<
pi &&
pi<m_piMax) {
176 const int ir = max(0, min(
int((log10(rp)-log10(m_rpMin))*m_binSize_inv_D1), m_nbins_D1));
177 const int jr = max(0, min(
int((log10(
pi)-log10(m_piMin))*m_binSize_inv_D2), m_nbins_D2));
179 const double angWeight = (m_angularWeight==
nullptr) ? 1.
180 : 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)));
182 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
185 m_PP2D_weighted[ir][jr] += WeightTOT;
187 if (m_PP2D_weighted[ir][jr]>0) {
189 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
190 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
191 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rp-scale_D1_mean_p);
192 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(
pi-scale_D2_mean_p);
193 m_scale_D1_S[ir][jr] += WeightTOT*(rp-scale_D1_mean_p)*(rp-m_scale_D1_mean[ir][jr]);
194 m_scale_D2_S[ir][jr] += WeightTOT*(
pi-scale_D2_mean_p)*(
pi-m_scale_D2_mean[ir][jr]);
196 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
197 const double z_mean_p = m_z_mean[ir][jr];
198 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
199 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
212 double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
213 double mu = fabs(obj1->dc()-obj2->dc())/rr;
215 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
217 const int ir = max(0, min(
int((rr-m_rMin)*m_binSize_inv_D1), m_nbins_D1));
218 const int jr = max(0, min(
int((mu-m_muMin)*m_binSize_inv_D2), m_nbins_D2));
220 const double angWeight = (m_angularWeight==
nullptr) ? 1.
221 : 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)));
223 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
226 m_PP2D_weighted[ir][jr] += WeightTOT;
228 if (m_PP2D_weighted[ir][jr]>0) {
230 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
231 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
232 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rr-scale_D1_mean_p);
233 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(mu-scale_D2_mean_p);
234 m_scale_D1_S[ir][jr] += WeightTOT*(rr-scale_D1_mean_p)*(rr-m_scale_D1_mean[ir][jr]);
235 m_scale_D2_S[ir][jr] += WeightTOT*(mu-scale_D2_mean_p)*(mu-m_scale_D2_mean[ir][jr]);
237 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
238 const double z_mean_p = m_z_mean[ir][jr];
239 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
240 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
253 double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
254 double mu = fabs(obj1->dc()-obj2->dc())/rr;
256 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
258 const int ir = max(0, min(
int((rr-m_rMin)*m_binSize_inv_D1), m_nbins_D1));
259 const int jr = max(0, min(
int((log10(mu)-log10(m_muMin))*m_binSize_inv_D2), m_nbins_D2));
261 const double angWeight = (m_angularWeight==
nullptr) ? 1.
262 : 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)));
264 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
267 m_PP2D_weighted[ir][jr] += WeightTOT;
269 if (m_PP2D_weighted[ir][jr]>0) {
271 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
272 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
273 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rr-scale_D1_mean_p);
274 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(mu-scale_D2_mean_p);
275 m_scale_D1_S[ir][jr] += WeightTOT*(rr-scale_D1_mean_p)*(rr-m_scale_D1_mean[ir][jr]);
276 m_scale_D2_S[ir][jr] += WeightTOT*(mu-scale_D2_mean_p)*(mu-m_scale_D2_mean[ir][jr]);
278 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
279 const double z_mean_p = m_z_mean[ir][jr];
280 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
281 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
294 double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
295 double mu = fabs(obj1->dc()-obj2->dc())/rr;
297 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
299 const int ir = max(0, min(
int((log10(rr)-log10(m_rMin))*m_binSize_inv_D1), m_nbins_D1));
300 const int jr = max(0, min(
int((mu-m_muMin)*m_binSize_inv_D2), m_nbins_D2));
302 const double angWeight = (m_angularWeight==
nullptr) ? 1.
303 : 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)));
305 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
308 m_PP2D_weighted[ir][jr] += WeightTOT;
310 if (m_PP2D_weighted[ir][jr]>0) {
312 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
313 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
314 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rr-scale_D1_mean_p);
315 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(mu-scale_D2_mean_p);
316 m_scale_D1_S[ir][jr] += WeightTOT*(rr-scale_D1_mean_p)*(rr-m_scale_D1_mean[ir][jr]);
317 m_scale_D2_S[ir][jr] += WeightTOT*(mu-scale_D2_mean_p)*(mu-m_scale_D2_mean[ir][jr]);
319 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
320 const double z_mean_p = m_z_mean[ir][jr];
321 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
322 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
335 double rr =
Euclidean_distance(obj1->xx(), obj2->xx(), obj1->yy(), obj2->yy(), obj1->zz(), obj2->zz());
336 double mu = fabs(obj1->dc()-obj2->dc())/rr;
338 if (m_rMin<rr && rr<m_rMax && m_muMin<mu && mu<m_muMax) {
340 const int ir = max(0, min(
int((log10(rr)-log10(m_rMin))*m_binSize_inv_D1), m_nbins_D1));
341 const int jr = max(0, min(
int((log10(mu)-log10(m_muMin))*m_binSize_inv_D2), m_nbins_D2));
343 const double angWeight = (m_angularWeight==
nullptr) ? 1.
344 : 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)));
346 const double WeightTOT = obj1->weight()*obj2->weight()*angWeight;
349 m_PP2D_weighted[ir][jr] += WeightTOT;
351 if (m_PP2D_weighted[ir][jr]>0) {
353 const double scale_D1_mean_p = m_scale_D1_mean[ir][jr];
354 const double scale_D2_mean_p = m_scale_D2_mean[ir][jr];
355 m_scale_D1_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(rr-scale_D1_mean_p);
356 m_scale_D2_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(mu-scale_D2_mean_p);
357 m_scale_D1_S[ir][jr] += WeightTOT*(rr-scale_D1_mean_p)*(rr-m_scale_D1_mean[ir][jr]);
358 m_scale_D2_S[ir][jr] += WeightTOT*(mu-scale_D2_mean_p)*(mu-m_scale_D2_mean[ir][jr]);
360 const double pair_redshift = (obj1->redshift()>0 && obj2->redshift()>0) ? (obj1->redshift()+obj2->redshift())*0.5 : -1.;
361 const double z_mean_p = m_z_mean[ir][jr];
362 m_z_mean[ir][jr] += WeightTOT/m_PP2D_weighted[ir][jr]*(pair_redshift-z_mean_p);
363 m_z_S[ir][jr] += WeightTOT*(pair_redshift-z_mean_p)*(pair_redshift-m_z_mean[ir][jr]);
389 const double scale_D1_mean_temp_p = m_scale_D1_mean[i][j];
392 const double scale_D2_mean_temp_p = m_scale_D2_mean[i][j];
395 const double z_mean_temp_p = m_z_mean[i][j];
398 m_PP2D[i][j] += data[0];
401 m_PP2D_weighted[i][j] += data[1];
404 if (m_PP2D_weighted[i][j]>0) {
407 m_scale_D1_mean[i][j] += data[1]/m_PP2D_weighted[i][j]*(data[2]-scale_D1_mean_temp_p);
410 m_scale_D2_mean[i][j] += data[1]/m_PP2D_weighted[i][j]*(data[4]-scale_D2_mean_temp_p);
413 m_z_mean[i][j] += data[1]/m_PP2D_weighted[i][j]*(data[6]-z_mean_temp_p);
416 m_scale_D1_S[i][j] += data[3]+pow(data[2]-scale_D1_mean_temp_p, 2)*data[1]*(m_PP2D_weighted[i][j]-data[1])/m_PP2D_weighted[i][j];
417 m_scale_D1_sigma[i][j] = sqrt(m_scale_D1_S[i][j]/m_PP2D_weighted[i][j]);
420 m_scale_D2_S[i][j] += data[5]+pow(data[4]-scale_D2_mean_temp_p, 2)*data[1]*(m_PP2D_weighted[i][j]-data[1])/m_PP2D_weighted[i][j];
421 m_scale_D2_sigma[i][j] = sqrt(m_scale_D2_S[i][j]/m_PP2D_weighted[i][j]);
424 m_z_S[i][j] += data[7]+pow(data[6]-z_mean_temp_p, 2)*data[1]*(m_PP2D_weighted[i][j]-data[1])/m_PP2D_weighted[i][j];
425 m_z_sigma[i][j] = sqrt(m_z_S[i][j]/m_PP2D_weighted[i][j]);
437 add_data2D(i, j, {ww*pair->PP2D(i, j), ww*pair->PP2D_weighted(i, j), pair->scale_D1_mean(i, j), pair->scale_D1_S(i, j), pair->scale_D2_mean(i, j), pair->scale_D2_S(i, j), pair->z_mean(i, j), pair->z_S(i, j)});
446 if (m_nbins_D1 != pair->nbins_D1() || m_nbins_D2 != pair->nbins_D2())
447 ErrorCBL(
"dimension problems!",
"Sum",
"Pair2D_extra.cpp");
449 for (
int i=0; i<m_nbins_D1; ++i)
450 for (
int j=0; j<m_nbins_D2; ++j)
451 add_data2D(i, j, pair, ww);
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
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