52 if (dataType==DataType::_1D_)
return move(unique_ptr<Data1D>(
new Data1D()));
53 else if (dataType==DataType::_2D_)
return move(unique_ptr<Data2D>(
new Data2D()));
54 else if (dataType==DataType::_1D_collection_)
return move(unique_ptr<Data1D_collection>(
new Data1D_collection()));
55 else if (dataType==DataType::_1D_extra_)
return move(unique_ptr<Data1D_extra>(
new Data1D_extra()));
56 else if (dataType==DataType::_2D_extra_)
return move(unique_ptr<Data2D_extra>(
new Data2D_extra()));
57 else ErrorCBL(
"no such type of object, or error in the input parameters!",
"Create",
"Data.cpp");
69 m_data.resize(m_ndata, 0);
70 m_error.resize(m_ndata, 0);
71 m_covariance.resize(m_ndata, vector<double>(m_ndata, 0));
72 m_inverse_covariance.resize(m_ndata, vector<double>(m_ndata, 0));
81 m_dataType = dataType;
93 m_dataType = dataType;
98 set_covariance(error);
107 m_dataType = dataType;
111 set_covariance(covariance);
112 set_error(covariance);
121 vector<vector<double>> corr(m_ndata, vector<double>(m_ndata,0));
123 for (
int i=0; i<m_ndata; i++)
124 for (
int j=0; j<m_ndata; j++)
125 corr[i][j] = m_covariance[i][j]/sqrt(m_covariance[i][i]*m_covariance[j][j]);
156 checkDim(covariance, m_ndata, m_ndata,
"covariance");
158 for (
int i=0; i<m_ndata; i++)
159 m_error[i] = sqrt(covariance[i][i]);
171 for (
int i=0; i<m_ndata; i++)
172 m_covariance[i][i] = pow(m_error[i], 2);
181 checkDim(covariance, m_ndata, m_ndata,
"covariance");
183 m_covariance = covariance;
184 set_error(covariance);
193 ifstream fin(filename.c_str());
checkIO(fin, filename);
196 for (
int i=0; i<skipped_lines; ++i) getline(fin, line);
198 vector<double> covariance;
200 while (getline(fin, line)) {
202 stringstream ss(line);
204 while (ss>>NN) num.push_back(NN);
207 covariance.push_back(num[cov_col]);
210 fin.clear(); fin.close();
212 m_covariance =
reshape(covariance, m_ndata, m_ndata);
214 set_covariance(m_covariance);
215 set_error(m_covariance);
228 for (
int i=0; i<m_ndata; i++)
233 ErrorCBL(
"no elements left!",
"cut",
"Data.cpp");
235 data.resize(ndata_eff, 0);
236 error.resize(ndata_eff, 0);
240 for (
int i=0; i<m_ndata; i++) {
242 data[index1] = m_data[i];
243 error[index1] = m_error[i];
246 for (
int j=0; j<m_ndata; j++) {
263 if (dataset.size()<2)
264 ErrorCBL(
"at least 2 dataset have to be provided!",
"join_dataset",
"Data.cpp");
268 for (
size_t i=0; i<dataset.size(); i++)
269 if (dt!=dataset[i]->dataType())
270 ErrorCBL(
"the dataset types must be equal!",
"join_dataset",
"Data.cpp");
274 case data::DataType::_1D_:
278 case data::DataType::_1D_extra_:
283 ErrorCBL(
"",
"join_dataset",
"Data.cpp");
296 int ndataset = (int)dataset.size();
298 vector<vector<int>> data_index;
301 for (
int i=0; i<ndataset; i++) {
302 ndata+=dataset[i]->ndata();
304 for (
int j=0; j<dataset[i]->ndata(); j++) {
308 data_index.push_back(_dd);
311 vector<double> xx(ndata, 0), data(ndata, 0);
312 vector<vector<double>> covariance(ndata, vector<double>(ndata, 0));
314 for (
int i=0; i<ndataset;i++)
315 for (
int j=0; j<dataset[i]->ndata(); j++) {
316 xx[data_index[i][j]] = dataset[i]->xx(j);
317 data[data_index[i][j]] = dataset[i]->data(j);
319 for (
int k=0; k<dataset[i]->ndata(); k++)
320 covariance[data_index[i][j]][data_index[i][k]] = dataset[i]->covariance(j, k);
323 return move(unique_ptr<data::Data1D>(
new data::Data1D(xx, data, covariance)));
332 ErrorCBL(
"",
"join_dataset_1D_extra",
"Data.cpp", glob::ExitCode::_workInProgress_);
333 int ndataset = (int)dataset.size();
335 vector<int> n_data(ndataset);
336 int nextra = dataset[0]->extra_info().size();
338 for (
int i=0; i<ndataset; i++)
339 ndata += dataset[i]->ndata();
341 vector<double> xx(ndata, 0), data(ndata, 0);
342 vector<vector<double>> extra_info (nextra, vector<double>(ndata, 0));
343 vector<vector<double>> covariance(ndata, vector<double>(ndata, 0));
345 auto merged_dataset = make_shared<data::Data1D_extra>(
data::Data1D_extra(xx, data, covariance, extra_info));
347 return merged_dataset;
The class Data1D_collection.
The class Data1D_collection.
std::vector< std::vector< double > > correlation() const
get the value of the data correlation at index i,j
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
virtual void set_data(const std::vector< std::vector< double >> data)
set interval variable m_data, for Data1D_collection, Data2D
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
void set_error(const std::vector< double > error)
set interval variable m_error_fx
Data()=default
default constructor
void reset(const int ndata)
reset data object with new empty arrays large enough to store ndata data
static std::shared_ptr< Data > Create(const DataType dataType)
static factory used to construct objects of class Data1D
static const double defaultDouble
default double value
std::shared_ptr< data::Data > join_dataset_1D(std::vector< std::shared_ptr< data::Data >> dataset)
merge dataset of type 1D
std::shared_ptr< data::Data > join_dataset_1D_extra(std::vector< std::shared_ptr< data::Data >> dataset)
merge dataset of type 1D_extra
std::shared_ptr< data::Data > join_dataset(std::vector< std::shared_ptr< data::Data >> dataset)
merge dataset (only work for one dataset type)
The global namespace of the CosmoBolognaLib
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
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
std::vector< std::vector< T > > reshape(std::vector< T > vec, const int size1, const int size2)
reshape a vector into a matrix of given number of rows and columns
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