44 using namespace catalogue;
45 using namespace chainmesh;
46 using namespace pairs;
47 using namespace measure;
48 using namespace twopt;
56 vector<double> rad(rp.size(),0), xi(rp.size(),0), error(rp.size(),0);
58 for (
size_t i=0; i<rp.size(); i++) {
60 const double ri = rp[i];
63 for (
size_t j=i; j<rp.size()-1; j++) {
64 const double rj = rp[j];
65 const double rj1 = rp[j+1];
66 const double fact = 1./(rj1-rj)*log((rj1+sqrt(max(0., rj1*rj1-ri*ri)))/(rj+sqrt(max(0., rj*rj-ri*ri))));
68 xi[i] -= (ww[j+1]>-1. && ww[j]>-1.) ? (ww[j+1]-ww[j])*fact : 0.;
69 error[i] += (ww[j+1]>-1. && ww[j]>-1.) ? pow(error_ww[j+1]*fact, 2)+pow(error_ww[j]*fact, 2) : 0.;
74 for_each( xi.begin(), xi.end(), [] (
double &vv) { vv /= par::pi;} );
75 for_each( error.begin(), error.end(), [] (
double &vv) { vv = sqrt(vv/par::pi);} );
77 return (!m_compute_extra_info) ? move(unique_ptr<data::Data1D>(
new data::Data1D(rad, xi, error))) : data_with_extra_info(rad, xi, error);
84 void cbl::measure::twopt::TwoPointCorrelation_deprojected::measure (
const ErrorType errorType,
const std::string dir_output_pairs,
const std::vector<std::string> dir_input_pairs,
const std::string dir_output_resample,
const int nMocks,
const bool count_dd,
const bool count_rr,
const bool count_dr,
const bool tcount,
const Estimator estimator,
const double fact,
const int seed)
87 case (ErrorType::_Poisson_) :
88 measurePoisson(dir_output_pairs, dir_input_pairs, count_dd, count_rr, count_dr, tcount, estimator, fact);
90 case (ErrorType::_Jackknife_) :
91 measureJackknife(dir_output_pairs, dir_input_pairs, dir_output_resample, count_dd, count_rr, count_dr, tcount, estimator, fact);
93 case (ErrorType::_Bootstrap_) :
94 measureBootstrap(nMocks, dir_output_pairs, dir_input_pairs, dir_output_resample, count_dd, count_rr, count_dr, tcount, estimator, fact, seed);
97 ErrorCBL(
"unknown type of error!",
"measure",
"TwoPointCorrelation_deprojected.cpp");
109 TwoPointCorrelation_projected::measurePoisson(dir_output_pairs, dir_input_pairs, count_dd, count_rr, count_dr, tcount, estimator, fact);
114 vector<double> xx = m_dataset->xx();
116 m_dataset = Deprojected(xx, TwoPointCorrelation_projected::dataset()->data(), TwoPointCorrelation_projected::dataset()->error());
126 string mkdir =
"mkdir -p "+dir_output_resample;
127 if (system(mkdir.c_str())) {}
130 vector<shared_ptr<data::Data>> data;
131 vector<shared_ptr<pairs::Pair>> dd_regions, rr_regions, dr_regions;
132 count_allPairs_region(dd_regions, rr_regions, dr_regions, TwoPType::_2D_Cartesian_, dir_output_pairs, dir_input_pairs, count_dd, count_rr, count_dr, tcount, estimator, fact);
134 auto data_cart = (estimator==Estimator::_natural_) ? correlation_NaturalEstimator(m_dd, m_rr) : correlation_LandySzalayEstimator(m_dd, m_rr, m_dr);
136 vector<double> xx_cart = data_cart->xx(), yy_cart = data_cart->yy();
137 vector<vector<double>> dd_cart, error_cart;
138 data_cart->get_data(dd_cart); data_cart->get_error(error_cart);
140 auto data_proj = TwoPointCorrelation_projected::Projected(xx_cart, yy_cart, dd_cart, error_cart);
142 if (estimator==Estimator::_natural_)
143 data = XiJackknife(dd_regions, rr_regions);
144 else if (estimator==Estimator::_LandySzalay_)
145 data = XiJackknife(dd_regions, rr_regions, dr_regions);
147 ErrorCBL(
"the chosen estimator is not implemented!",
"measureJackknife",
"TwoPointCorrelation_deprojected.cpp");
149 vector<vector<double>> ww, covariance;
150 for (
size_t i=0; i<data.size(); i++) {
151 ww.push_back(data[i]->data());
154 string file =
"xi_deprojected_Jackknife_"+
conv(i,
par::fINT)+
".dat";
155 string header =
"[1] separation at the bin centre # [2] deprojected two-point correlation function # [3] error";
156 if (m_compute_extra_info) header +=
" # [4] mean separation # [5] standard deviation of the separation distribution # [6] mean redshift # [7] standard deviation of the redshift distribution";
157 data[i]->write(dir_output_resample, file, header, 10, 0);
163 vector<double> xx = data_proj->xx();
165 m_dataset = Deprojected(xx, data_proj->data(), data_proj->error());
166 m_dataset->set_covariance(covariance);
174 void cbl::measure::twopt::TwoPointCorrelation_deprojected::measureBootstrap (
const int nMocks,
const std::string dir_output_pairs,
const std::vector<std::string> dir_input_pairs,
const std::string dir_output_resample,
const bool count_dd,
const bool count_rr,
const bool count_dr,
const bool tcount,
const Estimator estimator,
const double fact,
const int seed)
177 ErrorCBL(
"the number of mocks must be >0!",
"measureBootstrap",
"TwoPointCorrelation_deprojected.cpp");
180 string mkdir =
"mkdir -p "+dir_output_resample;
181 if (system(mkdir.c_str())) {}
184 vector<shared_ptr<data::Data>> data;
185 vector<shared_ptr<pairs::Pair>> dd_regions, rr_regions, dr_regions;
186 count_allPairs_region(dd_regions, rr_regions, dr_regions, TwoPType::_2D_Cartesian_, dir_output_pairs, dir_input_pairs, count_dd, count_rr, count_dr, tcount, estimator, fact);
188 auto data_cart = (estimator==Estimator::_natural_) ? correlation_NaturalEstimator(m_dd, m_rr) : correlation_LandySzalayEstimator(m_dd, m_rr, m_dr);
190 vector<double> xx_cart = data_cart->xx(), yy_cart = data_cart->yy();
191 vector<vector<double>> dd_cart, error_cart;
192 data_cart->get_data(dd_cart); data_cart->get_error(error_cart);
194 auto data_proj = TwoPointCorrelation_projected::Projected(xx_cart, yy_cart, dd_cart, error_cart);
196 if (estimator==Estimator::_natural_)
197 data = XiBootstrap(nMocks, dd_regions, rr_regions, seed);
198 else if (estimator==Estimator::_LandySzalay_)
199 data = XiBootstrap(nMocks, dd_regions, rr_regions, dr_regions, seed);
201 ErrorCBL(
"the chosen estimator is not implemented!",
"measureBootstrap",
"TwoPointCorrelation_deprojected.cpp");
203 vector<vector<double>> ww, covariance;
204 for (
size_t i=0; i<data.size(); i++) {
205 ww.push_back(data[i]->data());
208 string file =
"xi_deprojected_Bootstrap_"+
conv(i,
par::fINT)+
".dat";
209 string header =
"[1] separation at the bin centre # [2] deprojected two-point correlation function # [3] error";
210 if (m_compute_extra_info) header +=
" # [4] mean separation # [5] standard deviation of the separation distribution # [6] mean redshift # [7] standard deviation of the redshift distribution";
211 data[i]->write(dir_output_resample, file, header, 10, 0);
217 vector<double> xx = data_proj->xx();
219 m_dataset = Deprojected(xx, data_proj->data(), data_proj->error());
220 m_dataset->set_covariance(covariance);
229 vector<shared_ptr<data::Data>> data;
231 auto data_proj = TwoPointCorrelation_projected::XiJackknife(dd, rr);
233 for (
size_t i=0; i<data_proj.size(); i++) {
234 vector<double> xx = data_proj[i]->xx();
235 data.push_back(move(Deprojected(xx, data_proj[i]->data(), data_proj[i]->error())));
247 vector<shared_ptr<data::Data>> data;
249 auto data_proj = TwoPointCorrelation_projected::XiJackknife(dd, rr, dr);
250 for (
size_t i=0; i<data_proj.size(); i++) {
251 vector<double> xx = data_proj[i]->xx();
252 data.push_back(move(Deprojected(xx, data_proj[i]->data(), data_proj[i]->error())));
264 vector<shared_ptr<data::Data>> data;
266 auto data_proj = TwoPointCorrelation_projected::XiBootstrap(nMocks, dd, rr, seed);
267 for (
size_t i=0; i<data_proj.size(); i++) {
268 vector<double> xx = data_proj[i]->xx();
269 data.push_back(move(Deprojected(xx, data_proj[i]->data(), data_proj[i]->error())));
282 vector<shared_ptr<data::Data>> data;
284 auto data_proj = TwoPointCorrelation_projected::XiBootstrap(nMocks, dd, rr, dr, seed);
285 for (
size_t i=0; i<data_proj.size(); i++) {
286 vector<double> xx = data_proj[i]->xx();
287 data.push_back(move(Deprojected(xx, data_proj[i]->data(), data_proj[i]->error())));
299 m_dataset->read(dir+file);
308 vector<double> xx = m_dataset->xx();
310 checkDim(xx, m_dd->nbins_D1(),
"rad");
312 string header =
"[1] separation at the bin centre # [2] deprojected two-point correlation function # [3] error";
313 if (m_compute_extra_info) header +=
" # [4] mean separation # [5] standard deviation of the separation distribution # [6] mean redshift # [7] standard deviation of the redshift distribution";
315 m_dataset->write(dir, file, header, 5, rank);
The class TwoPointCorrelation_deprojected.
void measureJackknife(const std::string dir_output_pairs=par::defaultString, const std::vector< std::string > dir_input_pairs={}, const std::string dir_output_resample=par::defaultString, 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) override
measure the deprojected two-point correlation function estimating the covariance with Jackknife resam...
void read(const std::string dir, const std::string file) override
read the deprojected two-point correlation function
void write(const std::string dir=par::defaultString, const std::string file=par::defaultString, const int rank=0) const override
write the deprojected two-point correlation function
void measureBootstrap(const int nMocks, const std::string dir_output_pairs, const std::vector< std::string > dir_input_pairs={}, const std::string dir_output_resample=par::defaultString, 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, const int seed=3213) override
measure the deprojected two-point correlation function estimating the covariance with Bootstrap resam...
void measurePoisson(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) override
measure the deprojected two-point correlation function with Poisson errors
std::vector< std::shared_ptr< data::Data > > XiBootstrap(const int nMocks, const std::vector< std::shared_ptr< pairs::Pair >> dd, const std::vector< std::shared_ptr< pairs::Pair >> rr, const int seed=3213) override
measure the bootstrap resampling of the two-point correlation function, ξ(r)
void measure(const ErrorType errorType=ErrorType::_Poisson_, const std::string dir_output_pairs=par::defaultString, const std::vector< std::string > dir_input_pairs={}, const std::string dir_output_resample=par::defaultString, const int nMocks=0., 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, const int seed=3213) override
measure the deprojected two-point correlation function
std::shared_ptr< data::Data > Deprojected(const std::vector< double > rp, const std::vector< double > xi, const std::vector< double > error_xi) override
measure deprojected correlation function
std::vector< std::shared_ptr< data::Data > > XiJackknife(const std::vector< std::shared_ptr< pairs::Pair >> dd, const std::vector< std::shared_ptr< pairs::Pair >> rr) override
measure the jackknife resampling of the two-point correlation function, ξ(r)
static const char fINT[]
conversion symbol for: int -> std::string
static const std::string defaultString
default std::string value
Estimator
the two-point correlation estimator
ErrorType
the two-point correlation function error type
The global namespace of the CosmoBolognaLib
std::string conv(const T val, const char *fact)
convert a number to a std::string
void checkDim(const std::vector< T > vect, const int val, const std::string vector, bool equal=true)
check if the dimension of a std::vector is equal/lower than an input value
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
void covariance_matrix(const std::vector< std::vector< double >> mat, std::vector< std::vector< double >> &cov, const bool JK=false)
compute the covariance matrix from an input dataset