diff --git a/FitsIOServer/fitsbntbllineRW.cc b/FitsIOServer/fitsbntbllineRW.cc index 939e1b30caf626647a272e7b285989171b8d7af0..f8731edf36fae5d293e330b07fdb36d7e7903a05 100644 --- a/FitsIOServer/fitsbntbllineRW.cc +++ b/FitsIOServer/fitsbntbllineRW.cc @@ -99,7 +99,7 @@ BnTblLine& FITS_BntblLineReader::ReadNextLine() -FITS_BntblLineWriter::FITS_BntblLineWriter(char inputfile[],int dc, int fc,int ic, int cc, vector<string> names,DVList* ptr_dvl, WriteMode wrm) +FITS_BntblLineWriter::FITS_BntblLineWriter(char inputfile[],int dc, int fc,int ic, int cc, vector<string> names,DVList* ptr_dvl, FitsFile::WriteMode wrm) { int k; int nbcols = dc+fc+ic+cc; diff --git a/FitsIOServer/fitsbntbllineRW.h b/FitsIOServer/fitsbntbllineRW.h index 95e84767aafe56b01a0b2b2cb5f32a081370ddd6..c3627a3afe9578b6700a2266970354fc9a4c8bb3 100644 --- a/FitsIOServer/fitsbntbllineRW.h +++ b/FitsIOServer/fitsbntbllineRW.h @@ -60,7 +60,7 @@ class FITS_BntblLineWriter : public FitsIOHandler public: - FITS_BntblLineWriter(char inputfile[],int dc, int fc, int ic, int cc, vector<string> names, DVList* dvl=NULL, WriteMode wrm = clear); + FITS_BntblLineWriter(char inputfile[],int dc, int fc, int ic, int cc, vector<string> names, DVList* dvl=NULL, FitsFile::WriteMode wrm = FitsFile::clear); ~FITS_BntblLineWriter(); void WriteNextLine( BnTblLine& WorkLine); diff --git a/FitsIOServer/fitsfile.cc b/FitsIOServer/fitsfile.cc index 969332eeb10be532dfcbd233426234a94051faaa..abb4b8fa65e47df7722f0225985ad0aa3cbaed49 100644 --- a/FitsIOServer/fitsfile.cc +++ b/FitsIOServer/fitsfile.cc @@ -128,7 +128,7 @@ calls the method 'WriteToFits' from the inherited object void FitsIOHandler::Write(char flnm[]) { - FitsOutFile of(flnm, unknown); + FitsOutFile of(flnm, FitsFile::unknown); Write(of); } @@ -207,7 +207,15 @@ FitsInFile::FitsInFile() InitNull(); } -FitsInFile::FitsInFile(char flnm[]) +FitsInFile::FitsInFile(string const & flnm) +{ + InitNull(); + int status = 0; + fits_open_file(&fptr_,flnm.c_str(),READONLY,&status); + if( status ) printerror( status ); +} + +FitsInFile::FitsInFile(const char * flnm) { InitNull(); int status = 0; @@ -249,7 +257,7 @@ int FitsInFile::NbBlocks(char flnm[]) return nbhdu; } -void FitsInFile::GetBlockType(char flnm[], int hdunum, string& typeOfExtension, int& naxis, vector<int>& naxisn, string& dataType, DVList& dvl ) +void FitsInFile::GetBlockType(char flnm[], int hdunum, FitsExtensionType& typeOfExtension, int& naxis, vector<int>& naxisn, FitsDataType& dataType, DVList& dvl ) { int status = 0; fitsfile* fileptr; @@ -261,14 +269,14 @@ void FitsInFile::GetBlockType(char flnm[], int hdunum, string& typeOfExtension, if( status ) printerror( status,"GetBlockType: erreur movabs"); if(hdutype == IMAGE_HDU) { - typeOfExtension = "IMAGE"; + typeOfExtension = FitsExtensionType_IMAGE; int bitpix; GetImageParameters (fileptr, bitpix, naxis, naxisn); - if(bitpix == DOUBLE_IMG) dataType = "double"; + if(bitpix == DOUBLE_IMG) dataType = FitsDataType_double; else - if(bitpix == FLOAT_IMG) dataType = "float"; + if(bitpix == FLOAT_IMG) dataType = FitsDataType_float; else - if(bitpix == LONG_IMG || bitpix == SHORT_IMG ) dataType = "int"; + if(bitpix == LONG_IMG || bitpix == SHORT_IMG ) dataType = FitsDataType_int; else { cout << " bitpix= " << bitpix << endl; @@ -288,19 +296,19 @@ void FitsInFile::GetBlockType(char flnm[], int hdunum, string& typeOfExtension, for (k=0; k< naxisn.size(); k++) naxisn[k] *= nrows; if(hdutype == ASCII_TBL) { - typeOfExtension = "ASCII_TBL"; - dataType = "ASCII"; + typeOfExtension = FitsExtensionType_ASCII_TBL; + dataType = FitsDataType_ASCII; } else { - typeOfExtension = "BINARY_TBL"; - if(types[0] == 'D') dataType = "double"; + typeOfExtension = FitsExtensionType_BINARY_TBL; + if(types[0] == 'D') dataType = FitsDataType_double; else - if(types[0] == 'E') dataType = "float"; + if(types[0] == 'E') dataType = FitsDataType_float; else - if(types[0] == 'I' ) dataType = "int"; + if(types[0] == 'I' ) dataType = FitsDataType_int; else - if(types[0] == 'S' ) dataType = "char*"; + if(types[0] == 'S' ) dataType = FitsDataType_char; else { cout << " types[0]= " << types[0] << endl; @@ -1092,10 +1100,21 @@ FitsOutFile::FitsOutFile() \param <WriteMode> enum , WriteMode = clear -> if alreadyy exists, the file will be overwritten (else created) ; WriteMode = append -> further objects will be appended to the file if it exists (else : file created). WriteMode = unknown -> file created if does not exist, else : exception. (the last situation is the default) */ -FitsOutFile::FitsOutFile(char flnm[], WriteMode wrm) + +FitsOutFile::FitsOutFile(string const & flnm, WriteMode wrm) { + InitNull(); + openoutputfitsfile(flnm.c_str(), wrm); +} +FitsOutFile::FitsOutFile(const char * flnm, WriteMode wrm) +{ InitNull(); + openoutputfitsfile(flnm, wrm); +} + +void FitsOutFile::openoutputfitsfile(const char * flnm, WriteMode wrm) +{ int status = 0; // create new FITS file diff --git a/FitsIOServer/fitsfile.h b/FitsIOServer/fitsfile.h index 71917b2feb797ca546e309f7c8074b04806f4d2c..4a171fd2abe5921da6357aecd7dedf0343eba9ae 100644 --- a/FitsIOServer/fitsfile.h +++ b/FitsIOServer/fitsfile.h @@ -19,7 +19,6 @@ namespace SOPHYA { class FitsFile; class FitsInFile; class FitsOutFile; - enum WriteMode {append, clear, unknown}; // @@ -52,6 +51,21 @@ namespace SOPHYA { public: + enum WriteMode {append, clear, unknown}; + + enum FitsExtensionType { + FitsExtensionType_IMAGE, + FitsExtensionType_ASCII_TBL, + FitsExtensionType_BINARY_TBL + }; + enum FitsDataType { + FitsDataType_double, + FitsDataType_float, + FitsDataType_int, + FitsDataType_char, + FitsDataType_ASCII + }; + FitsFile() { InitNull(); }; virtual ~FitsFile(); static string GetErrStatus(int status); @@ -79,11 +93,12 @@ namespace SOPHYA { public: FitsInFile(); - FitsInFile(char flnm[]); + FitsInFile(string const & flnm); + FitsInFile(const char * flnm); ~FitsInFile() { ; }; static int NbBlocks(char flnm[]); - static void GetBlockType(char flnm[], int hdunum, string& typeOfExtension, int& naxis, vector<int>& naxisn, string& dataType, DVList& dvl ); + static void GetBlockType(char flnm[], int hdunum, FitsExtensionType& typeOfExtension, int& naxis, vector<int>& naxisn, FitsDataType& dataType, DVList& dvl ); void ReadFInit(int hdunum); /*! \return a reference on a DVList containing the keywords from FITS file */ @@ -191,9 +206,9 @@ static void GetImageParameters (fitsfile* fileptr,int& bitpix,int& naxis,vector public: - FitsOutFile(); - FitsOutFile(char flnm[], WriteMode wrm = unknown ); + FitsOutFile(string const & flnm, WriteMode wrm = unknown ); + FitsOutFile(const char * flnm, WriteMode wrm = unknown ); ~FitsOutFile() { ;}; inline void InitNull() {imageOnPrimary_=false;} @@ -241,6 +256,7 @@ void DVListIntoPrimaryHeader(DVList& dvl) const; private : + void openoutputfitsfile(const char * flnm, WriteMode wrm); void writeSignatureOnFits() const; void addKeywordsOfDVList(DVList& dvl) const; diff --git a/FitsIOServer/fitsntuple.h b/FitsIOServer/fitsntuple.h index bc5b904e83de34741c0495871bda615398265676..2b8c67f77a5ffa06589614f679f90578850435c1 100644 --- a/FitsIOServer/fitsntuple.h +++ b/FitsIOServer/fitsntuple.h @@ -65,6 +65,12 @@ inline void InitNull() { fistLineToBeRead_= -1; numberOfLinesToBeRead_= -1;} }; ////////////////////////////////////////////////////////////////// +inline FitsOutFile& operator << (FitsOutFile& fios, NTuple & nt) + { FITS_NTuple fih(&nt); fih.Write(fios); return (fios); } + +inline FitsInFile& operator >> (FitsInFile& fiis, NTuple & nt) + { FITS_NTuple fih(&nt); fih.Read(fiis); return (fiis); } + } // Fin du namespace diff --git a/FitsIOServer/fitsspherehealpix.h b/FitsIOServer/fitsspherehealpix.h index c61501e60e44dca2a75e2cb55cb14c05bb9a8f11..f31f70bd9b7907fe93f6606f95f81bf4f1da15e3 100644 --- a/FitsIOServer/fitsspherehealpix.h +++ b/FitsIOServer/fitsspherehealpix.h @@ -46,6 +46,14 @@ bool ownobj_; ////////////////////////////////////////////////////////////////// +template <class T> +inline FitsOutFile& operator << (FitsOutFile& fios, SphereHEALPix<T> & sph) + { FITS_SphereHEALPix<T> fih(&sph); fih.Write(fios); return (fios); } + +template <class T> +inline FitsInFile& operator >> (FitsInFile& fiis, SphereHEALPix<T> & arr) + { FITS_SphereHEALPix<T> fih(&sph); fih.Read(fiis); return (fiis); } + } // Fin du namespace diff --git a/FitsIOServer/fitstarray.h b/FitsIOServer/fitstarray.h index d07fb970147ed4dd6373d37ac3456b61e75634cb..93ddcee441ce2bfdd36abd0a40aacd4e682fd51a 100644 --- a/FitsIOServer/fitstarray.h +++ b/FitsIOServer/fitstarray.h @@ -42,6 +42,13 @@ void WriteToFits(FitsOutFile& os) ; }; ////////////////////////////////////////////////////////////////// +template <class T> +inline FitsOutFile& operator << (FitsOutFile& fios, TArray<T> & arr) + { FITS_TArray<T> fih(&arr); fih.Write(fios); return (fios); } + +template <class T> +inline FitsInFile& operator >> (FitsInFile& fiis, TArray<T> & arr) + { FITS_TArray<T> fih(&arr); fih.Read(fiis); return (fiis); } } // Fin du namespace diff --git a/FitsIOServer/fitsxntuple.h b/FitsIOServer/fitsxntuple.h index 703c41380100acf3ac7d2769ae84d00b9105954a..9e85d5938bfaea5ec120b62fa1e12f3ebafb3326 100644 --- a/FitsIOServer/fitsxntuple.h +++ b/FitsIOServer/fitsxntuple.h @@ -68,6 +68,11 @@ inline void InitNull() }; ////////////////////////////////////////////////////////////////// +inline FitsOutFile& operator << (FitsOutFile& fios, XNTuple & nt) + { FITS_XNTuple fih(&nt); fih.Write(fios); return (fios); } + +inline FitsInFile& operator >> (FitsInFile& fiis, XNTuple & nt) + { FITS_XNTuple fih(&nt); fih.Read(fiis); return (fiis); } } // Fin du namespace