Changeset 1300 in Sophya for trunk/SophyaExt/FitsIOServer/fitsfile.cc
- Timestamp:
- Nov 8, 2000, 11:02:58 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaExt/FitsIOServer/fitsfile.cc
r1281 r1300 104 104 void FitsIOHandler::Read(FitsInFile& is, int hdunum) 105 105 { 106 is.Read FInit(hdunum);106 is.ReadHeader(hdunum); 107 107 ReadFromFits(is); 108 108 } … … 224 224 void FitsInFile::InitNull() 225 225 { 226 227 bitpix_ = 0; 226 imageDataType_ = FitsDataType_NULL; 228 227 naxis_ = 0; 229 228 nbData_ = 0; … … 236 235 dvl_.Clear(); 237 236 238 239 237 } 240 238 … … 268 266 { 269 267 typeOfExtension = FitsExtensionType_IMAGE; 270 int bitpix; 271 GetImageParameters (fileptr, bitpix, naxis, naxisn); 272 if(bitpix == DOUBLE_IMG) dataType = FitsDataType_double; 273 else 274 if(bitpix == FLOAT_IMG) dataType = FitsDataType_float; 275 else 276 if(bitpix == LONG_IMG || bitpix == SHORT_IMG ) dataType = FitsDataType_int; 277 else 278 if (bitpix == BYTE_IMG) dataType = FitsDataType_char; 279 else 280 { 281 cout << " bitpix= " << bitpix << endl; 282 throw PException(" FitsFile::GetBlockType : unsupprted FITS data type"); 283 } 284 268 GetImageParameters (fileptr, dataType, naxis, naxisn); 285 269 } 286 270 else … … 289 273 int nrows = 0; 290 274 vector<string> noms; 291 vector< char> types;275 vector<FitsDataType> types; 292 276 vector<int> taille_des_chaines; 293 277 GetBinTabParameters(fileptr, naxis, nrows, naxisn, noms, types, taille_des_chaines); … … 302 286 { 303 287 typeOfExtension = FitsExtensionType_BINARY_TBL; 304 if(types[0] == 'D') dataType = FitsDataType_double; 305 else 306 if(types[0] == 'E') dataType = FitsDataType_float; 307 else 308 if(types[0] == 'I' ) dataType = FitsDataType_int; 309 else 310 if(types[0] == 'S' ) dataType = FitsDataType_char; 311 else 312 { 313 cout << " types[0]= " << types[0] << endl; 314 throw PException(" FitsFile::GetBlockType : unsupprted FITS data type"); 315 } 288 dataType = types[0]; 316 289 } 317 290 } … … 327 300 328 301 329 void FitsInFile::Read FInit(int hdunum)330 { 331 InitNull();302 void FitsInFile::ReadHeader(int hdunum) 303 { 304 // InitNull(); 332 305 int status = 0; 333 306 … … 352 325 353 326 354 void FitsInFile::GetImageParameters (fitsfile* fileptr, int& bitpix,int& naxis,vector<int>& naxisn)327 void FitsInFile::GetImageParameters (fitsfile* fileptr,FitsDataType& dataType,int& naxis,vector<int>& naxisn) 355 328 { 356 329 int hdunum=0; … … 359 332 360 333 // bits per pixels 334 int bitpix=0; 361 335 fits_read_key(fileptr,TINT,"BITPIX",&bitpix,NULL,&status); 362 336 if( status ) printerror( status ); 337 if(bitpix == DOUBLE_IMG) dataType = FitsDataType_double; 338 else if(bitpix == FLOAT_IMG) dataType = FitsDataType_float; 339 else if(bitpix == LONG_IMG || bitpix == SHORT_IMG ) dataType = FitsDataType_int; 340 else if (bitpix == BYTE_IMG) dataType = FitsDataType_char; 341 else 342 { 343 cout << " bitpix= " << bitpix << endl; 344 throw PException(" FitsFile::GetImageParameters : unsupported FITS data type"); 345 } 363 346 364 347 // number of dimensions in the FITS array … … 401 384 void FitsInFile::getHeader() 402 385 { 386 // si hdunum_ > 1 lit le header correspondant 387 // si hdunum_ = 1 se positionne au (et lit le) premier header qui 388 // contient reellement un objet 403 389 int status=0; 404 390 if (hdunum_ < 1) throw PException(" attempt to read hdunum < 1"); 391 InitNull(); 405 392 if (hdunum_ == 1) 406 393 { … … 412 399 { 413 400 hdutype_ = IMAGE_HDU; 414 GetImageParameters (fptr_, bitpix_, naxis_, naxisn_);401 GetImageParameters (fptr_, imageDataType_, naxis_, naxisn_); 415 402 nbData_ = 1; 416 403 int k; … … 436 423 if(hdutype_ == IMAGE_HDU) 437 424 { 438 GetImageParameters (fptr_, bitpix_, naxis_, naxisn_);425 GetImageParameters (fptr_, imageDataType_, naxis_, naxisn_); 439 426 nbData_ = 1; 440 427 int k; … … 509 496 */ 510 497 511 charFitsInFile::ColTypeFromFits(int nocol) const498 FitsFile::FitsDataType FitsInFile::ColTypeFromFits(int nocol) const 512 499 { 513 500 if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL) … … 548 535 for (k=0; k<=nocol; k++) 549 536 { 550 if (types_[k] == 'S') index++;537 if (types_[k] == FitsDataType_char) index++; 551 538 } 552 539 return taille_des_chaines_[index]; … … 578 565 switch (types_[ncol]) 579 566 { 580 case 'D':567 case FitsDataType_double : 581 568 fits_read_col(fptr_,TDOUBLE,ncol+1,NoLine+1,1,1,&dnull,&ddata[dcount++],&anull,&status); 582 569 break; 583 case 'E':570 case FitsDataType_float : 584 571 fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&fdata[fcount++],&anull,&status); 585 572 break; 586 case 'I':573 case FitsDataType_int : 587 574 fits_read_col(fptr_,TINT,ncol+1,NoLine+1,1,1,&inull,&idata[icount++], 588 575 &anull,&status); 589 576 break; 590 case 'S':577 case FitsDataType_char : 591 578 fits_read_col(fptr_,TSTRING,ncol+1,NoLine+1,1,1,cnull,&cdata[ccount++],&anull,&status); 592 579 break; … … 621 608 switch (types_[ncol]) 622 609 { 623 case 'D':610 case FitsDataType_double : 624 611 fits_read_col(fptr_,TDOUBLE,ncol+1,NoLine+1,1,1,&dnull,&ligne.ddata_[dcount++],&anull,&status); 625 626 case 'E':612 break; 613 case FitsDataType_float : 627 614 fits_read_col(fptr_,TFLOAT,ncol+1,NoLine+1,1,1,&fnull,&ligne.fdata_[fcount++],&anull,&status); 628 615 break; 629 case 'I':616 case FitsDataType_int : 630 617 fits_read_col(fptr_,TINT,ncol+1,NoLine+1,1,1,&inull,&ligne.idata_[icount++], 631 618 &anull,&status); 632 619 break; 633 case 'S':620 case FitsDataType_char : 634 621 char* chaine = new char[taille_des_chaines_[ccount]]; 635 622 fits_read_col(fptr_,TSTRING,ncol+1,NoLine+1,1,1,cnull,&chaine,&anull,&status); … … 789 776 long repeat,width; 790 777 fits_get_coltype(fptr_, NoCol+1,&DTYPE,&repeat,&width,&status); 791 if( DTYPE != TSTRING )792 { 793 throw IOExc("FitsFile::GetBinTabFCol, tentative de lecture non float");778 if( DTYPE != TSTRING && DTYPE != TBYTE) 779 { 780 throw IOExc("FitsFile::GetBinTabFCol, tentative de lecture non string"); 794 781 } 795 782 long nels=nentries; … … 821 808 { 822 809 823 if( bitpix_ != DOUBLE_IMG)810 if(imageDataType_ != FitsDataType_double) 824 811 { 825 812 cout << " The data type on fits file is not double..."; … … 855 842 if(hdutype_ == IMAGE_HDU) 856 843 { 857 if( bitpix_ != FLOAT_IMG)844 if(imageDataType_ != FitsDataType_float) 858 845 { 859 846 cout << " The data type on fits file is not float "; … … 888 875 if(hdutype_ == IMAGE_HDU) 889 876 { 890 if( bitpix_ != LONG_IMG)877 if(imageDataType_ != FitsDataType_int) 891 878 { 892 879 cout << " The data type on fits file is not int "; … … 916 903 vector<int>& repeat, 917 904 vector<string>& noms, 918 vector< char>& types,905 vector<FitsDataType>& types, 919 906 vector<int>& taille_des_chaines) 920 907 { … … 961 948 if( status ) printerror( status,"erreur lecture des noms de colonne"); 962 949 int rept=0; 963 for(ii = 0; ii < nbcols; ii++) 964 { 965 int DTYPE; 966 long width; 967 long repete = 0; 968 fits_get_coltype(fileptr,ii+1,&DTYPE,&repete,&width,&status); 969 if( status ) printerror( status,"erreur lecture type de colonne"); 970 rept = repete; 971 noms.push_back(string(ttype[ii])); 972 switch (DTYPE) 973 { 974 case TDOUBLE : 975 types.push_back('D'); 976 break; 977 case TFLOAT : 978 types.push_back('E'); 979 break; 980 case TLONG : 981 types.push_back('I'); 982 break; 983 case TINT : 984 types.push_back('I'); 985 break; 986 case TSHORT : 987 types.push_back('I'); 988 break; 989 case TSTRING : 990 types.push_back('S'); 991 taille_des_chaines.push_back(width); 992 rept/=width; 993 break; 994 default : 995 cout << " field " << ii+1 << " DTYPE= " << DTYPE << endl; 996 throw IOExc("FitsFile:: unknown type of field"); 997 } 998 repeat.push_back(rept); 950 if(hdutype == ASCII_TBL) 951 { 952 for(ii = 0; ii < nbcols; ii++) 953 { 954 int DTYPE; 955 long width; 956 long repete = 0; 957 fits_get_coltype(fileptr,ii+1,&DTYPE,&repete,&width,&status); 958 if( status ) printerror( status,"erreur lecture type de colonne"); 959 rept = repete; 960 noms.push_back(string(ttype[ii])); 961 switch (DTYPE) 962 { 963 case TDOUBLE : 964 types.push_back(FitsDataType_double); 965 break; 966 case TFLOAT : 967 types.push_back(FitsDataType_float); 968 break; 969 case TLONG : 970 types.push_back(FitsDataType_int); 971 break; 972 case TSHORT : 973 types.push_back(FitsDataType_int); 974 break; 975 case TSTRING : 976 types.push_back(FitsDataType_char); 977 taille_des_chaines.push_back(width); 978 rept/=width; 979 break; 980 default : 981 cout << " field " << ii+1 << " DTYPE= " << DTYPE << endl; 982 throw IOExc("FitsFile::GetBinTabParameters, unsupported data type of field, for ASCII table"); 983 } 984 repeat.push_back(rept); 985 } 986 } 987 else 988 { 989 for(ii = 0; ii < nbcols; ii++) 990 { 991 int DTYPE; 992 long width; 993 long repete = 0; 994 fits_get_coltype(fileptr,ii+1,&DTYPE,&repete,&width,&status); 995 if( status ) printerror( status,"erreur lecture type de colonne"); 996 rept = repete; 997 noms.push_back(string(ttype[ii])); 998 switch (DTYPE) 999 { 1000 case TDOUBLE : 1001 types.push_back(FitsDataType_double); 1002 break; 1003 case TFLOAT : 1004 types.push_back(FitsDataType_float); 1005 break; 1006 case TLONG : 1007 types.push_back(FitsDataType_int); 1008 break; 1009 case TINT : 1010 types.push_back(FitsDataType_int); 1011 break; 1012 case TSHORT : 1013 types.push_back(FitsDataType_int); 1014 break; 1015 case TSTRING : 1016 types.push_back(FitsDataType_char); 1017 taille_des_chaines.push_back(width); 1018 rept/=width; 1019 break; 1020 case TBYTE : 1021 types.push_back(FitsDataType_char); 1022 taille_des_chaines.push_back(width); 1023 rept/=width; 1024 break; 1025 default : 1026 cout << " field " << ii+1 << " DTYPE= " << DTYPE << endl; 1027 throw IOExc("FitsFile::GetBinTabParameters, unsupported data type of field, for BINTABLE"); 1028 } 1029 repeat.push_back(rept); 1030 } 999 1031 } 1000 1032 for (ii=0; ii < nbcols; ii++) delete [] ttype[ii]; … … 1292 1324 \param <taille_des_chaines> vector containing the number of characters of data for each char* typed column, with order of appearance in 'fieldType' 1293 1325 */ 1294 void FitsOutFile::makeHeaderBntblOnFits( 1326 void FitsOutFile::makeHeaderBntblOnFits(string fieldType, vector<string> Noms, int nentries, int tfields, DVList* ptr_dvl, string extname, vector<int> taille_des_chaines) 1295 1327 { 1296 1328 int k; 1297 1329 int status = 0; 1298 1330 long nrows; 1299 // verifications de coherence 1331 // verifications de coherences 1300 1332 1301 1333 if (fieldType.length() != tfields)
Note:
See TracChangeset
for help on using the changeset viewer.