40 using namespace catalogue;
 
   41 using namespace measure::numbercounts;
 
   50     cbl::WarningMsgCBL(
"This constructor allows only a linear or logarithmic binning", 
"NumberCounts1D", 
"NumberCounts1D.cpp");
 
   54   m_HistogramType = hist_type;
 
   59   m_histogram = make_shared<glob::Histogram1D> (glob::Histogram1D ()); 
 
   64   m_histogram->set(nbins, _minVar, _maxVar, shift, bin_type);
 
   76   m_HistogramType = hist_type;
 
   81   m_histogram = make_shared<glob::Histogram1D> (glob::Histogram1D ()); 
 
   83   double _minVar = (vec_edges[0]>
par::defaultDouble) ? vec_edges[0] : m_data->Min(m_Var)*0.999;
 
   84   double _maxVar = (vec_edges[vec_edges.size()-1]>
par::defaultDouble) ? vec_edges[vec_edges.size()-1] : m_data->Max(m_Var)*1.001;
 
   86   const size_t nbins = vec_edges.size()-1;
 
   87   const double shift = 0.5;
 
   98   auto histogram =  make_shared<glob::Histogram1D> (glob::Histogram1D ());
 
   99   histogram->set(m_histogram->nbins(), m_histogram->minVar(), m_histogram->maxVar(), m_histogram->shift(), m_histogram->bin_type(), m_histogram->edges());
 
  101   histogram->put(m_data->var(m_Var), m_data->var(catalogue::Var::_Weight_));
 
  103   m_histogram = histogram;
 
  105   vector<double> bins = m_histogram->bins();
 
  106   vector<double> edges = m_histogram->edges();
 
  107   vector<double> hist = m_histogram->operator()(m_HistogramType, m_fact);
 
  108   vector<double> error = m_histogram->error(m_HistogramType, m_fact);
 
  109   vector<double> counts;
 
  110   vector<double> counts_error;
 
  111   vector<double> normalization;
 
  113   for (
size_t i=0; i<m_histogram->nbins(); i++) {
 
  114     counts.push_back(m_histogram->unweighted_counts(i));
 
  115     counts_error.push_back(sqrt(
static_cast<double>(counts[i])));
 
  116     normalization.push_back(m_histogram->normalization(i, m_HistogramType, m_fact));
 
  119   vector<vector<double>> extra_info (7);
 
  120   extra_info[0] = 
slice(edges, 0, m_histogram->nbins());
 
  121   extra_info[1] = 
slice(edges, 1, m_histogram->nbins()+1);
 
  122   extra_info[2] = counts;
 
  123   extra_info[3] = counts_error;
 
  124   extra_info[4] = normalization;
 
  125   extra_info[5] = m_histogram->averaged_bins();
 
  126   extra_info[6] = m_histogram->error_bins();
 
  128   std::vector<double> edges_in_mem_ = extra_info[0]; edges_in_mem_.emplace_back(extra_info[1][extra_info[1].size()-1]);
 
  129   const std::vector<double> edges_in_mem = edges_in_mem_;
 
  130   auto dataset = make_shared<data::Data1D_extra> (
data::Data1D_extra(bins, hist, error, extra_info, edges_in_mem));
 
  141   m_dataset = m_measurePoisson();
 
  143   const int nRegions = m_data->nRegions();
 
  144   vector<shared_ptr<glob::Histogram>> histo_JK(nRegions);
 
  146   for (
int i=0; i<nRegions; i++){
 
  147     histo_JK[i] = make_shared<glob::Histogram1D>(glob::Histogram1D());
 
  148     histo_JK[i]->set(m_histogram->nbins(), m_histogram->minVar(), m_histogram->maxVar(), m_histogram->shift(), m_histogram->bin_type(), m_histogram->edges());
 
  151   vector<double> regions = m_data->var(catalogue::Var::_Region_);
 
  152   vector<double> var = m_data->var(m_Var);
 
  153   vector<double> weight = m_data->var(catalogue::Var::_Weight_);
 
  155   for (
size_t i=0; i<var.size(); i++) {
 
  156     int bin = m_histogram->digitize(var[i]);
 
  157     for (
int j=0; j<nRegions; j++)
 
  158       if (j!=regions[i] and bin>-1)
 
  159     histo_JK[j]->put(bin, weight[i], var[i]);
 
  165     for (
int i=0; i<nRegions; i++) 
 
  166       histo_JK[i]->write(dir_output_resample, 
"Jackknife_"+
conv(i+1, 
par::fINT)+
".dat", m_HistogramType, m_fact);
 
  168   vector<vector<double>> measures(histo_JK.size(), vector<double>(histo_JK[0]->nbins()));
 
  169   vector<vector<double>> covariance;
 
  171   for (
size_t i=0; i<histo_JK.size(); i++)
 
  172     for (
size_t j=0; j<histo_JK[i]->nbins(); j++)
 
  173       measures[i][j] = histo_JK[i]->
operator()(j, m_HistogramType, m_fact);
 
  177   m_dataset->set_covariance(covariance);
 
  189   m_dataset = m_measurePoisson();
 
  191   const int nRegions = m_data->nRegions();
 
  192   vector<shared_ptr<glob::Histogram>> histo_BS(nResamplings);
 
  195   vector<vector<int>> region_weights (nResamplings, vector<int> (nRegions, 0));
 
  197   for (
int i=0; i<nResamplings; i++) {
 
  198     histo_BS[i] = make_shared<glob::Histogram1D>(glob::Histogram1D());
 
  199     histo_BS[i]->set(m_histogram->nbins(), m_histogram->minVar(), m_histogram->maxVar(), m_histogram->shift(), m_histogram->bin_type(), m_histogram->edges());
 
  200     for (
int n=0; n<nRegions; n++)
 
  201       region_weights[i][ran()] ++;
 
  204   vector<double> regions = m_data->var(catalogue::Var::_Region_);
 
  205   vector<double> var = m_data->var(m_Var);
 
  206   vector<double> weight = m_data->var(catalogue::Var::_Weight_);
 
  208   for (
size_t i=0; i<m_data->nObjects(); i++) {
 
  209     int bin = m_histogram->digitize(var[i]);
 
  211       for (
int j=0; j<nResamplings; j++)
 
  212     histo_BS[j]->put(bin, weight[i]*region_weights[j][regions[i]], var[i]);
 
  215   vector<vector<double>> measures(histo_BS.size(), vector<double>(histo_BS[0]->nbins()));
 
  216   vector<vector<double>> covariance;
 
  218   for (
size_t i=0; i<histo_BS.size(); i++)
 
  219     for (
size_t j=0; j<histo_BS[i]->nbins(); j++)
 
  220       measures[i][j] = histo_BS[i]->
operator()(j, m_HistogramType, m_fact);
 
  224   m_dataset->set_covariance(covariance);
 
  229     for (
int i=0; i<nResamplings; i++)
 
  230       histo_BS[i]->write(dir_output_resample, 
"Bootstrap_"+
conv(i+1, 
par::fINT)+
".dat", m_HistogramType, m_fact);
 
  242     case (ErrorType::_Poisson_) :
 
  243       m_dataset = m_measurePoisson();
 
  245     case (ErrorType::_Jackknife_) :
 
  246       m_dataset = m_measureJackknife(dir_output_resample);
 
  248     case (ErrorType::_Bootstrap_) :
 
  249       m_dataset = m_measureBootstrap(dir_output_resample, nResamplings, seed);
 
  252       ErrorCBL(
"The input ErrorType is not allowed!", 
"measure", 
"NumberCounts1D.cpp");
 
  255   if (
conv) m_dataset = Gaussian_smoothing(sigma);
 
  263   vector<vector<double>> measures(histo.size(), vector<double>(histo[0]->nbins()));
 
  264   vector<vector<double>> cov;
 
  266   for (
size_t i=0; i<histo.size(); i++)
 
  267     for (
size_t j=0; j<histo[i]->nbins(); j++)
 
  268       measures[i][j] = histo[i]->
operator()(j, m_HistogramType, m_fact);
 
  271   m_dataset->set_covariance(cov);
 
  282   string mkdir = 
"mkdir -p "+dir;
 
  283   if (system(mkdir.c_str())) {}
 
  285   string header = 
"bin_center  histogram  error  lower_edge  upper_edge  unweighted_counts  unweighted_counts_error  hist_normalization ave_bin  err_bin";
 
  286   m_dataset->write(dir, file, header, 4, 8, rank);
 
  295   string mkdir = 
"mkdir -p "+dir;
 
  296   if (system(mkdir.c_str())) {}
 
  298   m_dataset->write_covariance(dir, file, 8);
 
  307      coutCBL << 
"The distribution is smoothed with a Gaussian filter" << endl;
 
  309      fftw_complex *func_tr;
 
  311      if (m_histogram->bin_type()!=BinType::_linear_) 
ErrorCBL(
"", 
"Gaussian_smoothing", 
"NumberCounts1D.cpp", glob::ExitCode::_workInProgress_);
 
  313      auto histogram =  make_shared<glob::Histogram1D> (glob::Histogram1D ());
 
  314      histogram->set(m_histogram->nbins(), m_histogram->minVar(), m_histogram->maxVar(), m_histogram->shift(), m_histogram->bin_type());
 
  316      int nbin = m_histogram->nbins();
 
  318      int i1 = nbin*0.5, i2 = 1.5*nbin;
 
  320      int nbinK = 0.5*nbinN+1;
 
  322      func = fftw_alloc_real(nbinN);
 
  323      func_tr = fftw_alloc_complex(nbinK);
 
  325      for (
int i=0; i<nbinN; i++)
 
  328      for (
int i=i1; i<i2; i++)
 
  329        func[i] = m_histogram->operator()(m_HistogramType, m_fact)[i-i1];
 
  331      for (
int i=0; i<nbinK; i++) {
 
  336      fftw_plan real2complex;
 
  337      real2complex = fftw_plan_dft_r2c_1d(nbinN, func, func_tr, FFTW_ESTIMATE);
 
  338      fftw_execute(real2complex);
 
  339      fftw_destroy_plan(real2complex);
 
  341      double delta = (m_histogram->maxVar()-m_histogram->minVar())/nbin;
 
  342      double SS = pow(sigma,2);
 
  344      double fact = 2*
par::pi/(nbinN*delta);
 
  345      for (
int i=0; i<nbinK; i++) {
 
  347        func_tr[i][0] = func_tr[i][0]*exp(-0.5*kk*kk*SS);
 
  348        func_tr[i][1] = func_tr[i][1]*exp(-0.5*kk*kk*SS);
 
  351      fftw_plan complex2real;
 
  352      complex2real = fftw_plan_dft_c2r_1d(nbinN, func_tr, func, FFTW_ESTIMATE);
 
  353      fftw_execute(complex2real);
 
  354      fftw_destroy_plan(complex2real);
 
  356      vector<double> new_hist;
 
  358      for (
int i=0; i<i2-i1; i++) new_hist.push_back(func[i+i1]/nbinN);
 
  360      auto dataset = make_shared<data::Data1D_extra> (
data::Data1D_extra(m_histogram->bins(), new_hist, m_dataset->error(), m_dataset->extra_info()));
 
#define coutCBL
CBL print message.
 
The class NumberCounts1D.
 
void write(const std::string dir=par::defaultString, const std::string file=par::defaultString, const int rank=0) const override
write the measured number counts
 
std::shared_ptr< data::Data > m_measureJackknife(const std::string dir_output_resample=par::defaultString) override
measure the number counts with Jackknife covariance matrix
 
std::shared_ptr< data::Data > Gaussian_smoothing(const double sigma) override
apply a Gaussian filter to the distribution
 
void measure(const ErrorType errorType=ErrorType::_Poisson_, const std::string dir_output_resample=par::defaultString, const int nResamplings=0, const int seed=3213, const bool conv=false, const double sigma=0.) override
measure the number counts
 
void write_covariance(const std::string dir, const std::string file) const override
write the measured covariance matrix
 
void compute_covariance(const std::vector< std::shared_ptr< glob::Histogram >> hist, const bool JK) override
compute the covariance matrix
 
std::shared_ptr< data::Data > m_measureBootstrap(const std::string dir_output_resample=par::defaultString, const int nResamplings=0, const int seed=3213) override
measure the number counts with Bootstrap covariance matrix
 
NumberCounts1D()
default constructor
 
std::shared_ptr< data::Data > m_measurePoisson() override
measure the number counts with Poisson errors
 
static const char fINT[]
conversion symbol for: int -> std::string
 
static const std::string defaultString
default std::string value
 
static const double defaultDouble
default double value
 
static const double pi
: the ratio of a circle's circumference to its diameter
 
Var
the catalogue variables
 
HistogramType
the histogram type
 
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
 
std::vector< T > slice(const std::vector< T > v, const int start=0, const int end=-1)
slice a std::vector from start to stop
 
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
 
@ _logarithmic_
logarithmic binning
 
void WarningMsgCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL)
internal CBL warning message