47 set_dataType(DataType::_1D_collection_);
48 read(input_file, skip_header);
57 set_dataType(DataType::_1D_collection_);
58 read(input_files, skip_header);
67 set_dataType(DataType::_1D_collection_);
70 m_ndataset = m_x.size();
71 m_xsize.resize(m_ndataset,0);
75 for (
int i=0; i<m_ndataset; i++) {
76 m_xsize[i] = m_x[i].size();
78 for (
int j=0; j<m_xsize[i]; j++)
79 m_data.push_back(data[i][j]);
82 m_ndata = m_data.size();
83 m_error.resize(m_ndata,0);
86 for (
int i=0; i<m_ndataset; i++) {
88 for (
int j=0; j<m_xsize[i]; j++) {
92 m_index.push_back(vv);
102 set_dataType(DataType::_1D_collection_);
105 m_ndataset = m_x.size();
106 m_xsize.resize(m_ndataset,0);
110 for (
int i=0; i<m_ndataset; i++) {
111 m_xsize[i] = m_x[i].size();
113 for (
int j=0; j<m_xsize[i]; j++)
114 m_data.push_back(data[i][j]);
117 m_ndata = m_data.size();
118 m_error.resize(m_ndata,0);
121 for (
int i=0; i<m_ndata; i++)
126 for (
int i=0; i<m_ndata; i++)
127 m_error[i] = sqrt(m_covariance[i][i]);
130 for (
int i=0; i<m_ndataset; i++) {
132 for (
int j=0; j<m_xsize[i]; j++) {
136 m_index.push_back(vv);
146 set_dataType(DataType::_1D_collection_);
149 m_ndataset = m_x.size();
150 m_xsize.resize(m_ndataset,0);
154 for (
int i=0; i<m_ndataset; i++) {
155 m_xsize[i] = m_x[i].size();
163 m_ndata = m_data.size();
165 m_covariance.resize(m_ndata, vector<double>(m_ndata, 0));
166 for (
int i=0; i<m_ndata; i++)
167 m_covariance[i][i] = pow(m_error[i],2);
176 set_dataType(DataType::_1D_collection_);
179 m_ndataset = m_x.size();
180 m_xsize.resize(m_ndataset,0);
184 for (
int i=0; i<m_ndataset; i++) {
185 m_xsize[i] = m_x[i].size();
194 m_ndata = m_data.size();
197 m_error.resize(m_ndata, 0);
198 for (
int i=0; i<m_ndata; i++)
199 m_error[i] = sqrt(m_covariance[i][i]);
209 data.erase(data.begin(), data.end());
211 for (
int i=0; i<m_ndataset; i++) {
212 vector<double> vv(m_xsize[i], 0);
213 for (
int j=0; j< m_xsize[i]; j++) {
214 vv[j] = this->data(i,j);
226 error.erase(error.begin(), error.end());
228 for (
int i=0; i<m_ndataset; i++) {
229 vector<double> vv(m_xsize[i], 0);
230 for (
int j=0; j< m_xsize[i]; j++) {
231 vv[j] = this->error(i, j);
241 void cbl::data::Data1D_collection::read (
const std::string input_file,
const int skip_nlines,
const std::vector<int> column,
const std::vector<int> column_data,
const std::vector<int> column_errors,
const std::vector<int> column_edges)
243 (void)column; (void)column_data; (void)column_errors; (void)column_edges;
244 WarningMsgCBL(
"column, column_data, column_errors, column_edges are not used in the current implementation",
"read",
"Data1D_collection.cpp");
246 ifstream fin(input_file.c_str());
checkIO(fin, input_file);
250 for (
int i=0; i<skip_nlines; ++i)
253 vector<vector<double>> table, tr_table;
254 while (getline(fin, line)) {
262 fin.clear(); fin.close();
266 for (
size_t i=0; i<table.size(); i++)
267 for (
size_t j=0; j<table[i].size(); j++)
268 tr_table[i][j] = table[j][i];
270 m_ndataset = (tr_table.size()-1)/2;
271 m_xsize.resize(m_ndataset,0);
273 for (
int i=0; i<m_ndataset; i++) {
274 m_x.push_back(tr_table[0]);
275 m_xsize[i]=m_x[i].size();
277 for (
int j=0; j<m_xsize[i]; j++) {
278 m_data.push_back(tr_table[2*i+1][j]);
279 m_error.push_back(tr_table[2*i+2][j]);
283 m_ndata = m_data.size();
285 m_covariance.resize(m_ndata, vector<double>(m_ndata,0));
286 for (
int i=0; i<m_ndata; i++)
287 m_covariance[i][i] = pow(m_error[i],2);
290 for (
int i=0; i<m_ndataset; i++) {
292 for (
int j=0; j<m_xsize[i]; j++) {
296 m_index.push_back(vv);
304 void cbl::data::Data1D_collection::read (
const std::vector<std::string> input_file,
const int skip_nlines,
const std::vector<int> column,
const std::vector<int> column_data,
const std::vector<int> column_errors,
const std::vector<int> column_edges)
306 (void)column; (void)column_data; (void)column_errors; (void)column_edges;
307 WarningMsgCBL(
"column, column_data, column_errors, column_edges are not used in the current implementation",
"read",
"Data1D_collection.cpp");
309 m_ndataset = input_file.size();
310 m_xsize.resize(m_ndataset,0);
312 for (
int i=0; i<m_ndataset; i++) {
313 ifstream fin(input_file[i].c_str());
checkIO(fin, input_file[i]);
317 for (
int j=0; j<skip_nlines; ++j)
320 vector<double> xx, data, error;
322 while (getline(fin, line)) {
323 stringstream ss(line);
double NUM;
324 ss>>NUM; xx.push_back(NUM);
325 ss>>NUM; data.push_back(NUM);
326 ss>>NUM; error.push_back(NUM);
330 for (
size_t j=0; j<data.size(); j++) {
331 m_data.push_back(data[j]);
332 m_error.push_back(error[j]);
334 fin.clear(); fin.close();
336 m_xsize[i]=m_x.size();
339 m_ndata = m_data.size();
341 m_covariance.resize(m_ndata, vector<double>(m_ndata,0));
342 for (
int i=0; i<m_ndata; i++)
343 m_covariance[i][i] = pow(m_error[i],2);
346 for (
int i=0; i<m_ndataset; i++) {
348 for (
int j=0; j<m_xsize[i]; j++) {
352 m_index.push_back(vv);
362 const int ndata = m_xsize[0];
364 for (
int i=1; i<m_ndataset; i++)
367 for (
int i=0; i<ndata; i++) {
368 coutCBL << setprecision(precision) << setw(8) << right << m_x[0][i] <<
" ";
369 for (
int j=0; j<m_ndataset; j++)
370 coutCBL << setprecision(precision) << setw(8) << right << m_data[m_index[j][i]]
371 <<
" " << setprecision(precision) << setw(8) << right << m_error[m_index[j][i]] <<
" ";
384 const int ndata = m_xsize[0];
386 for (
int i=1; i<m_ndataset; i++)
389 string file_out = dir+file;
391 ofstream fout(file_out.c_str());
checkIO(fout, file_out);
393 fout <<
"### "<< header <<
" ###" << endl;
395 const int bp = cout.precision();
397 for (
int i=0; i<ndata; i++) {
398 cbl::Print(m_x[0][i], prec, ww,
"",
" ",
false, fout);
399 for (
int j=0; j<m_ndataset; j++) {
400 cbl::Print(m_data[m_index[j][i]], prec, ww,
"",
" ",
false, fout);
401 cbl::Print(m_error[m_index[j][i]], prec, ww,
"",
"\n",
false, fout);
406 fout.close(); cout << endl;
coutCBL <<
"I wrote the file: " << file_out << endl;
417 checkDim(files, m_ndataset,
"files");
419 for (
int i=0; i<m_ndataset; i++) {
420 string file_out =dir+files[i];
421 ofstream fout(file_out.c_str());
checkIO(fout, file_out);
424 fout <<
"### "<< header <<
" ###" << endl;
426 const int bp = cout.precision();
428 for (
int j=0; j<m_xsize[i]; j++){
429 cbl::Print(m_x[i][j], prec, ww,
"",
" ",
false, fout);
430 cbl::Print(m_data[m_index[i][j]], prec, ww,
"",
" ",
false, fout);
431 cbl::Print(m_error[m_index[i][j]], prec, ww,
"",
"\n",
false, fout);
435 fout.close(); cout << endl;
coutCBL <<
"I wrote the file: " << file_out << endl;
446 vector<double> vxmin(m_ndataset, -1), vxmax(m_ndataset, -1);
448 vxmin[dataset] = xmin; vxmax[dataset] = xmax;
450 vector<bool> mask(m_ndata,
true);
451 vector<vector<double>> xx;
453 for (
int i=0; i<m_ndataset; i++) {
455 for (
int j=0; j<m_xsize[i]; j++) {
456 if ( (m_x[i][j] < vxmin[i]) || (m_x[i][j]>vxmax[i]))
457 mask[m_index[i][j]] =
false;
459 vv.push_back(m_x[i][j]);
467 vector<double> data, error;
468 vector<vector<double>> covariance;
469 Data::cut(mask, data, error, covariance);
473 shared_ptr<Data> dd = make_shared<Data1D>(
Data1D(xx[0], data, covariance));
487 vector<bool> mask(m_ndata,
true);
488 vector<vector<double>> xx;
490 for (
int i=0; i<m_ndataset; i++) {
492 for (
int j=0; j<m_xsize[i]; j++) {
493 if ( (m_x[i][j] < xmin[i]) || (m_x[i][j]>xmax[i]))
494 mask[m_index[i][j]] =
false;
496 vv.push_back(m_x[i][j]);
502 vector<double> data, error;
503 vector<vector<double>> covariance;
504 Data::cut(mask, data, error, covariance);
506 vector<vector<double>> data2;
509 for (
size_t i=0; i<xx.size(); i++) {
510 vector<double> vv(xx[i].size(),0);
511 for (
size_t j=0; j<xx[i].size(); j++) {
518 shared_ptr<Data> dd = make_shared<Data1D_collection>(
Data1D_collection(xx, data2, covariance));
529 checkDim(m_covariance, m_ndata, m_ndata,
"covariance",
false);
531 string file_out = dir+file;
532 ofstream fout(file_out.c_str());
checkIO(fout, file_out);
534 fout <<
"### # [1] dataset1 # [2] dataset2 # [3] r1 # [4] r2 # [5] covariance # [6] correlation # [7] index1 # [8] index2 ### " << endl;
536 int index1 = 0, index2= 0;
538 for (
int i=0; i<m_ndataset; i++)
539 for (
int j=0; j<m_ndataset; j++)
540 for (
int m=0; m<m_xsize[i]; m++)
541 for (
int n=0; n<m_xsize[j]; n++) {
542 index1 = m_index[i][m];
543 index2 = m_index[j][n];
544 fout << setiosflags(ios::fixed) << setprecision(precision) << setw(15) << right << i
545 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(15) << right << j
546 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(15) << right << m_x[i][m]
547 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(15) << right << m_x[j][n]
548 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(15) << right << m_covariance[index1][index2]
549 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(15) << right << m_covariance[index1][index2]/sqrt(m_covariance[index1][index1]*m_covariance[index2][index2])
550 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(5) << right << index1
551 <<
" " << setiosflags(ios::fixed) << setprecision(precision) << setw(5) << right << index2 << endl;
554 fout.close(); cout << endl;
coutCBL <<
"I wrote the file: " << file_out << endl;
The class Data1D_collection.
#define coutCBL
CBL print message.
The class Data1D_collection.
virtual void Print(const int precision=4) const override
print the data on screen
std::shared_ptr< Data > cut(const int dataset, const double xmin, const double xmax) const override
cut the data, for Data1D_collection
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 override
write the data
Data1D_collection()
default constructor
void write_covariance(const std::string dir, const std::string file, const int precision=10) const override
write the interval variable m_covariance on a file,
void read(const std::string input_file, const int skip_nlines=0, const std::vector< int > column={1}, const std::vector< int > column_data={}, const std::vector< int > column_errors={}, const std::vector< int > column_edges={}) override
read the data
virtual std::vector< double > data() const
get data
virtual std::vector< double > error() const
get standard deviation
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
The global namespace of the CosmoBolognaLib
std::string conv(const T val, const char *fact)
convert a number to a std::string
void Print(const T value, const int prec, const int ww, const std::string header="", const std::string end="\n", const bool use_coutCBL=true, std::ostream &stream=std::cout, const std::string colour=cbl::par::col_default)
function to print values with a proper homegenised format
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
void checkIO(const std::ifstream &fin, const std::string file="NULL")
check if an input file can be opened
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
void checkEqual(const std::vector< T > vect1, const std::vector< T > vect2)
check if two std::vectors are equal
void WarningMsgCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL)
internal CBL warning message