Changeset 1045 in Sophya
- Timestamp:
- Jun 9, 2000, 5:31:18 PM (25 years ago)
- Location:
- trunk/SophyaExt/FitsIOServer
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitsfile.cc
r1026 r1045 8 8 FitsFile::FitsFile() 9 9 { 10 InitNull(); 11 } 12 13 FitsFile::~FitsFile() 14 { 15 int status = 0; 16 if( fptr_ != NULL) 17 { 18 fits_close_file(fptr_,&status); 19 delete fptr_; 20 } 21 if( status ) printerror( status ); 22 } 23 24 void FitsFile::InitNull() 25 { 10 26 fptr_= NULL; 11 27 hdutype_= 0; 12 28 hdunum_ = 0; 13 29 30 bitpix_ = 0; 31 naxis_ = 0; 32 nbData_ = 0; 14 33 nrows_ = 0; 15 } 16 17 18 FitsFile::~FitsFile() 19 { 20 int status = 0; 21 if( fptr_ != NULL) 22 { 23 fits_close_file(fptr_,&status); 24 delete fptr_; 25 } 26 if( status ) printerror( status ); 34 nbcols_ = 0; 35 naxisn_.clear(); 36 repeat_.clear(); 37 noms_.clear(); 38 taille_des_chaines_.clear(); 39 dvl_.Clear(); 27 40 } 28 41 … … 111 124 void FitsFile::ReadF(char flnm[],int hdunum) 112 125 { 113 int status = 0; 114 hdutype_= 0; 126 ReadFInit(flnm, hdunum); 127 /* 128 InitNull(); 129 int status = 0; 130 // hdutype_= 0; 115 131 116 132 fits_open_file(&fptr_,flnm,READONLY,&status); … … 147 163 moveToFollowingHeader(); 148 164 } 165 */ 149 166 ReadFromFits(*this); 150 167 } 151 168 152 169 170 FitsFile* FitsFile::ReadFInit(char flnm[],int hdunum) 171 { 172 InitNull(); 173 int status = 0; 174 // hdutype_= 0; 175 176 fits_open_file(&fptr_,flnm,READONLY,&status); 177 if( status ) printerror( status ); 178 // 179 if (hdunum <= 1) 180 { 181 hdunum_ = 1; 182 // presence of image ? 183 int naxis= 0; 184 fits_read_key(fptr_,TINT,"NAXIS",&naxis,NULL,&status); 185 if( status ) printerror( status ); 186 if (naxis > 0 ) // there is an image 187 { 188 hdutype_ = IMAGE_HDU; 189 GetImageParameters (fptr_, bitpix_, naxis_, naxisn_); 190 nbData_ = 1; 191 int k; 192 for (k=0; k<naxis_; k++) if (naxisn_[k] > 0) nbData_ *= naxisn_[k]; 193 KeywordsIntoDVList(fptr_, dvl_,hdunum_); 194 } 195 else 196 { 197 throw PException(" first header : no image, probably error in hdunum"); 198 } 199 // 200 } 201 else 202 { 203 hdunum_ = hdunum-1; 204 int hdutype; 205 fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status); 206 if( status ) printerror( status,":FitsFile::ReadF : erreur movabs"); 207 moveToFollowingHeader(); 208 } 209 return this; 210 } 211 212 void FitsFile::ReadFFromFits() 213 { 214 ReadFromFits(*this); 215 } 153 216 void FitsFile::moveToFollowingHeader() 154 217 { … … 296 359 long naxis = nbdim; 297 360 long* naxes = new long[nbdim]; 361 if (hdunum_ == 0) 362 { 363 fits_create_img(fptr_,FLOAT_IMG,0,naxes,&status); 364 hdunum_ = 1; 365 } 298 366 int k; 299 367 for (k=0; k< nbdim; k++) naxes[k] = (long)naxisn[k]; … … 314 382 hdunum_++; 315 383 delete [] naxes; 316 if( status ) printerror( status );384 if( status ) printerror( status, "erreur creation HDU IMAGE" ); 317 385 318 386 } … … 322 390 long npix= nbData; 323 391 fits_write_img(fptr_,TDOUBLE,1,npix,map,&status); 324 if( status ) printerror( status );392 if( status ) printerror( status, "erreur ecriture putImageToFits" ); 325 393 writeSignatureOnFits(); 326 394 } … … 331 399 long npix= nbData; 332 400 fits_write_img(fptr_,TFLOAT,1,npix, map,&status); 333 if( status ) printerror( status );401 if( status ) printerror( status, "erreur ecriture putImageToFits" ); 334 402 writeSignatureOnFits(); 335 403 … … 341 409 long npix= nbData; 342 410 fits_write_img(fptr_,TINT,1,npix,map,&status); 343 if( status ) printerror( status );411 if( status ) printerror( status, "erreur ecriture putImageToFits" ); 344 412 writeSignatureOnFits(); 345 413 } … … 454 522 if( DTYPE != TDOUBLE) 455 523 { 456 throw IOExc("FitsFile::GetBinTabFCol, tentative de lecture non double"); 524 if (DTYPE == TFLOAT) cout << " WARNING: reading double from float : conversion will be made by fitsio library" << endl; 525 else 526 throw IOExc("FitsFile::GetBinTabFCol, tentative de lecture non double"); 457 527 } 458 528 long nels=nentries; … … 485 555 if( DTYPE != TFLOAT) 486 556 { 487 throw IOExc("FitsFile::GetBinTabFCol, tentative de lecture non float"); 557 if (DTYPE == TDOUBLE) cout << " WARNING: reading float from double : conversion will be made by fitsio library" << endl; 558 else 559 throw IOExc("FitsFile::GetBinTabFCol, tentative de lecture non float"); 488 560 } 489 561 long nels=nentries; … … 561 633 if( status ) printerror( status,"erreur lecture de colonne" ); 562 634 } 635 636 637 638 void FitsFile::GetBinTabLine(int NoLine, double* ddata, float* fdata, int* idata, char ** cdata) const 639 { 640 int status= 0; 641 int anull; 642 double dnull= 0.; 643 float fnull= 0.; 644 int inull= 0; 645 char* cnull= ""; 646 int dcount = 0.; 647 int fcount = 0.; 648 int icount = 0; 649 int ccount =0; 650 int ncol; 651 long nels=1; 652 for (ncol=0; ncol<nbcols_; ncol++) 653 { 654 switch (types_[ncol]) 655 { 656 case 'D' : 657 fits_read_col(fptr_,TDOUBLE,ncol+1,NoLine+1,1,1,&dnull,&ddata[dcount++],&anull,&status); 658 if( status ) printerror( status,"GetBinTabLine : erreur lecture de colonne double" ); 659 break; 660 case 'E' : 661 fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&fdata[fcount++],&anull,&status); 662 if( status ) printerror( status,"GetBinTabLine : erreur lecture de colonne float" ); 663 break; 664 case 'I' : 665 fits_read_col(fptr_,TINT,ncol+1,NoLine+1,1,1,&inull,&idata[icount++], 666 &anull,&status); 667 if( status ) printerror( status,"GetBinTabLine : erreur lecture de colonne tint" ); 668 break; 669 case 'S' : 670 fits_read_col(fptr_,TSTRING,ncol+1,NoLine+1,1,1,cnull,&cdata[ccount++],&anull,&status); 671 if( status ) printerror( status,"GetBinTabLine : erreur lecture de colonne char" ); 672 break; 673 } 674 } 675 } 676 677 void FitsFile::GetBinTabLine(int NoLine, float* fdata) const 678 { 679 int status= 0; 680 int anull; 681 float fnull= 0.; 682 long nels=1; 683 int ncol; 684 for (ncol=0; ncol<nbcols_; ncol++) 685 { 686 fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&fdata[ncol],&anull,&status); 687 if( status ) printerror( status,"GetBinTabLine : erreur lecture de colonne float" ); 688 } 689 } 690 691 692 693 694 695 696 697 563 698 int FitsFile::NbColsFromFits() const 564 699 { 565 // int status= 0;566 700 if(hdutype_ == BINARY_TBL) return nbcols_; 567 701 else … … 576 710 char FitsFile::ColTypeFromFits(int nocol) const 577 711 { 578 // int status= 0;579 712 if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL) 580 713 { … … 585 718 int FitsFile::NentriesFromFits(int nocol) const 586 719 { 587 // int status= 0;588 720 if(hdutype_ == BINARY_TBL ) return nrows_*repeat_[nocol]; 589 721 else … … 600 732 string FitsFile::ColNameFromFits(int nocol) const 601 733 { 602 // int status= 0;603 734 if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL) 604 735 { … … 609 740 int FitsFile::ColStringLengthFromFits(int nocol) const 610 741 { 611 // int status= 0;612 742 if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL) 613 743 { … … 983 1113 fits_write_comment(fptr_, " (C) DAPNIA/CEA Saclay, FRANCE 2000", &status); 984 1114 fits_write_comment(fptr_,"..............................................", &status); 985 if( status ) printerror( status );1115 if( status ) printerror( status, "erreur writeSignatureOnFits" ); 986 1116 } 987 1117 -
trunk/SophyaExt/FitsIOServer/fitsfile.h
r971 r1045 65 65 */ 66 66 void ReadF(char flnm[],int hdunum= 0); 67 FitsFile* ReadFInit(char flnm[],int hdunum=0); 68 void ReadFFromFits(); 67 69 68 70 /*! … … 155 157 void GetBinTabFCol(char** valeurs,int nentries, int NoCol) const; 156 158 // Write elements into the FITS data array 159 160 /*! 161 get the NoLine-th 'line' from the current BINTABLE extension on FITS file, 162 */ 163 void GetBinTabLine(int NoLine, double* ddata, float* fdata, int* idata, char 164 ** cdata) const; 165 /*! 166 get the NoLine-th 'line' from the current BINTABLE extension on FITS file, 167 */ 168 void GetBinTabLine(int NoLine, float* fdata) const; 169 170 171 157 172 158 173 /*! write double data from array 'map'on an IMAGE extension … … 210 225 private: 211 226 227 void InitNull(); 228 212 229 static void GetImageParameters (fitsfile* fileptr,int& bitpix,int& naxis,vector<int>& naxisn); 213 230 static void GetBinTabParameters(fitsfile* fileptr, int& nbcols, int& nrows, … … 261 278 //! DVList for transferring keywords 262 279 DVList dvl_; 280 263 281 }; 264 282
Note:
See TracChangeset
for help on using the changeset viewer.