47 using namespace catalogue;
48 using namespace chainmesh;
50 using namespace pairs;
51 using namespace measure::twopt;
57 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType,
const double Min,
const double Max,
const int nbins,
const double shift,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
59 if (type==TwoPType::_angular_)
return move(unique_ptr<TwoPointCorrelation1D_angular>(
new TwoPointCorrelation1D_angular(data, random, binType,
Min,
Max, nbins, shift, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
61 else if (type==TwoPType::_monopole_)
return move(unique_ptr<TwoPointCorrelation1D_monopole>(
new TwoPointCorrelation1D_monopole(data, random, binType,
Min,
Max, nbins, shift, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
63 else if (type==TwoPType::_multipoles_direct_)
return move(unique_ptr<TwoPointCorrelation_multipoles_direct>(
new TwoPointCorrelation_multipoles_direct(data, random, binType,
Min,
Max, nbins, shift, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
65 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
74 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType,
const double Min,
const double Max,
const double binSize,
const double shift,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
76 if (type==TwoPType::_angular_)
return move(unique_ptr<TwoPointCorrelation1D_angular>(
new TwoPointCorrelation1D_angular(data, random, binType,
Min,
Max, binSize, shift, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
78 else if (type==TwoPType::_monopole_)
return move(unique_ptr<TwoPointCorrelation1D_monopole>(
new TwoPointCorrelation1D_monopole(data, random, binType,
Min,
Max, binSize, shift, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
80 else if (type==TwoPType::_multipoles_direct_)
return move(unique_ptr<TwoPointCorrelation_multipoles_direct>(
new TwoPointCorrelation_multipoles_direct(data, random, binType,
Min,
Max, binSize, shift, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
82 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
91 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
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, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
93 if (type==TwoPType::_multipoles_integrated_)
return move(unique_ptr<TwoPointCorrelation_multipoles_integrated>(
new TwoPointCorrelation_multipoles_integrated(data, random, binType_D1, Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
95 else if (type==TwoPType::_filtered_)
return move(unique_ptr<TwoPointCorrelation1D_filtered>(
new TwoPointCorrelation1D_filtered(data, random, binType_D1, Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
97 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
106 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
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, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
108 if (type==TwoPType::_multipoles_integrated_)
return move(unique_ptr<TwoPointCorrelation_multipoles_integrated>(
new TwoPointCorrelation_multipoles_integrated(data, random, binType_D1, Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
110 else if (type==TwoPType::_filtered_)
return move(unique_ptr<TwoPointCorrelation1D_filtered>(
new TwoPointCorrelation1D_filtered(data, random, binType_D1, Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
112 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
121 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
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 double piMax_integral,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
123 if (type==TwoPType::_projected_)
return move(unique_ptr<TwoPointCorrelation_projected>(
new TwoPointCorrelation_projected(data, random, binType_D1, Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, piMax_integral, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
125 else if (type==TwoPType::_deprojected_)
return move(unique_ptr<TwoPointCorrelation_deprojected>(
new TwoPointCorrelation_deprojected(data, random, Min_D1, Max_D1, nbins_D1, shift_D1, Min_D2, Max_D2, nbins_D2, shift_D2, piMax_integral, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
127 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
136 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
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 double piMax_integral,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
138 if (type==TwoPType::_projected_)
return move(unique_ptr<TwoPointCorrelation_projected>(
new TwoPointCorrelation_projected(data, random, binType_D1, Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, piMax_integral, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
140 else if (type==TwoPType::_deprojected_)
return move(unique_ptr<TwoPointCorrelation_deprojected>(
new TwoPointCorrelation_deprojected(data, random, Min_D1, Max_D1, binSize_D1, shift_D1, Min_D2, Max_D2, binSize_D2, shift_D2, piMax_integral, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
142 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
151 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
const double Min_D1,
const double Max_D1,
const int nbins_D1,
const double shift_D1,
const int nWedges,
const int nbins_D2,
const double shift_D2,
const std::vector<std::vector<double>> mu_integral_limits,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
153 if (type==TwoPType::_wedges_)
return move(unique_ptr<TwoPointCorrelation_wedges>(
new TwoPointCorrelation_wedges(data, random, binType_D1, Min_D1, Max_D1, nbins_D1, shift_D1, nWedges, nbins_D2, shift_D2, mu_integral_limits, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
155 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
164 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
const double Min_D1,
const double Max_D1,
const double binSize_D1,
const double shift_D1,
const int nWedges,
const double binSize_D2,
const double shift_D2,
const std::vector<std::vector<double>> mu_integral_limits,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
166 if (type==TwoPType::_wedges_)
return move(unique_ptr<TwoPointCorrelation_wedges>(
new TwoPointCorrelation_wedges(data, random, binType_D1, Min_D1, Max_D1, binSize_D1, shift_D1, nWedges, binSize_D2, shift_D2, mu_integral_limits, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
168 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
177 shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
const double Min_D1,
const double Max_D1,
const int nbins_D1,
const double shift_D1,
const BinType binType_D2,
const double Min_D2,
const double Max_D2,
const int nbins_D2,
const double shift_D2,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
179 if (type==TwoPType::_2D_Cartesian_)
return move(unique_ptr<TwoPointCorrelation2D_cartesian>(
new TwoPointCorrelation2D_cartesian(data, random, binType_D1, Min_D1, Max_D1, nbins_D1, shift_D1, binType_D2, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
181 else if (type==TwoPType::_2D_polar_)
return move(unique_ptr<TwoPointCorrelation2D_polar>(
new TwoPointCorrelation2D_polar(data, random, binType_D1, Min_D1, Max_D1, nbins_D1, shift_D1, binType_D2, Min_D2, Max_D2, nbins_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
183 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
204 std::shared_ptr<TwoPointCorrelation>
cbl::measure::twopt::TwoPointCorrelation::Create (
const TwoPType type,
const catalogue::Catalogue data,
const catalogue::Catalogue random,
const BinType binType_D1,
const double Min_D1,
const double Max_D1,
const double binSize_D1,
const double shift_D1,
const BinType binType_D2,
const double Min_D2,
const double Max_D2,
const double binSize_D2,
const double shift_D2,
const CoordinateUnits angularUnits, std::function<
double(
double)> angularWeight,
const bool compute_extra_info,
const double random_dilution_fraction)
206 if (type==TwoPType::_2D_Cartesian_)
return move(unique_ptr<TwoPointCorrelation2D_cartesian>(
new TwoPointCorrelation2D_cartesian(data, random, binType_D1, Min_D1, Max_D1, binSize_D1, shift_D1, binType_D2, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
208 else if (type==TwoPType::_2D_polar_)
return move(unique_ptr<TwoPointCorrelation2D_polar>(
new TwoPointCorrelation2D_polar(data, random, binType_D1, Min_D1, Max_D1, binSize_D1, shift_D1, binType_D2, Min_D2, Max_D2, binSize_D2, shift_D2, angularUnits, angularWeight, compute_extra_info, random_dilution_fraction)));
210 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"TwoPointCorrelation.cpp");
222 time_t start; time(&start);
223 int dp = cout.precision();
224 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2);
227 int nObj = cat1->nObjects();
230 float fact_count = 100./nObj;
233 shared_ptr<Catalogue> cat2 = ChM.
catalogue();
239 #pragma omp parallel num_threads(omp_get_max_threads()) private(tid)
242 tid = omp_get_thread_num();
249 shared_ptr<Pair> pp_thread = (pp->pairDim()==Dim::_1D_) ? move(Pair::Create(pp->pairType(), pp->pairInfo(), pp->sMin(), pp->sMax(), pp->nbins(), pp->shift(), pp->angularUnits(), pp->angularWeight()))
250 : move(Pair::Create(pp->pairType(), pp->pairInfo(), pp->sMin_D1(), pp->sMax_D1(), pp->nbins_D1(), pp->shift_D1(), pp->sMin_D2(), pp->sMax_D2(), pp->nbins_D2(), pp->shift_D2(), pp->angularUnits(), pp->angularWeight()));
254 #pragma omp for schedule(static, 2)
257 for (
int i=0; i<nObj; ++i) {
261 vector<long> close_objects = ChM.
close_objects(cat1->coordinate(i), (cross) ? -1 : (
long)i);
264 for (
auto &&j : close_objects)
266 pp_thread->put(cat1->catalogue_object(i), cat2->catalogue_object(j));
269 time_t end_temp; time(&end_temp);
double diff_temp = difftime(end_temp, start);
270 if (tcount && tid==0) {
coutCBL <<
"\r" << float(i)*fact_count <<
"% completed (" << diff_temp <<
" seconds)\r"; cout.flush(); }
271 if (i==
int(nObj*0.25))
coutCBL <<
".............25% completed " << endl;
272 if (i==
int(nObj*0.5))
coutCBL <<
".............50% completed " << endl;
273 if (i==
int(nObj*0.75))
coutCBL <<
".............75% completed "<< endl;
287 time_t end; time (&end);
288 double diff = difftime(end, start);
290 if (diff<60)
coutCBL <<
" time spent to count the pairs: " << diff <<
" seconds" << endl ;
291 else if (diff<3600)
coutCBL <<
" time spent to count the pairs: " << diff/60 <<
" minutes" << endl ;
292 else coutCBL <<
" time spent to count the pairs: " << diff/3600 <<
" hours" << endl ;
294 cout.unsetf(ios::fixed); cout.unsetf(ios::showpoint); cout.precision(dp);
306 if (!m_data->isSetVar(Var::_RA_) || !m_data->isSetVar(Var::_Dec_) || !m_data->isSetVar(Var::_Dc_))
307 m_data->computePolarCoordinates();
309 if (!m_random->isSetVar(Var::_RA_) || !m_random->isSetVar(Var::_Dec_) || !m_random->isSetVar(Var::_Dc_))
310 m_random->computePolarCoordinates();
312 if (type==TwoPType::_angular_) {
313 m_data->normalizeComovingCoordinates();
314 m_random->normalizeComovingCoordinates();
320 if (estimator==Estimator::_natural_ && m_random_dilution_fraction!=1.) {
321 m_random_dilution_fraction = 1.;
322 WarningMsgCBL(
"m_random_dilution_fraction = 1, since the random catalogue is not diluted when using the natural estimator!",
"count_allPairs",
"TwoPointCorrelation.cpp");
325 auto random_dil = make_shared<catalogue::Catalogue>(
catalogue::Catalogue(move(m_random->diluted_catalogue(m_random_dilution_fraction))));
333 if (type==TwoPType::_monopole_ || type==TwoPType::_multipoles_direct_ || type==TwoPType::_filtered_) {
338 else if (type==TwoPType::_angular_) {
341 rMAX = sqrt(yy*yy+zz*zz);
343 rMIN = sqrt(yy*yy+zz*zz);
346 else if (type==TwoPType::_2D_polar_ || type==TwoPType::_multipoles_integrated_ || type ==TwoPType::_wedges_) {
347 rMAX = m_dd->sMax_D1();
348 rMIN = m_dd->sMin_D1();
351 else if (type==TwoPType::_2D_Cartesian_ || type==TwoPType::_projected_ || type==TwoPType::_deprojected_) {
352 rMAX = max(m_dd->sMax_D1(), m_dd->sMax_D2())*sqrt(2.);
353 rMIN = max(m_dd->sMin_D1(), m_dd->sMin_D2())*sqrt(2.);
357 ErrorCBL(
"the chosen two-point correlation function type is uknown!",
"count_allPairs",
"TwoPointCorrelation.cpp");
360 double cell_size = fact*rMAX;
365 ChM_data.
set_par(cell_size, m_data, rMAX, rMIN);
368 ChM_random_dil.
set_par(cell_size, random_dil, rMAX, rMIN);
371 ChM_random.
set_par(cell_size, m_random, rMAX, rMIN);
384 count_pairs(m_data, ChM_data, m_dd,
false, tcount);
387 else read_pairs(m_dd, dir_input_pairs, file);
394 count_pairs(random_dil, ChM_random_dil, m_rr,
false, tcount);
397 else read_pairs(m_rr, dir_input_pairs, file);
400 if (estimator==Estimator::_LandySzalay_) {
406 count_pairs(m_data, ChM_random, m_dr,
true, tcount);
409 else read_pairs(m_dr, dir_input_pairs, file);
416 if (count_rr || count_dr)
419 if (type==TwoPType::_angular_) {
420 m_data->restoreComovingCoordinates();
421 m_random->restoreComovingCoordinates();
432 if (estimator!=Estimator::_natural_ && estimator!=Estimator::_LandySzalay_)
433 ErrorCBL(
"The implementation of Poisson errors for the chosen estimator is not available yet!",
"PoissonError",
"TwoPointCorrelation.cpp", glob::ExitCode::_workInProgress_);
435 double fR = m_random_dilution_fraction;
436 if (estimator==Estimator::_natural_ && fR!=1) {
438 WarningMsgCBL(
"fR = 1, since the random catalogue is not diluted when using the natural estimator!",
"PoissonError",
"TwoPointCorrelation.cpp");
441 const double norm1 = double(nRandom)*double(nRandom-1)/(double(nData)*double(nData-1));
442 const double norm2 = double(nRandom-1)/double(nData);
444 const double T1 = pow(norm1*sqrt(dd)/rr, 2);
445 const double T2 = pow(norm2*sqrt(dr)/rr, 2);
446 const double T3 = pow((norm1*dd-norm2*dr)*pow(rr, -1.5), 2);
449 WarningMsgCBL(
"enlarge the random sample, that dominates the Poisson errors!",
"PoissonError",
"TwoPointCorrelation.cpp");
451 return pow(fR, 2)*sqrt(T1+T2+T3);
461 time_t start; time (&start);
462 int dp = cout.precision();
463 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2);
466 int nObj = cat1->nObjects();
469 float fact_count = 100./nObj;
472 shared_ptr<Catalogue> cat2 = ChM.
catalogue();
478 const int nRegions = cat2->nRegions();
480 #pragma omp parallel num_threads(omp_get_max_threads()) private(tid)
482 tid = omp_get_thread_num();
484 vector<shared_ptr<Pair> > pp_thread(pp_regions.size());
486 for (
size_t i=0; i<pp_regions.size(); ++i)
487 pp_thread[i] = (pp->pairDim()==Dim::_1D_) ? move(Pair::Create(pp->pairType(), pp->pairInfo(), pp->sMin(), pp->sMax(), pp->nbins(), pp->shift(), pp->angularUnits(), pp->angularWeight()))
488 : move(Pair::Create(pp->pairType(), pp->pairInfo(), pp->sMin_D1(), pp->sMax_D1(), pp->nbins_D1(), pp->shift_D1(), pp->sMin_D2(), pp->sMax_D2(), pp->nbins_D2(), pp->shift_D2(), pp->angularUnits(), pp->angularWeight()));
492 #pragma omp for schedule(static, 2)
493 for (
int i=0; i<nObj; ++i) {
495 vector<long int> close_objects = ChM.
close_objects(cat1->coordinate(i), (cross) ? -1 : i);
497 for (
auto &&j : close_objects) {
498 const int reg1 = (cross) ? cat1->region(i) : min(cat1->region(i), cat2->region(j));
499 const int reg2 = (cross) ? cat2->region(j) : max(cat1->region(i), cat2->region(j));
502 const size_t index = (cross) ? reg1*nRegions+reg2 : reg1*nRegions+reg2-(reg1-1)*reg1/2-reg1;
504 pp_thread[index]->put(cat1->catalogue_object(i), cat2->catalogue_object(j));
508 time_t end_temp; time (&end_temp);
double diff_temp = difftime(end_temp, start);
509 if (tcount && tid==0) {
coutCBL <<
"\r" << float(i)*fact_count <<
"% completed (" << diff_temp <<
" seconds)\r"; cout.flush(); }
510 if (i==
int(nObj*0.25))
coutCBL <<
".............25% completed " << endl;
511 if (i==
int(nObj*0.5))
coutCBL <<
".............50% completed " << endl;
512 if (i==
int(nObj*0.75))
coutCBL <<
".............75% completed "<< endl;
518 for (
size_t i=0; i<pp_regions.size(); ++i)
519 pp_regions[i]->Sum(pp_thread[i]);
526 time_t end; time (&end);
527 double diff = difftime(end, start);
529 if (diff<60)
coutCBL <<
" time spent to count the pairs: " << diff <<
" seconds" << endl ;
530 else if (diff<3600)
coutCBL <<
" time spent to count the pairs: " << diff/60 <<
" minutes" << endl ;
531 else coutCBL <<
" time spent to count the pairs: " << diff/3600 <<
" hours" << endl ;
533 cout.unsetf(ios::fixed); cout.unsetf(ios::showpoint); cout.precision(dp);
538 switch (pp->pairDim()) {
541 for (
size_t i=0; i<pp->PP1D().size(); ++i)
542 for (
size_t r=0; r<pp_regions.size(); ++r)
543 pp->add_data1D(i, pp_regions[r]);
547 for (
int i=0; i<pp->nbins_D1(); ++i)
548 for (
int j=0; j<pp->nbins_D2(); ++j)
549 for (
size_t r=0; r<pp_regions.size(); ++r)
550 pp->add_data2D(i, j, pp_regions[r]);
554 ErrorCBL(
"no such type of pair dimension!",
"count_pairs_region",
"TwoPointCorrelation.cpp");
566 if(pp->pairDim()==Dim::_1D_)
567 count_pairs_region_test_1D(cat1, ChM, pp, pp_res, weight, cross, tcount);
568 else if(pp->pairDim()==Dim::_2D_)
569 count_pairs_region_test_2D(cat1, ChM, pp, pp_res, weight, cross, tcount);
571 ErrorCBL(
"wrong pair type!",
"count_pairs_region_test",
"TwoPointCorrelation.cpp");
581 time_t start; time (&start);
582 int dp = cout.precision();
583 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2);
586 int nObj = cat1->nObjects();
589 float fact_count = 100./nObj;
592 shared_ptr<Catalogue> cat2 = ChM.
catalogue();
598 #pragma omp parallel num_threads(omp_get_max_threads()) private(tid)
600 tid = omp_get_thread_num();
602 shared_ptr<Pair> pp_thread;
603 vector<shared_ptr<Pair> > pp_res_thread(pp_res.size());
605 pp_thread = move(Pair::Create(pp->pairType(), pp->pairInfo(), pp->sMin(), pp->sMax(), pp->nbins(), pp->shift(), pp->angularUnits(), pp->angularWeight()));
607 for (
size_t i=0; i<pp_res.size(); ++i)
608 pp_res_thread[i] = move(Pair::Create(pp->pairType(), PairInfo::_standard_, pp->sMin(), pp->sMax(), pp->nbins(), pp->shift(), pp->angularUnits(), pp->angularWeight()));
611 #pragma omp for schedule(static, 2)
612 for (
int i=0; i<nObj; ++i) {
614 vector<long int> close_objects = ChM.
close_objects(cat1->coordinate(i), (cross) ? -1 : i);
616 for (
auto &&j : close_objects) {
620 pp_thread->get(cat1->catalogue_object(i), cat2->catalogue_object(j), kk, wkk);
621 pp_thread->set(kk, wkk);
623 vector<double> ww = weight;
625 ww[cat1->region(i)] = 0;
626 ww[cat2->region(j)] = 0;
628 for(
size_t k=0; k< weight.size(); k++)
629 pp_res_thread[k]->set(kk, wkk, ww[k]);
633 time_t end_temp; time (&end_temp);
double diff_temp = difftime(end_temp, start);
634 if (tcount && tid==0) {
coutCBL <<
"\r" << float(i)*fact_count <<
"% completed (" << diff_temp <<
" seconds)\r"; cout.flush(); }
635 if (i==
int(nObj*0.25))
coutCBL <<
".............25% completed " << endl;
636 if (i==
int(nObj*0.5))
coutCBL <<
".............50% completed " << endl;
637 if (i==
int(nObj*0.75))
coutCBL <<
".............75% completed "<< endl;
645 for (
size_t i=0; i<pp_res.size(); ++i)
646 pp_res[i]->Sum(pp_res_thread[i]);
653 time_t end; time (&end);
654 double diff = difftime(end, start);
656 if (diff<60)
coutCBL <<
" time spent to count the pairs: " << diff <<
" seconds" << endl ;
657 else if (diff<3600)
coutCBL <<
" time spent to count the pairs: " << diff/60 <<
" minutes" << endl ;
658 else coutCBL <<
" time spent to count the pairs: " << diff/3600 <<
" hours" << endl ;
660 cout.unsetf(ios::fixed); cout.unsetf(ios::showpoint); cout.precision(dp);
671 time_t start; time (&start);
672 int dp = cout.precision();
673 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2);
676 int nObj = cat1->nObjects();
679 float fact_count = 100./nObj;
682 shared_ptr<Catalogue> cat2 = ChM.
catalogue();
687 #pragma omp parallel num_threads(omp_get_max_threads()) private(tid)
689 tid = omp_get_thread_num();
691 shared_ptr<Pair> pp_thread;
692 vector<shared_ptr<Pair> > pp_res_thread(pp_res.size());
694 pp_thread = move(Pair::Create(pp->pairType(), pp->pairInfo(), pp->sMin_D1(), pp->sMax_D1(), pp->nbins_D1(), pp->shift_D1(), pp->sMin_D2(), pp->sMax_D2(), pp->nbins_D2(), pp->shift_D2(), pp->angularUnits(), pp->angularWeight()));
696 for (
size_t i=0; i<pp_res.size(); ++i)
697 pp_res_thread[i] = move(Pair::Create(pp->pairType(), PairInfo::_standard_, pp->sMin_D1(), pp->sMax_D1(), pp->nbins_D1(), pp->shift_D1(), pp->sMin_D2(), pp->sMax_D2(), pp->nbins_D2(), pp->shift_D2(), pp->angularUnits(), pp->angularWeight()));
700 #pragma omp for schedule(static, 2)
701 for (
int i=0; i<nObj; ++i) {
703 vector<long int> close_objects = ChM.
close_objects(cat1->coordinate(i), (cross) ? -1 : i);
705 for (
auto &&j : close_objects) {
709 pp_thread->get(cat1->catalogue_object(i), cat2->catalogue_object(j), ir, jr, wkk);
710 pp_thread->set(ir, jr, wkk);
712 int reg1 = (cross) ? cat1->region(i) : min(cat1->region(i), cat2->region(j));
713 int reg2 = (cross) ? cat2->region(j) : max(cat1->region(i), cat2->region(j));
715 vector<double> ww = weight;
720 for(
size_t k=0; k< weight.size(); k++)
721 pp_res_thread[k]->set(ir, jr, wkk, ww[k]);
725 time_t end_temp; time (&end_temp);
double diff_temp = difftime(end_temp, start);
726 if (tcount && tid==0) {
coutCBL <<
"\r" << float(i)*fact_count <<
"% completed (" << diff_temp <<
" seconds)\r"; cout.flush(); }
727 if (i==
int(nObj*0.25))
coutCBL <<
".............25% completed " << endl;
728 if (i==
int(nObj*0.5))
coutCBL <<
".............50% completed " << endl;
729 if (i==
int(nObj*0.75))
coutCBL <<
".............75% completed "<< endl;
737 for (
size_t i=0; i<pp_res.size(); ++i)
738 pp_res[i]->Sum(pp_res_thread[i]);
745 time_t end; time (&end);
746 double diff = difftime(end, start);
748 if (diff<60)
coutCBL <<
" time spent to count the pairs: " << diff <<
" seconds" << endl ;
749 else if (diff<3600)
coutCBL <<
" time spent to count the pairs: " << diff/60 <<
" minutes" << endl ;
750 else coutCBL <<
" time spent to count the pairs: " << diff/3600 <<
" hours" << endl ;
752 cout.unsetf(ios::fixed); cout.unsetf(ios::showpoint); cout.precision(dp);
760 void cbl::measure::twopt::TwoPointCorrelation::count_allPairs_region (std::vector<std::shared_ptr<Pair> > &dd_regions, std::vector<std::shared_ptr<Pair> > &rr_regions, std::vector<std::shared_ptr<Pair> > &dr_regions,
const TwoPType type,
const std::string dir_output_pairs,
const std::vector<std::string> dir_input_pairs,
const bool count_dd,
const bool count_rr,
const bool count_dr,
const bool tcount,
const Estimator estimator,
const double fact)
764 if (!m_data->isSetVar(Var::_RA_) || !m_data->isSetVar(Var::_Dec_) || !m_data->isSetVar(Var::_Dc_))
765 m_data->computePolarCoordinates();
767 if (!m_random->isSetVar(Var::_RA_) || !m_random->isSetVar(Var::_Dec_) || !m_random->isSetVar(Var::_Dc_))
768 m_random->computePolarCoordinates();
770 if (type==TwoPType::_angular_) {
771 m_data->normalizeComovingCoordinates();
772 m_random->normalizeComovingCoordinates();
778 if (estimator==Estimator::_natural_ && m_random_dilution_fraction!=1.) {
779 m_random_dilution_fraction = 1.;
780 WarningMsgCBL(
"m_random_dilution_fraction = 1, since the random catalogue is not diluted when using the natural estimator!",
"count_allPairs_region",
"TwoPointCorrelation.cpp");
783 auto random_dil = make_shared<catalogue::Catalogue>(
catalogue::Catalogue(move(m_random->diluted_catalogue(m_random_dilution_fraction))));
791 if (type==TwoPType::_monopole_ || type==TwoPType::_multipoles_direct_ || type==TwoPType::_filtered_) {
796 else if (type==TwoPType::_angular_) {
799 rMAX = sqrt(yy*yy+zz*zz);
801 rMIN = sqrt(yy*yy+zz*zz);
804 else if (type==TwoPType::_2D_polar_ || type==TwoPType::_multipoles_integrated_ || type ==TwoPType::_wedges_) {
805 rMAX = m_dd->sMax_D1();
806 rMIN = m_dd->sMin_D1();
809 else if (type==TwoPType::_2D_Cartesian_ || type==TwoPType::_projected_ || type==TwoPType::_deprojected_) {
810 rMAX = max(m_dd->sMax_D1(), m_dd->sMax_D2())*sqrt(2.);
811 rMIN = max(m_dd->sMin_D1(), m_dd->sMin_D2())*sqrt(2.);
815 ErrorCBL(
"the chosen two-point correlation function type is uknown!",
"count_allPairs_regions",
"TwoPointCorrelation.cpp");
818 double cell_size = fact*rMAX;
823 ChM_data.
set_par(cell_size, m_data, rMAX, rMIN);
825 if (count_rr || count_dr)
826 ChM_random.
set_par(cell_size, m_random, rMAX, rMIN);
829 ChM_random_dil.
set_par(cell_size, random_dil, rMAX, rMIN);
834 const int nRegions = m_random->nRegions();
837 ErrorCBL(
"set regions in data and random catalogue to compute 2pcf Jackknife/Bootstrap error!",
"count_allPairs_region",
"TwoPointCorrelation.cpp");
839 const int nP_auto = nRegions*(nRegions+1)*0.5;
840 const int nP_cross = nRegions*nRegions;
842 dd_regions.erase(dd_regions.begin(), dd_regions.end());
843 rr_regions.erase(rr_regions.begin(), rr_regions.end());
844 dr_regions.erase(dr_regions.begin(), dr_regions.end());
846 for (
int i=0; i<nP_auto; ++i) {
848 dd_regions.push_back((m_dd->pairDim()==Dim::_1D_) ? move(Pair::Create(m_dd->pairType(), m_dd->pairInfo(), m_dd->sMin(), m_dd->sMax(), m_dd->nbins(), m_dd->shift(), m_dd->angularUnits(), m_dd->angularWeight())) : move(Pair::Create(m_dd->pairType(), m_dd->pairInfo(), m_dd->sMin_D1(), m_dd->sMax_D1(), m_dd->nbins_D1(), m_dd->shift_D1(), m_dd->sMin_D2(), m_dd->sMax_D2(), m_dd->nbins_D2(), m_dd->shift_D2(), m_dd->angularUnits(), m_dd->angularWeight())));
850 rr_regions.push_back((m_rr->pairDim()==Dim::_1D_) ? move(Pair::Create(m_rr->pairType(), m_rr->pairInfo(), m_rr->sMin(), m_rr->sMax(), m_rr->nbins(), m_rr->shift(), m_rr->angularUnits(), m_rr->angularWeight())) : move(Pair::Create(m_rr->pairType(), m_rr->pairInfo(), m_rr->sMin_D1(), m_rr->sMax_D1(), m_rr->nbins_D1(), m_rr->shift_D1(), m_rr->sMin_D2(), m_rr->sMax_D2(), m_rr->nbins_D2(), m_rr->shift_D2(), m_rr->angularUnits(), m_rr->angularWeight())));
853 for (
int i=0; i<nP_cross; ++i) {
855 dr_regions.push_back((m_dr->pairDim()==Dim::_1D_) ? move(Pair::Create(m_dr->pairType(), m_dr->pairInfo(), m_dr->sMin(), m_dr->sMax(), m_dr->nbins(), m_dr->shift(), m_dr->angularUnits(), m_dr->angularWeight())) : move(Pair::Create(m_dr->pairType(), m_dr->pairInfo(), m_dr->sMin_D1(), m_dr->sMax_D1(), m_dr->nbins_D1(), m_dr->shift_D1(), m_dr->sMin_D2(), m_dr->sMax_D2(), m_dr->nbins_D2(), m_dr->shift_D2(), m_dr->angularUnits(), m_dr->angularWeight())));
864 string file, file_regions;
869 file_regions =
"dd_regions.dat";
872 count_pairs_region(m_data, ChM_data, m_dd, dd_regions,
false, tcount);
874 write_pairs(m_dd, dir_output_pairs, file);
875 write_pairs(dd_regions, dir_output_pairs, file_regions);
879 read_pairs(m_dd, dir_input_pairs, file);
880 read_pairs(dd_regions, dir_input_pairs, file_regions);
887 file_regions =
"rr_regions.dat";
890 count_pairs_region(random_dil, ChM_random_dil, m_rr, rr_regions,
false, tcount);
892 write_pairs(m_rr, dir_output_pairs, file);
893 write_pairs(rr_regions, dir_output_pairs, file_regions);
897 read_pairs(m_rr, dir_input_pairs, file);
898 read_pairs(rr_regions, dir_input_pairs, file_regions);
901 if (estimator==Estimator::_LandySzalay_) {
906 file_regions =
"dr_regions.dat";
909 count_pairs_region(m_data, ChM_random, m_dr, dr_regions,
true, tcount);
911 write_pairs(m_dr, dir_output_pairs, file);
912 write_pairs(dr_regions, dir_output_pairs, file_regions);
916 read_pairs(m_dr, dir_input_pairs, file);
917 read_pairs(dr_regions, dir_input_pairs, file_regions);
925 if (count_rr || count_dr)
928 if (type==TwoPType::_angular_) {
929 m_data->restoreComovingCoordinates();
930 m_random->restoreComovingCoordinates();
943 if (!m_data->isSetVar(Var::_RA_) || !m_data->isSetVar(Var::_Dec_) || !m_data->isSetVar(Var::_Dc_))
944 m_data->computePolarCoordinates();
946 if (!m_random->isSetVar(Var::_RA_) || !m_random->isSetVar(Var::_Dec_) || !m_random->isSetVar(Var::_Dc_))
947 m_random->computePolarCoordinates();
949 if (type==TwoPType::_angular_) {
950 m_data->normalizeComovingCoordinates();
951 m_random->normalizeComovingCoordinates();
957 if (estimator==Estimator::_natural_ && m_random_dilution_fraction!=1.) {
958 m_random_dilution_fraction = 1.;
959 WarningMsgCBL(
"m_random_dilution_fraction = 1, since the random catalogue is not diluted when using the natural estimator!",
"count_allPairs_region_test",
"TwoPointCorrelation.cpp");
962 auto random_dil = make_shared<catalogue::Catalogue>(
catalogue::Catalogue(move(m_random->diluted_catalogue(m_random_dilution_fraction))));
970 if (type==TwoPType::_monopole_ || type==TwoPType::_filtered_) {
975 else if (type==TwoPType::_angular_) {
978 rMAX = sqrt(yy*yy+zz*zz);
980 rMIN = sqrt(yy*yy+zz*zz);
983 else if (type==TwoPType::_2D_polar_ || type==TwoPType::_multipoles_integrated_ || type ==TwoPType::_wedges_) {
984 rMAX = m_dd->sMax_D1();
985 rMIN = m_dd->sMin_D1();
988 else if (type==TwoPType::_2D_Cartesian_ || type==TwoPType::_projected_ || type==TwoPType::_deprojected_) {
989 rMAX = max(m_dd->sMax_D1(), m_dd->sMax_D2())*sqrt(2.);
990 rMIN = max(m_dd->sMin_D1(), m_dd->sMin_D2())*sqrt(2.);
994 ErrorCBL(
"the chosen two-point correlation function type is uknown!",
"count_allPairs_regions",
"TwoPointCorrelation.cpp");
997 double cell_size = fact*rMAX;
1002 ChM_data.
set_par(cell_size, m_data, rMAX, rMIN);
1004 if (count_rr || count_dr)
1005 ChM_random.
set_par(cell_size, m_random, rMAX, rMIN);
1008 ChM_random_dil.
set_par(cell_size, random_dil, rMAX, rMIN);
1013 int nResamplings = weight.size();
1015 for (
int i=0; i<nResamplings; ++i) {
1017 m_dd_res.push_back((m_dd->pairDim()==Dim::_1D_) ? move(Pair::Create(m_dd->pairType(), m_dd->pairInfo(), m_dd->sMin(), m_dd->sMax(), m_dd->nbins(), m_dd->shift(), m_dd->angularUnits(), m_dd->angularWeight())) : move(Pair::Create(m_dd->pairType(), m_dd->pairInfo(), m_dd->sMin_D1(), m_dd->sMax_D1(), m_dd->nbins_D1(), m_dd->shift_D1(), m_dd->sMin_D2(), m_dd->sMax_D2(), m_dd->nbins_D2(), m_dd->shift_D2(), m_dd->angularUnits(), m_dd->angularWeight())));
1019 m_rr_res.push_back((m_rr->pairDim()==Dim::_1D_) ? move(Pair::Create(m_rr->pairType(), m_rr->pairInfo(), m_rr->sMin(), m_rr->sMax(), m_rr->nbins(), m_rr->shift(), m_rr->angularUnits(), m_rr->angularWeight())) : move(Pair::Create(m_rr->pairType(), m_rr->pairInfo(), m_rr->sMin_D1(), m_rr->sMax_D1(), m_rr->nbins_D1(), m_rr->shift_D1(), m_rr->sMin_D2(), m_rr->sMax_D2(), m_rr->nbins_D2(), m_rr->shift_D2(), m_rr->angularUnits(), m_rr->angularWeight())));
1021 m_dr_res.push_back((m_dr->pairDim()==Dim::_1D_) ? move(Pair::Create(m_dr->pairType(), m_dr->pairInfo(), m_dr->sMin(), m_dr->sMax(), m_dr->nbins(), m_dr->shift(), m_dr->angularUnits(), m_dr->angularWeight())) : move(Pair::Create(m_dr->pairType(), m_dr->pairInfo(), m_dr->sMin_D1(), m_dr->sMax_D1(), m_dr->nbins_D1(), m_dr->shift_D1(), m_dr->sMin_D2(), m_dr->sMax_D2(), m_dr->nbins_D2(), m_dr->shift_D2(), m_dr->angularUnits(), m_dr->angularWeight())));
1028 string file, file_regions;
1033 file_regions =
"dd_regions.dat";
1036 count_pairs_region_test(m_data, ChM_data, m_dd, m_dd_res, weight,
false, tcount);
1038 write_pairs(m_dd, dir_output_pairs, file);
1041 read_pairs(m_dd, dir_input_pairs, file);
1046 file_regions =
"rr_regions.dat";
1049 count_pairs_region_test(random_dil, ChM_random_dil, m_rr, m_rr_res, weight,
false, tcount);
1051 write_pairs(m_rr, dir_output_pairs, file);
1055 read_pairs(m_rr, dir_input_pairs, file);
1058 if (estimator==Estimator::_LandySzalay_) {
1063 file_regions =
"dr_regions.dat";
1066 count_pairs_region_test(m_data, ChM_random, m_dr, m_dr_res, weight,
true, tcount);
1068 write_pairs(m_dr, dir_output_pairs, file);
1071 read_pairs(m_dr, dir_input_pairs, file);
1078 if (count_rr || count_dr)
1081 if (type==TwoPType::_angular_) {
1082 m_data->restoreComovingCoordinates();
1083 m_random->restoreComovingCoordinates();
#define coutCBL
CBL print message.
The class TwoPointCorrelation1D_angular.
The class TwoPointCorrelation1D_filtered.
The class TwoPointCorrelation1D_monopole.
The class TwoPointCorrelation.
The class TwoPointCorrelation_deprojected.
The class TwoPointCorrelation_multipoles_direct.
The class TwoPointCorrelation_multipoles_integrated.
The class TwoPointCorrelation_wedges.
The class ChainMesh_Catalogue.
std::shared_ptr< catalogue::Catalogue > catalogue() const
get the internal variable m_catalogue
void set_par(const double cell_size, std::shared_ptr< catalogue::Catalogue > cat, const double rmax, const double rmin=-1.)
function that set parameters for the chain-mesh
std::vector< long > close_objects(std::vector< double > center, long ii=-1) const
get the indeces of the objects close to an object
The class TwoPointCorrelation1D_angular.
The class TwoPointCorrelation1D_filtered.
The class TwoPointCorrelation1D_monopole.
The class TwoPointCorrelation2D_cartesian.
The class TwoPointCorrelation2D_polar.
The class TwoPointCorrelation_deprojected.
The class TwoPointCorrelation_multipoles_direct.
The class TwoPointCorrelation_multipoles_integrated.
The class TwoPointCorrelation_projected.
The class TwoPointCorrelation_wedges.
void count_allPairs(const TwoPType type, const std::string dir_output_pairs=par::defaultString, const std::vector< std::string > dir_input_pairs={}, const bool count_dd=true, const bool count_rr=true, const bool count_dr=true, const bool tcount=true, const Estimator estimator=Estimator::_LandySzalay_, const double fact=0.1)
count the data-data, random-random and data-random pairs, used to construct the estimator of the two-...
void count_allPairs_region_test(const TwoPType type, const std::vector< double > weight, const std::string dir_output_pairs=par::defaultString, const std::vector< std::string > dir_input_pairs={}, const bool count_dd=true, const bool count_rr=true, const bool count_dr=true, const bool tcount=true, const Estimator estimator=Estimator::_LandySzalay_, const double fact=0.1)
count the data-data, random-random and data-random pairs, used to construct the estimator of the two-...
void count_pairs_region(const std::shared_ptr< catalogue::Catalogue > cat1, const chainmesh::ChainMesh_Catalogue &ChM, std::shared_ptr< pairs::Pair > pp, std::vector< std::shared_ptr< pairs::Pair > > pp_regions, const bool cross=true, const bool tcount=false)
count the number of pairs, used for Jackknife/Bootstrap methods
double PoissonError(const Estimator estimator, const double dd, const double rr, const double dr, const int nData, const int nRandom) const
the Poisson errors
void count_pairs_region_test_2D(const std::shared_ptr< catalogue::Catalogue > cat1, const chainmesh::ChainMesh_Catalogue &ChM, std::shared_ptr< pairs::Pair > pp, std::vector< std::shared_ptr< pairs::Pair > > pp_res, const std::vector< double > weight, const bool cross=true, const bool tcount=false)
count the number of pairs, used for Jackknife/Bootstrap methods, 2D pairs
void resets()
reset the pair counts
void count_pairs(const std::shared_ptr< catalogue::Catalogue > cat1, const chainmesh::ChainMesh_Catalogue &ChM, std::shared_ptr< pairs::Pair > pp, const bool cross=true, const bool tcount=false)
count the number of pairs
void count_pairs_region_test(const std::shared_ptr< catalogue::Catalogue > cat1, const chainmesh::ChainMesh_Catalogue &ChM, std::shared_ptr< pairs::Pair > pp, std::vector< std::shared_ptr< pairs::Pair > > pp_res, const std::vector< double > weight, const bool cross=true, const bool tcount=false)
count the number of pairs, used for Jackknife/Bootstrap methods
static std::shared_ptr< TwoPointCorrelation > Create(const TwoPType type, const catalogue::Catalogue data, const catalogue::Catalogue random, const BinType binType, const double Min, const double Max, const int nbins, const double shift, const CoordinateUnits angularUnits=CoordinateUnits::_radians_, std::function< double(double)> angularWeight=nullptr, const bool compute_extra_info=false, const double random_dilution_fraction=1.)
static factory used to construct two-point correlation functions of any type
void count_allPairs_region(std::vector< std::shared_ptr< pairs::Pair > > &dd_regions, std::vector< std::shared_ptr< pairs::Pair > > &rr_regions, std::vector< std::shared_ptr< pairs::Pair > > &dr_regions, const TwoPType type, const std::string dir_output_pairs=par::defaultString, const std::vector< std::string > dir_input_pairs={}, const bool count_dd=true, const bool count_rr=true, const bool count_dr=true, const bool tcount=true, const Estimator estimator=Estimator::_LandySzalay_, const double fact=0.1)
count the data-data, random-random and data-random pairs, used to construct the estimator of the two-...
void count_pairs_region_test_1D(const std::shared_ptr< catalogue::Catalogue > cat1, const chainmesh::ChainMesh_Catalogue &ChM, std::shared_ptr< pairs::Pair > pp, std::vector< std::shared_ptr< pairs::Pair > > pp_res, const std::vector< double > weight, const bool cross=true, const bool tcount=false)
count the number of pairs, used for Jackknife/Bootstrap methods, 1D pairs
static const std::string col_green
green colour (used when printing something on the screen)
static const std::string col_default
default colour (used when printing something on the screen)
static const std::string defaultString
default std::string value
Estimator
the two-point correlation estimator
TwoPType
the two-point correlation function type
The global namespace of the CosmoBolognaLib
T Min(const std::vector< T > vect)
minimum element of a std::vector
void cartesian_coord(const double ra, const double dec, const double dd, double &XX, double &YY, double &ZZ)
conversion from polar coordinates to Cartesian coordinates
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
T Max(const std::vector< T > vect)
maximum element of a std::vector
double radians(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_degrees_)
conversion to radians
CoordinateUnits
the coordinate units
void WarningMsgCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL)
internal CBL warning message