56 void add_hdu(std::string hdu_name, Eigen::DenseBase<Derived> &data) {
58 std::vector<long> naxes{data.cols(), data.rows(), 1, 1};
61 hdus.push_back((
pfits->addImage(hdu_name,DOUBLE_IMG,naxes)));
64 std::valarray<double> temp_data(data.size());
68 for (
int i=0; i<data.rows(); ++i){
69 for (
int j=0; j<data.cols(); ++j) {
70 temp_data[k] = data(i, data.cols() - j - 1);
79 hdus.back()->write(first_pixel, temp_data.size(), temp_data);
85 CCfits::ExtHDU& hdu =
pfits->extension(hdu_name);
88 std::valarray<double> contents;
95 long ax1(hdu.axis(0));
96 long ax2(hdu.axis(1));
99 Eigen::MatrixXd data(ax2,ax1);
103 for (Eigen::Index i=0; i<ax2; ++i) {
104 for (Eigen::Index j=0; j<ax1; ++j) {
105 data(i,j) = contents[k];
111 data.rowwise().reverseInPlace();
115 }
catch (CCfits::FITS::NoSuchHDU) {
117 std::exit(EXIT_FAILURE);
122 void add_wcs(hdu_t *hdu, wcs_t &wcs,
const epoch_t epoch) {
124 hdu->addKey(
"EQUINOX", epoch,
"WCS: Equinox");
126 for (Eigen::Index i=0; i<wcs.ctype.size(); ++i) {
127 hdu->addKey(
"CTYPE"+std::to_string(i+1), wcs.ctype[i],
"WCS: Projection Type " +std::to_string(i+1));
128 hdu->addKey(
"CUNIT"+std::to_string(i+1), wcs.cunit[i],
"WCS: Axis Unit " +std::to_string(i+1));
129 hdu->addKey(
"CRVAL"+std::to_string(i+1), wcs.crval[i],
"WCS: Ref Pixel Value " +std::to_string(i+1));
130 hdu->addKey(
"CDELT"+std::to_string(i+1), wcs.cdelt[i],
"WCS: Pixel Scale " +std::to_string(i+1));
132 hdu->addKey(
"CRPIX"+std::to_string(i+1), wcs.crpix[i] + 1,
"WCS: Ref Pixel " +std::to_string(i+1));