35 #include "CCfits/CCfits"
47 ifstream check_input(input_fits);
checkIO(check_input, input_fits); check_input.close();
49 unique_ptr<CCfits::FITS> pInfile(
new CCfits::FITS(input_fits, CCfits::Read, next));
51 CCfits::ExtHDU& table = pInfile->currentExtension();
53 const long nrows = table.rows();
57 ErrorCBL(
"no rows in the selected table extension!",
"read_table_fits",
"FITSwrapper.cpp");
59 vector<vector<double>>
cc;
61 for (
size_t i=0; i<column_names.size(); i++) {
64 table.column(column_names[i]).read(vv, 0, nrows);
66 catch (CCfits::Table::NoSuchColumn) {
68 ErrorCBL(
"no column "+column_names[i]+
"!",
"read_table_fits",
"FITSwrapper.cpp");
70 vv.erase(vv.begin(), vv.end());
71 vv.resize(nrows, fill_value);
78 if (no_col==column_names.size())
79 ErrorCBL(
"no column found!",
"read_table_fits",
"FITSwrapper.cpp");
88 void cbl::wrapper::ccfits::write_table_fits (
const std::string output_dir,
const std::string file_fits,
const std::vector<std::string> column_names,
const std::vector<std::vector<double>> table,
const std::vector<std::string> column_units)
90 const string file_name = output_dir+file_fits;
92 if (system((
"rm -rf "+file_name).c_str())) {}
94 shared_ptr<CCfits::FITS> pFits(0);
98 pFits.reset(
new CCfits::FITS(file_name, CCfits::Write) );
100 catch(CCfits::FITS::CantOpen)
102 ErrorCBL(
"the file "+file_name+
" cannot be opened!",
"write_table_fits",
"FITSwrapper.cpp");
105 const size_t ncolumns = column_names.size();
106 size_t rows = table[0].size();
107 string hduName =
"TABLE_BINARY";
109 vector<string> colName = column_names;
110 vector<string> colUnit = (column_units.size()==0) ? vector<string>(ncolumns,
"") : column_units;
111 vector<string> colForm(ncolumns,
"1D");
113 CCfits::Table* newTable = pFits->addTable(hduName, rows, colName, colForm, colUnit);
116 for (
size_t i=0; i<ncolumns; i++)
117 newTable->column(colName[i]).write(table[i], 1);
119 coutCBL <<
"I wrote the file: " << file_name << endl;
class FITSwrapper that wrap CCfits routines to manage FITS files
#define coutCBL
CBL print message.
static const double defaultDouble
default double value
static const double cc
: the speed of light in vacuum (the value is exact) [km/sec]
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
void write_table_fits(const std::string output_dir, const std::string file_fits, const std::vector< std::string > column_names, const std::vector< std::vector< double >> table, const std::vector< std::string > column_units={})
function that writes a table on a fits file
The global namespace of the CosmoBolognaLib
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