#include "pexceptions.h" #include "fitsbntbllineRW.h" #include "utils.h" /////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////// #define LONNOM 31 FITS_BntblLineReader::FITS_BntblLineReader() { InitNull(); } FITS_BntblLineReader::FITS_BntblLineReader(char inputfile[],int hdunum) { InitNull(); inFits_ = new FitsInFile (inputfile); inFits_->ReadHeader(hdunum); // if (!fn->IsFitsTable()) if (!inFits_->IsFitsTable()) { throw PException("FITS_BntblLineReader: the fits file seems not to be a bintable nor ASCII table"); } // int nbcols, nbentries; // nbcols = fn->NbColsFromFits(); nbcols = inFits_->NbColsFromFits(); nbentries = 0; int k; // for (k=0; kNentriesFromFits(k) ); for (k=0; kNentriesFromFits(k) ); // // pour mettre les colonnes dans l'ordre double, float, int, char : // tableau de correspondance // DfitsCol(j)= numero dans le fichier fits de la jeme variable double du // xntuple; // FfitsCol(j)= numero dans le fichier fits de la jeme variable float du // xntuple; // etc. vector DfitsCol; vector FfitsCol; vector IfitsCol; vector SfitsCol; vector LfitsCol; vector BfitsCol; for (k=0; kColTypeFromFits(k); if (ss == FitsFile::FitsDataType_double) DfitsCol.push_back(k); else if (ss == FitsFile::FitsDataType_float) FfitsCol.push_back(k); else if (ss == FitsFile::FitsDataType_int) IfitsCol.push_back(k); else if (ss == FitsFile::FitsDataType_long) LfitsCol.push_back(k); else if (ss == FitsFile::FitsDataType_byte) BfitsCol.push_back(k); else if (ss == FitsFile::FitsDataType_char) SfitsCol.push_back(k); else { cout << " FITS_XNTuple: colonne fits " << k << " type= " << (int) ss << endl; throw IOExc("type de champ inconnu"); } } vector ColN(nbcols); int compt=0; for (k=0; kColNameFromFits(DfitsCol[k]); } for (k=0; kColNameFromFits(FfitsCol[k]); } for (k=0; kColNameFromFits(IfitsCol[k]); } for (k=0; kColNameFromFits(LfitsCol[k]); } for (k=0; kColNameFromFits(BfitsCol[k]); } for (k=0; kColNameFromFits(SfitsCol[k]); } ligne_.setFormat(DfitsCol.size(), FfitsCol.size(), IfitsCol.size(), LfitsCol.size(), BfitsCol.size(),SfitsCol.size(), ColN); } FITS_BntblLineReader::~FITS_BntblLineReader() { if (inFits_ != NULL) delete inFits_; } BnTblLine& FITS_BntblLineReader::ReadNextLine() { inFits_->GetBinTabLine(nextLineToBeRead_++, ligne_); return ligne_; } FITS_BntblLineWriter::FITS_BntblLineWriter(char inputfile[],int dc, int fc,int ic, int lc, int bc, int cc, vector names,DVList* ptr_dvl, FitsFile::WriteMode wrm) { int k; int nbcols = dc+fc+ic+cc+lc+bc; if (nbcols != names.size()) { cout << " WARNING: BnTblLineWriter:: length of vector of column names not equal to total number of columns" << endl; } InitNull(); outFits_ = new FitsOutFile (inputfile, wrm); string types; vector StringSizes(cc); for (k=0; kmakeHeaderBntblOnFits(types, names, 1, nbcols, ptr_dvl, extname,StringSizes); ligne_.setFormat(dc, fc, ic,lc,bc,cc, names); } FITS_BntblLineWriter::~FITS_BntblLineWriter() { if (dvl_ != NULL) delete dvl_; if (outFits_ != NULL) delete outFits_; } void FITS_BntblLineWriter::WriteNextLine( BnTblLine& WorkLine) { if (! ligne_.sameFormat(WorkLine) ) { throw PException(" FITS_BntblLineWriter:: line to be written does not match the header"); } outFits_->PutBinTabLine(nextLineToBeWritten_++, WorkLine); }