#include "pexceptions.h" #include "fitsbntbllinereader.h" /////////////////////////////////////////////////////////// // // /////////////////////////////////////////////////////////// #define LONNOM 31 FITS_BntblLineReader::FITS_BntblLineReader() { InitNull(); } FITS_BntblLineReader::FITS_BntblLineReader(char inputfile[],int hdunum) { InitNull(); // FitsFile* fn=ReadFInit(inputfile,hdunum); // ReadFInit(inputfile,hdunum); inFits_ = new FitsInFile (inputfile); inFits_->ReadFInit(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; for (k=0; kColTypeFromFits(k); char ss= inFits_->ColTypeFromFits(k); if (ss == 'D') DfitsCol.push_back(k); else if (ss == 'E') FfitsCol.push_back(k); else if (ss == 'I') IfitsCol.push_back(k); else if (ss == 'S') SfitsCol.push_back(k); else { cout << " FITS_XNTuple: colonne fits " << k << " type= " << ss << endl; throw IOExc("type de champ inconnu"); } } ColName_ = new char*[nbcols]; int compt=0; for (k=0; kColNameFromFits(DfitsCol[k]).c_str(), LONNOM); strncpy(ColName_[compt], inFits_->ColNameFromFits(DfitsCol[k]).c_str(), LONNOM); ColName_[compt++][ LONNOM] = '\0'; } for (k=0; kColNameFromFits(FfitsCol[k]).c_str(), LONNOM); strncpy(ColName_[compt], inFits_->ColNameFromFits(FfitsCol[k]).c_str(), LONNOM); ColName_[compt++][ LONNOM] = '\0'; } for (k=0; kColNameFromFits(IfitsCol[k]).c_str(), LONNOM); strncpy(ColName_[compt], inFits_->ColNameFromFits(IfitsCol[k]).c_str(), LONNOM); ColName_[compt++][ LONNOM] = '\0'; } for (k=0; kColNameFromFits(SfitsCol[k]).c_str(), LONNOM); strncpy(ColName_[compt], inFits_->ColNameFromFits(SfitsCol[k]).c_str(), LONNOM); ColName_[compt++][LONNOM] = '\0'; } if (DfitsCol.size()>0) { dcount_ = DfitsCol.size(); ddata_ = new double[dcount_]; } if (FfitsCol.size()>0) { fcount_ = FfitsCol.size(); fdata_ = new float[fcount_]; } if (IfitsCol.size()>0) { icount_ = IfitsCol.size(); idata_ = new int[icount_]; } if (SfitsCol.size()>0) { ccount_ = SfitsCol.size(); cdata_ = new char*[ccount_]; taille_des_chaines_ = 0; // for (k=0; k< ccount_; k++) taille_des_chaines_ = max( taille_des_chaines_, fn->ColStringLengthFromFits(SfitsCol[k]) ); for (k=0; k< ccount_; k++) taille_des_chaines_ = max( taille_des_chaines_, inFits_->ColStringLengthFromFits(SfitsCol[k]) ); for (k=0; kGetBinTabLine(nextLineToBeRead_++, ddata_, fdata_, idata_, cdata_ ); XNTuple xnt(dcount_, fcount_, icount_,ccount_, ColName_); xnt.Fill(ddata_, fdata_, idata_, cdata_); return xnt; } void FITS_BntblLineReader::ReadFromFits(FitsInFile&) { } void FITS_BntblLineReader::WriteToFits(FitsOutFile&) { }