Changeset 1045 in Sophya for trunk/SophyaExt/FitsIOServer


Ignore:
Timestamp:
Jun 9, 2000, 5:31:18 PM (25 years ago)
Author:
ansari
Message:

ecriture premiere image en HDU 2

Location:
trunk/SophyaExt/FitsIOServer
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaExt/FitsIOServer/fitsfile.cc

    r1026 r1045  
    88FitsFile::FitsFile()
    99{
     10  InitNull();
     11}
     12 
     13FitsFile::~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
     24void FitsFile::InitNull()
     25{
    1026  fptr_= NULL;
    1127  hdutype_= 0;
    1228  hdunum_ = 0;
    1329
     30  bitpix_ = 0;
     31  naxis_ = 0;
     32  nbData_ = 0;
    1433  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();
    2740}
    2841
     
    111124void FitsFile::ReadF(char flnm[],int hdunum)
    112125{
    113   int status = 0;
    114   hdutype_= 0;
     126  ReadFInit(flnm, hdunum);
     127  /*
     128  InitNull();
     129  int status = 0;
     130  //  hdutype_= 0;
    115131 
    116132  fits_open_file(&fptr_,flnm,READONLY,&status);
     
    147163      moveToFollowingHeader();
    148164    }
     165  */
    149166  ReadFromFits(*this);
    150167}
    151168
    152169
     170FitsFile* 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
     212void FitsFile::ReadFFromFits()
     213{
     214  ReadFromFits(*this);
     215}
    153216void FitsFile::moveToFollowingHeader()
    154217{
     
    296359  long naxis = nbdim;
    297360  long* naxes = new long[nbdim];
     361  if (hdunum_ == 0)
     362    {
     363      fits_create_img(fptr_,FLOAT_IMG,0,naxes,&status);
     364      hdunum_ = 1;
     365    }
    298366  int k;
    299367  for (k=0; k< nbdim; k++) naxes[k] = (long)naxisn[k];
     
    314382  hdunum_++;
    315383  delete [] naxes;
    316   if( status ) printerror( status );
     384  if( status ) printerror( status, "erreur creation HDU IMAGE" );
    317385
    318386}
     
    322390  long npix= nbData;
    323391  fits_write_img(fptr_,TDOUBLE,1,npix,map,&status);
    324   if( status ) printerror( status );
     392  if( status ) printerror( status, "erreur ecriture putImageToFits" );
    325393  writeSignatureOnFits();
    326394}
     
    331399  long npix= nbData;
    332400  fits_write_img(fptr_,TFLOAT,1,npix, map,&status);
    333   if( status ) printerror( status );
     401  if( status ) printerror( status, "erreur ecriture putImageToFits" );
    334402  writeSignatureOnFits();
    335403
     
    341409  long npix= nbData;
    342410  fits_write_img(fptr_,TINT,1,npix,map,&status);
    343   if( status ) printerror( status );
     411  if( status ) printerror( status, "erreur ecriture putImageToFits" );
    344412  writeSignatureOnFits();
    345413}
     
    454522      if( DTYPE != TDOUBLE)
    455523        {
    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");
    457527        }
    458528      long nels=nentries;
     
    485555      if( DTYPE != TFLOAT)
    486556        {
    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");
    488560        }
    489561      long nels=nentries;
     
    561633      if( status ) printerror( status,"erreur lecture de colonne" );
    562634    }
     635
     636
     637
     638void 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
     677void 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
    563698int  FitsFile::NbColsFromFits() const
    564699{
    565   //  int status= 0;
    566700  if(hdutype_ ==  BINARY_TBL) return nbcols_;
    567701  else
     
    576710char FitsFile::ColTypeFromFits(int nocol) const
    577711{
    578   //  int status= 0;
    579712  if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL)
    580713    {
     
    585718int FitsFile::NentriesFromFits(int nocol) const
    586719{
    587   //  int status= 0;
    588720  if(hdutype_ == BINARY_TBL  )   return nrows_*repeat_[nocol];
    589721  else
     
    600732string FitsFile::ColNameFromFits(int nocol) const
    601733{
    602   //  int status= 0;
    603734  if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL)
    604735    {
     
    609740int FitsFile::ColStringLengthFromFits(int nocol) const
    610741{
    611   //  int status= 0;
    612742  if(hdutype_ != ASCII_TBL && hdutype_ != BINARY_TBL)
    613743    {
     
    9831113  fits_write_comment(fptr_, " (C) DAPNIA/CEA     Saclay, FRANCE 2000", &status);
    9841114  fits_write_comment(fptr_,"..............................................", &status);
    985   if( status ) printerror( status );
     1115  if( status ) printerror( status, "erreur writeSignatureOnFits" );
    9861116}
    9871117
  • trunk/SophyaExt/FitsIOServer/fitsfile.h

    r971 r1045  
    6565*/
    6666  void   ReadF(char flnm[],int hdunum= 0);
     67  FitsFile* ReadFInit(char flnm[],int hdunum=0);
     68  void ReadFFromFits();
    6769 
    6870/*!
     
    155157  void GetBinTabFCol(char** valeurs,int nentries, int NoCol) const;
    156158  // Write elements into the FITS data array
     159
     160  /*!
     161get 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  /*!
     166get the NoLine-th 'line'  from the current BINTABLE extension on FITS file,
     167  */
     168  void GetBinTabLine(int NoLine, float* fdata) const;
     169
     170
     171
    157172
    158173  /*! write double data from array 'map'on an IMAGE extension
     
    210225private:
    211226
     227   void InitNull();
     228
    212229static  void GetImageParameters (fitsfile* fileptr,int& bitpix,int& naxis,vector<int>& naxisn);
    213230static  void GetBinTabParameters(fitsfile* fileptr, int& nbcols, int& nrows,
     
    261278  //! DVList for transferring keywords
    262279  DVList dvl_;
     280
    263281};
    264282
Note: See TracChangeset for help on using the changeset viewer.