Changeset 1246 in Sophya for trunk/SophyaExt/FitsIOServer


Ignore:
Timestamp:
Oct 19, 2000, 4:35:11 PM (25 years ago)
Author:
ansari
Message:

dvlist dans primary header de fits

Location:
trunk/SophyaExt/FitsIOServer
Files:
2 edited

Legend:

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

    r1235 r1246  
    104104void FitsIOHandler::Read(FitsInFile& is, int hdunum)
    105105{
    106   //  if (hdunum == 0 ) is.moveToFollowingHeader();
    107   //  else is.ReadFInit(hdunum);
    108106  is.ReadFInit(hdunum);
    109107  ReadFromFits(is);
     
    199197  \class SOPHYA::FitsInFile
    200198
    201 class for saving  SOPHYA objects on FITS Format Files (uses cfitsio lib)
     199class for reading  SOPHYA objects from FITS Format Files (uses cfitsio lib)
    202200*/
    203201
     
    341339        {
    342340          // on calcule le numero de header a lire
    343           if (imageOnPrimary_ == true) hdunum_ = 1;
     341          if (imageOnPrimary_ == true ) hdunum_ = 1;
    344342          else hdunum_ = 2;
    345343        }
     
    420418      else
    421419        {
    422           throw PException(" first header : no image, probably error in hdunum");
     420          // the object to be read is probably a bin or ascii table
     421          // (on an extension)
     422          hdunum_++;
     423          getHeader();
     424
     425          //      throw PException(" first header : no image, probably error in hdunum");
    423426        }
    424427    }
     
    11931196  long naxis = nbdim;
    11941197  long* naxes = new long[nbdim];
    1195   //  if (hdunum_ == 1)
    1196   if (hdunum_ == 0)
     1198  bool hdunfirst= (hdunum_ == 0);
     1199  if (hdunfirst)
    11971200    {
    11981201      if (imageOnPrimary_ == false)
     
    12001203          hdunum_ = 1;
    12011204          fits_create_img(fptr_,FLOAT_IMG,0,naxes,&status);
    1202           writeSignatureOnFits();       }
    1203       //      else  hdunum_--;
     1205        }
    12041206    }
    12051207  int k;
     
    12181220          throw PException("FitsFile:::makeHeaderImageOnFits:unprogrammed type of data ");
    12191221        }
    1220 
     1222  // on ajoute eventuellement un dvlist prepare et la doc SOPHYA
    12211223  hdunum_++;
     1224  if (hdunfirst)
     1225    {
     1226      addDVListOnPrimary();
     1227      writeSignatureOnFits(1);
     1228    }
    12221229
    12231230  // write supplementary keywords
     
    12421249  fits_write_img(fptr_,TDOUBLE,1,npix,map,&status);
    12431250  if( status ) printerror( status, "erreur ecriture PutImageToFits" );
    1244   //  writeSignatureOnFits();
    12451251}
    12461252
     
    12551261  fits_write_img(fptr_,TFLOAT,1,npix, map,&status);
    12561262  if( status ) printerror( status, "erreur ecriture PutImageToFits" );
    1257   //  writeSignatureOnFits();
    12581263
    12591264}
     
    12691274  fits_write_img(fptr_,TINT,1,npix,map,&status);
    12701275  if( status ) printerror( status, "erreur ecriture PutImageToFits" );
    1271   //  writeSignatureOnFits();
    12721276}
    12731277
     
    13661370                  NULL,extn,&status);
    13671371  if( status ) printerror( status );
    1368   if ( hdunum_ == 0 ) hdunum_ = 2;
     1372  // on ajoute eventuellement un dvlist prepare
     1373  if ( hdunum_ == 0 )
     1374    {
     1375      hdunum_ = 2;
     1376      addDVListOnPrimary();
     1377      writeSignatureOnFits(1);
     1378    }
    13691379  else  hdunum_++;
    13701380  int ii;
     
    15431553Put keywords from a DVList into the primary header of the fits-file
    15441554*/
    1545 void  FitsOutFile::DVListIntoPrimaryHeader(DVList& dvl) const
     1555void  FitsOutFile::DVListIntoPrimaryHeader(DVList& dvl)
    15461556{
    15471557  int status = 0;
    15481558  int hdutype;
    1549   fits_movabs_hdu(fptr_,1,&hdutype,&status);
    1550   addKeywordsOfDVList(dvl);
    1551   fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
    1552 }
    1553 
    1554 
    1555 void FitsOutFile::writeSignatureOnFits() const
    1556 {
    1557   int status = 0;
     1559  if (hdunum_ == 0)
     1560    {
     1561      if (dvlToPrimary_ == NULL) dvlToPrimary_ = new DVList(dvl);
     1562      else dvlToPrimary_->Merge(dvl);
     1563    }
     1564  else
     1565    {
     1566      fits_movabs_hdu(fptr_,1,&hdutype,&status);
     1567      addKeywordsOfDVList(dvl);
     1568      fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     1569    }
     1570}
     1571
     1572
     1573void FitsOutFile::writeSignatureOnFits(int hdunum) const
     1574{
     1575  int status = 0;
     1576  int hdutype;
    15581577  char keyname[LEN_KEYWORD];
    15591578  char strval[FLEN_VALUE];
    15601579  char comment[FLEN_COMMENT];
     1580  if (hdunum_ == 0)
     1581    {
     1582      cerr << " WARNING : can't write keywords on non existing primary header" << endl;
     1583      return;
     1584    }
     1585  fits_movabs_hdu(fptr_,1,&hdutype,&status);
     1586  //
    15611587  strncpy(keyname, "CREATOR", LEN_KEYWORD);
    15621588  keyname[LEN_KEYWORD-1] = '\0';
     
    15721598  fits_write_comment(fptr_,"..............................................", &status);
    15731599  if( status ) printerror( status, "erreur writeSignatureOnFits"  );
    1574 }
    1575 
    1576 
    1577 void FitsOutFile::addKeywordsOfDVList(DVList& dvl) const
     1600  //
     1601  fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     1602}
     1603
     1604
     1605void FitsOutFile::addKeywordsOfDVList( DVList& dvl) const
    15781606{
    15791607  int status = 0;
    15801608  fits_write_comment(fptr_,"---------- keywords from SOPHYA ---------", &status);
    1581   if (hdunum_ == 1) writeSignatureOnFits();
    15821609  DVList::ValList::const_iterator it;
    15831610  for(it = dvl.Begin(); it != dvl.End(); it++)
     
    16311658
    16321659
    1633 
     1660void FitsOutFile::addDVListOnPrimary()
     1661    {
     1662      int status = 0;
     1663      int hdutype;
     1664      if (hdunum_ == 0)
     1665        {
     1666          cerr << " WARNING : can't write keywords on non existing primary header" << endl;
     1667          return;
     1668        }
     1669      if (dvlToPrimary_ != NULL)
     1670        {
     1671          fits_movabs_hdu(fptr_,1,&hdutype,&status);
     1672          addKeywordsOfDVList(*dvlToPrimary_);
     1673          delete dvlToPrimary_;
     1674          dvlToPrimary_ = NULL;
     1675          fits_movabs_hdu(fptr_,hdunum_,&hdutype,&status);
     1676        }
     1677    }
     1678
  • trunk/SophyaExt/FitsIOServer/fitsfile.h

    r1234 r1246  
    213213   FitsOutFile(string const & flnm, WriteMode wrm = unknown );
    214214   FitsOutFile(const char * flnm, WriteMode wrm = unknown );
    215    ~FitsOutFile() { ;};
    216    inline void InitNull() {;}
     215   ~FitsOutFile() { if (dvlToPrimary_ != NULL) delete dvlToPrimary_;};
     216   inline void InitNull() {dvlToPrimary_ = NULL;}
    217217
    218218       //////////////////////////////////////////////////////////
     
    253253
    254254
    255 void  DVListIntoPrimaryHeader(DVList& dvl) const;
     255void  DVListIntoPrimaryHeader(DVList& dvl) ;
    256256
    257257
     
    260260
    261261  void openoutputfitsfile(const char * flnm, WriteMode wrm);
    262   void writeSignatureOnFits() const;
    263   void addKeywordsOfDVList(DVList& dvl) const;
    264 
    265 
     262  void writeSignatureOnFits(int hdunum) const;
     263  void addKeywordsOfDVList( DVList& dvl) const;
     264  void addDVListOnPrimary();
     265
     266  DVList* dvlToPrimary_; /**< for transferring keywords when creating primary header */
    266267 };
    267268
Note: See TracChangeset for help on using the changeset viewer.