46 cbl::catalogue::Catalogue::Catalogue (
const ObjectType objectType,
const CoordinateType coordinateType,
const std::vector<std::string> file,
const std::vector<std::string> column_names,
const bool read_weights,
const bool read_regions,
const double nSub,
const double fact,
const cosmology::Cosmology &cosm,
const CoordinateUnits inputUnits,
const int seed)
54 for (
size_t dd=0; dd<file.size(); ++dd) {
56 coutCBL <<
"Reading the catalogue: " << file[dd] << endl;
61 if (((read_weights || read_regions) && table.size()<3) || ((read_weights && read_regions) && table.size()<4))
62 ErrorCBL(
"the number of columns in the input FITS file is wrong!",
"Catalogue",
"FITSCatalogue.cpp");
66 for (
size_t i=0; i<table[0].size(); ++i) {
70 if (coordinateType==CoordinateType::_comoving_) {
71 comovingCoordinates coord = {table[0][i]*fact, table[1][i]*fact, table[2][i]*fact};
72 m_object.push_back(move(Object::Create(objectType, coord, (read_weights) ? table[3][i] : 1., (read_regions) ? (
long)table[(read_weights) ? 4 : 3][i] : 1)));
75 else if (coordinateType==CoordinateType::_observed_) {
76 if (table[2][i]*fact>0) {
77 observedCoordinates coord = {table[0][i]*fact, table[1][i]*fact, table[2][i]*fact};
78 m_object.push_back(move(Object::Create(objectType, coord, inputUnits, cosm, (read_weights) ? table[3][i] : 1., (read_regions) ? (
long)table[(read_weights) ? 4 : 3][i] : 1)));
83 else ErrorCBL(
"coordinateType is not valid!",
"Catalogue",
"FITSCatalogue.cpp");
98 if (attribute.size()==column_names.size()) nvar = attribute.size();
99 else ErrorCBL(
"Column_names vector and attribute vector must have equal size!",
"Catalogue",
"FITSCatalogue.cpp");
101 const int num_threads = (nvar>size_t(omp_get_max_threads())) ? omp_get_max_threads() : nvar;
103 unordered_map<int, Var> varMap;
104 for (
size_t ii=0; ii<nvar; ii++)
105 varMap.insert({ii, attribute[ii]});
112 for (
size_t dd=0; dd<file.size(); ++dd) {
114 coutCBL <<
"Reading the catalogue: " << file[dd] << endl;
125 for (
size_t i=0; i<table[0].size(); ++i) {
127 size_t prev_nObj = nObjects();
132 m_object.push_back(move(Object::Create(objectType, defaultComovingCoord, 1.)));
135 m_object.push_back(move(Object::Create(objectType, defaultObservedCoord, inputUnits, cosm, 1.)));
138 #pragma omp parallel num_threads(num_threads)
140 #pragma omp for schedule(dynamic)
141 for (
size_t i=0; i<nvar; ++i) {
143 for (
size_t ii=prev_nObj; ii<nObjects(); ii++) {
144 double temp = ((varMap[i]==Var::_RA_) || (varMap[i]==Var::_Dec_)) ?
radians(table[i][ii], inputUnits) : table[i][ii];
145 set_var(ii, varMap[i], ((varMap[i]==Var::_X_) || (varMap[i]==Var::_Y_) || (varMap[i]==Var::_Z_)) ? temp*fact : temp, cosm);
class FITSwrapper that wrap CCfits routines to manage FITS files
#define coutCBL
CBL print message.
Catalogue()=default
default constructor
static const char fDP2[]
conversion symbol for: double -> std::string
static const char fINT[]
conversion symbol for: int -> std::string
static const double defaultDouble
default double value
ObjectType
the object types
std::vector< std::vector< double > > read_table_fits(const std::string input_fits, const std::vector< std::string > column_names, const int next=1, const double fill_value=cbl::par::defaultDouble)
function to read a table from a fits file
The global namespace of the CosmoBolognaLib
std::string conv(const T val, const char *fact)
convert a number to a std::string
CoordinateType
the coordinate type
@ _observed_
observed coordinates (R.A., Dec, redshift)
@ _comoving_
comoving coordinates (x, y, z)
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
double radians(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_degrees_)
conversion to radians
CoordinateUnits
the coordinate units
void WarningMsgCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL)
internal CBL warning message