CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Data.h
Go to the documentation of this file.
1 /********************************************************************
2  * Copyright (C) 2014 by Federico Marulli and Alfonso Veropalumbo *
3  * federico.marulli3@unibo.it *
4  * *
5  * This program is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU General Public License as *
7  * published by the Free Software Foundation; either version 2 of *
8  * the License, or (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public *
16  * License along with this program; if not, write to the Free *
17  * Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ********************************************************************/
20 
33 #ifndef __DATA__
34 #define __DATA__
35 
36 #include "Func.h"
37 
38 namespace cbl {
39 
47  namespace data {
48 
53  enum class DataType {
54 
56  _1D_,
57 
59  _2D_,
60 
63 
65  _1D_extra_,
66 
68  _2D_extra_,
69 
70  };
71 
78  inline std::vector<std::string> DataTypeNames () { return {"1D", "2D", "1D_collection", "1D_extra", "2D_extra"}; }
79 
88  class Data
89  {
90 
91  protected:
92 
95 
97  int m_ndata;
98 
100  std::vector<double> m_data;
101 
103  std::vector<double> m_error;
104 
106  std::vector<double> m_edges_xx;
107 
109  std::vector<double> m_edges_yy;
110 
112  std::vector<std::vector<double>> m_covariance;
113 
115  std::vector<std::vector<double>> m_inverse_covariance;
116 
122 
123  public:
124 
129 
135  Data () = default;
136 
145 
156  Data (const DataType dataType, const int ndata)
158  { reset(ndata); }
159 
169  Data (const DataType dataType, const std::vector<double> data);
170 
183  Data (const DataType dataType, const std::vector<double> data, const std::vector<double> error);
184 
197  Data (const DataType dataType, const std::vector<double> data, const std::vector<std::vector<double>> covariance);
198 
202  virtual ~Data () = default;
203 
210  static std::shared_ptr<Data> Create (const DataType dataType);
211 
217  virtual std::shared_ptr<Data> as_factory ()
218  { ErrorCBL("", "as_factory", "Data.h"); return NULL; }
219 
221 
222 
227 
235  double correlation (const int i, const int j) const { return m_covariance[i][j]/sqrt(m_covariance[i][i]*m_covariance[j][j]); }
236 
242  std::vector<std::vector<double>> correlation () const;
243 
250  double inverse_covariance (const int i, const int j) const { return m_inverse_covariance[i][j]; }
251 
256  std::vector<std::vector<double>> inverse_covariance () const { return m_inverse_covariance; }
257 
264  void reset (const int ndata);
265 
277  virtual void invert_covariance (const double prec, const int Nres) { invert_matrix(m_covariance, m_inverse_covariance, prec, Nres); }
278 
280 
281 
286 
292  virtual double xx (const int i) const
293  { (void)i; ErrorCBL("", "xx", "Data.h"); return 0; }
294 
299  virtual std::vector<double> xx () const
300  { ErrorCBL("", "xx", "Data.h"); return {}; }
301 
308  virtual double xx (const int i, const int j) const
309  { (void)i; (void)j; ErrorCBL("", "xx", "Data.h"); return 0.; }
310 
316  virtual double yy (const int i) const
317  { (void)i; ErrorCBL("", "yy", "Data.h"); return 0.; }
318 
323  virtual std::vector<double> yy () const
324  { ErrorCBL("", "yy", "Data.h"); return {}; }
325 
333  virtual std::vector<std::vector<double>> IndipendentVariable(const int i=-1, const int j=-1) const
334  { (void)i; (void)j; ErrorCBL("", "IndipendentVariable", "Data.h"); std::vector<std::vector<double>> pp; return {pp}; }
335 
342  virtual double data (const int i, const int j) const
343  { (void)i; (void)j; ErrorCBL("", "data", "Data.h"); return 0.; }
344 
349  virtual void get_data (std::vector<double> &data) const
350  { (void)data; ErrorCBL("", "data", "Data.h"); }
351 
356  virtual DataType dataType () const
357  { return m_dataType; }
358 
363  virtual int ndata () const { return m_ndata; }
364 
370  virtual double data (const int i) const { return m_data[i]; }
371 
376  virtual std::vector<double> data () const { return m_data; }
377 
383  virtual double error (const int i) const { return m_error[i]; }
384 
389  virtual std::vector<double> error () const { return m_error; }
390 
397  virtual double covariance (const int i, const int j) const { return m_covariance[i][j]; }
398 
403  virtual std::vector<std::vector<double>> covariance () const { return m_covariance; }
404 
410  virtual double edges_xx (const int i) const { return m_edges_xx[i]; }
411 
416  virtual std::vector<double> edges_xx () const { return m_edges_xx; }
417 
423  virtual double edges_yy (const int i) const { return m_edges_yy[i]; }
424 
429  virtual std::vector<double> edges_yy () const { return m_edges_yy; }
430 
435  virtual void get_data (std::vector<std::vector<double>> &data) const
436  { (void)data; ErrorCBL("", "data", "Data.h"); }
437 
444  virtual double error (const int i, const int j) const
445  { (void)i; (void)j; ErrorCBL("", "error", "Data.h"); return 0.; }
446 
453  virtual void get_error (std::vector<double> &error) const
454  { (void)error; ErrorCBL("", "error", "Data.h"); }
455 
460  virtual void get_error (std::vector<std::vector<double>> &error) const
461  { (void)error; ErrorCBL("", "error", "Data.h"); }
462 
469  virtual double extra_info (const int i, const int j) const
470  { (void)i; (void)j; ErrorCBL("", "extra_info", "Data.h"); return 0.; }
471 
476  virtual std::vector<std::vector<double>> extra_info () const
477  { ErrorCBL("", "extra_info", "Data.h"); std::vector<std::vector<double>> x; return x; }
478 
480 
485 
490  virtual void set_xx (const std::vector<double> x)
491  { (void)x; ErrorCBL("", "set_xx", "Data.h"); }
492 
497  virtual void set_yy (const std::vector<double> y)
498  { (void)y; ErrorCBL("", "set_yy", "Data.h"); }
499 
506  virtual void set_xx (const int i, const std::vector<double> x)
507  { (void)i; (void)x; ErrorCBL("", "set_xx", "Data.h"); }
508 
513  virtual void set_xx (const std::vector<std::vector<double>> x)
514  { (void)x; ErrorCBL("", "set_xx", "Data.h"); }
515 
520  virtual void set_edges_xx (const std::vector<double> edges)
521  { (void)edges; ErrorCBL("", "set_edges_xx", "Data.h"); }
522 
527  virtual void set_edges_yy (const std::vector<double> edges)
528  { (void)edges; ErrorCBL("", "set_edges_yy", "Data.h"); }
529 
535  virtual void set_data (const std::vector<std::vector<double>> data)
536  { (void)data; ErrorCBL("", "set_data", "Data.h"); }
537 
543  virtual void set_extra_info (const std::vector<std::vector<double>> extra_info)
544  { (void)extra_info; ErrorCBL("", "set_extra_info", "Data.h"); }
545 
550  void set_data (const std::vector<double> data);
551 
556  void set_error (const std::vector<double> error);
557 
562  void set_error (const std::vector<std::vector<double>> covariance);
563 
577  void set_covariance (const std::string filename, const int cov_col=2, const int skipped_lines=0);
578 
585  void set_covariance (const double value, const int i, const int j) { m_covariance[i][j] = value; }
586 
591  void set_covariance (const std::vector<std::vector<double>> covariance);
592 
597  void set_covariance (const std::vector<double> error);
598 
600 
605 
612  virtual int ndata (const int i) const
613  { (void)i; return ErrorCBL("", "ndata", "Data.h"); }
614 
619  virtual int ndataset () const
620  { return ErrorCBL("", "ndataset", "Data.h"); }
621 
626  virtual int xsize () const
627  { return ErrorCBL("", "xsize", "Data.h"); }
628 
634  virtual int xsize (const int i) const
635  { (void)i; return ErrorCBL("", "xsize", "Data.h"); }
636 
641  virtual int ysize () const
642  { return ErrorCBL("", "ysize", "Data.h"); }
643 
645 
646 
651 
688  virtual void read (const std::string input_file, const int skip_nlines=0, const std::vector<int> column={0}, const std::vector<int> column_data={}, const std::vector<int> column_errors={}, const std::vector<int> column_edges={})
689  { (void)input_file; (void)skip_nlines; (void)column, (void)column_data, (void)column_errors, (void)column_edges, ErrorCBL("", "read", "Data.h"); }
690 
727  virtual void read (const std::vector<std::string> input_file, const int skip_nlines=0, const std::vector<int> column={0}, const std::vector<int> column_data={}, const std::vector<int> column_errors={}, const std::vector<int> column_edges={})
728  { (void)input_file; (void)skip_nlines; (void)column, (void)column_data, (void)column_errors, (void)column_edges, ErrorCBL("", "read", "Data.h"); }
729 
735  virtual void Print (const int prec=4) const
736  { (void)prec; ErrorCBL("", "Print", "Data.h"); }
737 
748  virtual void write (const std::string dir, const std::string file, const std::string header, const int prec=4, const int ww=8, const int rank=0) const
749  { (void)dir; (void)file; (void)header; (void)prec; (void)ww; (void)rank; ErrorCBL("", "write", "Data.h"); }
750 
764  virtual void write (const std::string dir, const std::string file, const std::string header, const bool full, const int prec=10, const int ww=8, const int rank=0) const
765  { (void)dir; (void)file; (void)header; (void)full; (void)prec; (void)ww; (void)rank; ErrorCBL("", "write", "Data.h"); }
766 
777  virtual void write (const std::string dir, const std::vector<std::string> files, const std::string header, const int prec=10, const int ww=8, const int rank=0) const
778  { (void)dir; (void)files; (void)header; (void)prec; (void)ww; (void)rank; ErrorCBL("", "write", "Data.h"); }
779 
786  virtual void write_covariance (const std::string dir, const std::string file, const int precision=10) const
787  { (void)dir; (void)file; (void)precision; ErrorCBL("", "write_covariance", "Data.h"); }
788 
790 
791 
797 
805  void cut (const std::vector<bool> mask, std::vector<double> &data, std::vector<double> &error, std::vector<std::vector<double>> &covariance_matrix) const;
806 
812  virtual std::shared_ptr<Data> cut (const std::vector<bool> mask) const
813  { (void)mask; ErrorCBL("", "cut", "Data.h"); std::shared_ptr<Data> dd; return dd; }
814 
821  virtual std::shared_ptr<Data> cut (const double xmin, const double xmax) const
822  { (void)xmin; (void)xmax; ErrorCBL("", "cut", "Data.h"); std::shared_ptr<Data> dd; return dd; }
823 
832  virtual std::shared_ptr<Data> cut (const double xmin, const double xmax, const double ymin, const double ymax) const
833  { (void)xmin; (void)xmax; (void)ymin; (void)ymax; ErrorCBL("", "cut", "Data.h"); std::shared_ptr<Data> dd; return dd; }
834 
842  virtual std::shared_ptr<Data> cut (const int dataset, const double xmin, const double xmax) const
843  { (void)dataset; (void)xmin; (void)xmax; ErrorCBL("", "cut", "Data.h"); std::shared_ptr<Data> dd; return dd; }
844 
851  virtual std::shared_ptr<Data> cut (const std::vector<double> xmin, const std::vector<double> xmax) const
852  { (void)xmin; (void)xmax; ErrorCBL("", "cut", "Data.h"); std::shared_ptr<Data> dd; return dd; }
853 
855 
856  };
857 
858 
864  std::shared_ptr<data::Data> join_dataset (std::vector<std::shared_ptr<data::Data>> dataset);
865 
871  std::shared_ptr<data::Data> join_dataset_1D (std::vector<std::shared_ptr<data::Data>> dataset);
872 
878  std::shared_ptr<data::Data> join_dataset_1D_extra (std::vector<std::shared_ptr<data::Data>> dataset);
879 
880  }
881 }
882 
883 #endif
Useful generic functions.
The class Data.
Definition: Data.h:89
std::vector< std::vector< double > > m_covariance
covariance matrix
Definition: Data.h:112
int m_ndata
number of data
Definition: Data.h:97
virtual std::shared_ptr< Data > cut(const double xmin, const double xmax, const double ymin, const double ymax) const
cut the data, for Data2D
Definition: Data.h:832
virtual void read(const std::string input_file, const int skip_nlines=0, const std::vector< int > column={0}, const std::vector< int > column_data={}, const std::vector< int > column_errors={}, const std::vector< int > column_edges={})
read the data from one input file
Definition: Data.h:688
virtual double xx(const int i, const int j) const
get value of x at position i,j, for Data1D_collection
Definition: Data.h:308
DataType m_dataType
type of data
Definition: Data.h:94
virtual std::vector< double > yy() const
get the y std::vector
Definition: Data.h:323
void set_dataType(const DataType dataType)
set the data type
Definition: Data.h:121
virtual void set_edges_yy(const std::vector< double > edges)
set interval variable m_edges_yy
Definition: Data.h:527
std::vector< std::vector< double > > m_inverse_covariance
inverse covariance matrix
Definition: Data.h:115
virtual void get_data(std::vector< double > &data) const
get data for Data1D
Definition: Data.h:349
virtual std::vector< std::vector< double > > IndipendentVariable(const int i=-1, const int j=-1) const
get the independet variable, to be used in model computation
Definition: Data.h:333
virtual std::shared_ptr< Data > cut(const int dataset, const double xmin, const double xmax) const
cut the data, for Data1D_collection
Definition: Data.h:842
virtual void write(const std::string dir, const std::string file, const std::string header, const bool full, const int prec=10, const int ww=8, const int rank=0) const
write the data
Definition: Data.h:764
std::vector< double > m_edges_yy
bin edges for the y variable
Definition: Data.h:109
std::vector< std::vector< double > > correlation() const
get the value of the data correlation at index i,j
Definition: Data.cpp:119
virtual int xsize(const int i) const
get the number of points along x
Definition: Data.h:634
virtual void get_data(std::vector< std::vector< double >> &data) const
get data for Data1D_collection, Data2D
Definition: Data.h:435
virtual std::shared_ptr< Data > cut(const double xmin, const double xmax) const
cut the data, for Data1D
Definition: Data.h:821
double inverse_covariance(const int i, const int j) const
get the value of data inverse_covariance at index i,j
Definition: Data.h:250
virtual std::vector< double > edges_yy() const
get y variable bin edges
Definition: Data.h:429
Data(const DataType dataType)
constructor which sets only the data type
Definition: Data.h:144
void cut(const std::vector< bool > mask, std::vector< double > &data, std::vector< double > &error, std::vector< std::vector< double >> &covariance_matrix) const
cut the dataset using a mask
Definition: Data.cpp:222
virtual void set_edges_xx(const std::vector< double > edges)
set interval variable m_edges_xx
Definition: Data.h:520
virtual void set_xx(const int i, const std::vector< double > x)
set interval variable m_x in the i-th dataset, for Data1D_collection
Definition: Data.h:506
virtual void set_data(const std::vector< std::vector< double >> data)
set interval variable m_data, for Data1D_collection, Data2D
Definition: Data.h:535
virtual void set_xx(const std::vector< double > x)
set interval variable m_x
Definition: Data.h:490
virtual std::vector< double > edges_xx() const
get x variable bin edges
Definition: Data.h:416
virtual std::vector< double > xx() const
get the x std::vector
Definition: Data.h:299
double correlation(const int i, const int j) const
get the value of the data correlation at index i,j
Definition: Data.h:235
virtual double extra_info(const int i, const int j) const
return the value of the extra information at index i,j
Definition: Data.h:469
virtual double edges_yy(const int i) const
get value of y variable bin edge at index i
Definition: Data.h:423
virtual std::vector< double > data() const
get data
Definition: Data.h:376
virtual int ndata(const int i) const
function that returns number of data for one dataset, for Data1D_collection
Definition: Data.h:612
virtual double error(const int i) const
get value of data standard deviation at index i
Definition: Data.h:383
std::vector< double > m_error
standard deviations
Definition: Data.h:103
virtual double data(const int i) const
get data at index i
Definition: Data.h:370
virtual void Print(const int prec=4) const
print the data on screen
Definition: Data.h:735
virtual double edges_xx(const int i) const
get value of x variable bin edge at index i
Definition: Data.h:410
virtual DataType dataType() const
get the data type
Definition: Data.h:356
std::vector< double > m_data
data values
Definition: Data.h:100
void set_covariance(const std::string filename, const int cov_col=2, const int skipped_lines=0)
set the interval variable m_covariance, reading from an input file
Definition: Data.cpp:191
virtual void set_xx(const std::vector< std::vector< double >> x)
set interval variable m_x, for Data1D_collection
Definition: Data.h:513
void set_error(const std::vector< double > error)
set interval variable m_error_fx
Definition: Data.cpp:144
virtual void get_error(std::vector< std::vector< double >> &error) const
get standard deviation for Data1D_Collection, Data2D
Definition: Data.h:460
Data()=default
default constructor
virtual void write(const std::string dir, const std::vector< std::string > files, const std::string header, const int prec=10, const int ww=8, const int rank=0) const
write the data
Definition: Data.h:777
virtual int xsize() const
get the number of points along x
Definition: Data.h:626
virtual std::shared_ptr< Data > cut(const std::vector< double > xmin, const std::vector< double > xmax) const
cut the data, for Data1D_collection type
Definition: Data.h:851
virtual void invert_covariance(const double prec, const int Nres)
invert the covariance matrix
Definition: Data.h:277
virtual double xx(const int i) const
get value of x at index i
Definition: Data.h:292
std::vector< double > m_edges_xx
bin edges for the x variable
Definition: Data.h:106
void set_covariance(const double value, const int i, const int j)
set interval the variable m_covariance
Definition: Data.h:585
virtual void write_covariance(const std::string dir, const std::string file, const int precision=10) const
write the interval variable m_covariance on a file,
Definition: Data.h:786
virtual std::vector< double > error() const
get standard deviation
Definition: Data.h:389
virtual std::vector< std::vector< double > > covariance() const
get the m_covariance vector
Definition: Data.h:403
virtual int ndataset() const
function that returns total number of datasets
Definition: Data.h:619
virtual void read(const std::vector< std::string > input_file, const int skip_nlines=0, const std::vector< int > column={0}, const std::vector< int > column_data={}, const std::vector< int > column_errors={}, const std::vector< int > column_edges={})
read the data from a set of input files
Definition: Data.h:727
std::vector< std::vector< double > > inverse_covariance() const
get the m_inverse_covariance std::vector
Definition: Data.h:256
virtual ~Data()=default
default destructor
virtual double data(const int i, const int j) const
get data at index i,j for Data1D_collection, Data2D
Definition: Data.h:342
virtual void set_yy(const std::vector< double > y)
set interval variable m_y, for Data2D
Definition: Data.h:497
Data(const DataType dataType, const int ndata)
constructor which sets both the data type and the number of data
Definition: Data.h:156
virtual int ndata() const
the total number of data
Definition: Data.h:363
virtual std::shared_ptr< Data > cut(const std::vector< bool > mask) const
cut the data, for Data1D
Definition: Data.h:812
virtual std::vector< std::vector< double > > extra_info() const
return the m_exta_info std::vector
Definition: Data.h:476
virtual std::shared_ptr< Data > as_factory()
static factory used to construct objects of class Data1D
Definition: Data.h:217
virtual void write(const std::string dir, const std::string file, const std::string header, const int prec=4, const int ww=8, const int rank=0) const
write the data
Definition: Data.h:748
virtual double covariance(const int i, const int j) const
get the value of the data covariance at index i,j
Definition: Data.h:397
void reset(const int ndata)
reset data object with new empty arrays large enough to store ndata data
Definition: Data.cpp:66
virtual void set_extra_info(const std::vector< std::vector< double >> extra_info)
set interval variable m_error_fx
Definition: Data.h:543
virtual int ysize() const
get the number of points along y
Definition: Data.h:641
virtual double yy(const int i) const
get value of y at index i, for Data2D
Definition: Data.h:316
static std::shared_ptr< Data > Create(const DataType dataType)
static factory used to construct objects of class Data1D
Definition: Data.cpp:50
virtual double error(const int i, const int j) const
get value of f(x) error at index i,j for Data1D_collection, Data2D
Definition: Data.h:444
virtual void get_error(std::vector< double > &error) const
get standard deviation for Data1D
Definition: Data.h:453
std::shared_ptr< data::Data > join_dataset_1D(std::vector< std::shared_ptr< data::Data >> dataset)
merge dataset of type 1D
Definition: Data.cpp:294
std::shared_ptr< data::Data > join_dataset_1D_extra(std::vector< std::shared_ptr< data::Data >> dataset)
merge dataset of type 1D_extra
Definition: Data.cpp:330
DataType
the data type
Definition: Data.h:53
@ _2D_extra_
2D dataset with extra information
@ _1D_extra_
1D dataset with extra information
@ _1D_collection_
collection of 1D datasets
std::shared_ptr< data::Data > join_dataset(std::vector< std::shared_ptr< data::Data >> dataset)
merge dataset (only work for one dataset type)
Definition: Data.cpp:261
std::vector< std::string > DataTypeNames()
return a vector containing the DataType names
Definition: Data.h:78
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
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
Definition: Kernel.h:780
void invert_matrix(const std::vector< std::vector< double >> mat, std::vector< std::vector< double >> &mat_inv, const double prec=1.e-10, const int Nres=-1)
function to invert a matrix
Definition: Func.cpp:673
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
Definition: Func.cpp:761